1: <?php declare(strict_types = 1);
2:
3: namespace PHPStan\Reflection;
4:
5: use PHPStan\Turbo\ShadowedByTurboExtension;
6: use PHPStan\Type\Generic\TemplateTypeMap;
7: use PHPStan\Type\Generic\TemplateTypeVarianceMap;
8: use PHPStan\Type\Type;
9:
10: /**
11: * @api
12: */
13: #[ShadowedByTurboExtension(implementation: __DIR__ . '/../../turbo-ext/src/FunctionVariant.cpp')]
14: class FunctionVariant implements ParametersAcceptor
15: {
16:
17: private TemplateTypeVarianceMap $callSiteVarianceMap;
18:
19: /**
20: * @api
21: * @param list<ParameterReflection> $parameters
22: */
23: public function __construct(
24: private TemplateTypeMap $templateTypeMap,
25: private ?TemplateTypeMap $resolvedTemplateTypeMap,
26: private array $parameters,
27: private bool $isVariadic,
28: private Type $returnType,
29: ?TemplateTypeVarianceMap $callSiteVarianceMap = null,
30: )
31: {
32: $this->callSiteVarianceMap = $callSiteVarianceMap ?? TemplateTypeVarianceMap::createEmpty();
33: }
34:
35: public function getTemplateTypeMap(): TemplateTypeMap
36: {
37: return $this->templateTypeMap;
38: }
39:
40: public function getResolvedTemplateTypeMap(): TemplateTypeMap
41: {
42: return $this->resolvedTemplateTypeMap ?? TemplateTypeMap::createEmpty();
43: }
44:
45: public function getCallSiteVarianceMap(): TemplateTypeVarianceMap
46: {
47: return $this->callSiteVarianceMap;
48: }
49:
50: /**
51: * @return list<ParameterReflection>
52: */
53: public function getParameters(): array
54: {
55: return $this->parameters;
56: }
57:
58: public function isVariadic(): bool
59: {
60: return $this->isVariadic;
61: }
62:
63: public function getReturnType(): Type
64: {
65: return $this->returnType;
66: }
67:
68: }
69: