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/ExtendedFunctionVariant.cpp')]
14: class ExtendedFunctionVariant extends FunctionVariant implements ExtendedParametersAcceptor
15: {
16:
17: /**
18: * @param list<ExtendedParameterReflection> $parameters
19: * @api
20: */
21: public function __construct(
22: TemplateTypeMap $templateTypeMap,
23: ?TemplateTypeMap $resolvedTemplateTypeMap,
24: array $parameters,
25: bool $isVariadic,
26: Type $returnType,
27: private Type $phpDocReturnType,
28: private Type $nativeReturnType,
29: ?TemplateTypeVarianceMap $callSiteVarianceMap = null,
30: )
31: {
32: parent::__construct(
33: $templateTypeMap,
34: $resolvedTemplateTypeMap,
35: $parameters,
36: $isVariadic,
37: $returnType,
38: $callSiteVarianceMap,
39: );
40: }
41:
42: /**
43: * @return list<ExtendedParameterReflection>
44: */
45: public function getParameters(): array
46: {
47: /** @var list<ExtendedParameterReflection> $parameters */
48: $parameters = parent::getParameters();
49:
50: return $parameters;
51: }
52:
53: public function getPhpDocReturnType(): Type
54: {
55: return $this->phpDocReturnType;
56: }
57:
58: public function getNativeReturnType(): Type
59: {
60: return $this->nativeReturnType;
61: }
62:
63: }
64: