Skip to content

Commit d6c1bac

Browse files
committed
Revert "Scope - getFunctionCallStack methods return extended reflection objects"
1 parent a83715a commit d6c1bac

20 files changed

Lines changed: 147 additions & 263 deletions

src/Analyser/ArgumentsNormalizer.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use PhpParser\Node\Expr\New_;
99
use PhpParser\Node\Expr\StaticCall;
1010
use PHPStan\Node\Expr\TypeExpr;
11-
use PHPStan\Reflection\ExtendedParametersAcceptor;
1211
use PHPStan\Reflection\ParametersAcceptor;
1312
use PHPStan\Reflection\ParametersAcceptorSelector;
1413
use PHPStan\ShouldNotHappenException;
@@ -32,7 +31,7 @@ final class ArgumentsNormalizer
3231
public const ORIGINAL_ARG_ATTRIBUTE = 'originalArg';
3332

3433
/**
35-
* @return array{ExtendedParametersAcceptor, FuncCall, TrinaryLogic}|null
34+
* @return array{ParametersAcceptor, FuncCall, TrinaryLogic}|null
3635
*/
3736
public static function reorderCallUserFuncArguments(
3837
FuncCall $callUserFuncCall,

src/Analyser/InternalScopeFactory.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
namespace PHPStan\Analyser;
44

5-
use PHPStan\Reflection\ExtendedMethodReflection;
6-
use PHPStan\Reflection\ExtendedParameterReflection;
75
use PHPStan\Reflection\FunctionReflection;
6+
use PHPStan\Reflection\MethodReflection;
7+
use PHPStan\Reflection\ParameterReflection;
88
use PHPStan\Reflection\Php\PhpFunctionFromParserNodeReflection;
99
use PHPStan\Type\ClosureType;
1010

@@ -18,7 +18,7 @@ interface InternalScopeFactory
1818
* @param list<string> $inClosureBindScopeClasses
1919
* @param array<string, true> $currentlyAssignedExpressions
2020
* @param array<string, true> $currentlyAllowedUndefinedExpressions
21-
* @param list<array{FunctionReflection|ExtendedMethodReflection|null, ExtendedParameterReflection|null}> $inFunctionCallsStack
21+
* @param list<array{FunctionReflection|MethodReflection|null, ParameterReflection|null}> $inFunctionCallsStack
2222
*/
2323
public function create(
2424
ScopeContext $context,

src/Analyser/MutatingScope.php

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,12 @@
6767
use PHPStan\Reflection\ClassReflection;
6868
use PHPStan\Reflection\Dummy\DummyConstructorReflection;
6969
use PHPStan\Reflection\ExtendedMethodReflection;
70-
use PHPStan\Reflection\ExtendedParameterReflection;
7170
use PHPStan\Reflection\ExtendedPropertyReflection;
7271
use PHPStan\Reflection\FunctionReflection;
7372
use PHPStan\Reflection\InitializerExprContext;
7473
use PHPStan\Reflection\InitializerExprTypeResolver;
7574
use PHPStan\Reflection\MethodReflection;
76-
use PHPStan\Reflection\Native\ExtendedNativeParameterReflection;
75+
use PHPStan\Reflection\Native\NativeParameterReflection;
7776
use PHPStan\Reflection\ParameterReflection;
7877
use PHPStan\Reflection\ParametersAcceptorSelector;
7978
use PHPStan\Reflection\PassedByReference;
@@ -209,7 +208,7 @@ class MutatingScope implements Scope, NodeCallbackInvoker
209208
* @param array<string, true> $currentlyAssignedExpressions
210209
* @param array<string, true> $currentlyAllowedUndefinedExpressions
211210
* @param array<string, ExpressionTypeHolder> $nativeExpressionTypes
212-
* @param list<array{ExtendedMethodReflection|FunctionReflection|null, ExtendedParameterReflection|null}> $inFunctionCallsStack
211+
* @param list<array{MethodReflection|FunctionReflection|null, ParameterReflection|null}> $inFunctionCallsStack
213212
*/
214213
public function __construct(
215214
protected InternalScopeFactory $scopeFactory,
@@ -1381,22 +1380,15 @@ private function resolveType(string $exprString, Expr $node): Type
13811380
if (!$param->var instanceof Variable || !is_string($param->var->name)) {
13821381
throw new ShouldNotHappenException();
13831382
}
1384-
$paramType = $this->getFunctionType($param->type, $this->isParameterValueNullable($param), false);
1385-
$parameters[] = new ExtendedNativeParameterReflection(
1383+
$parameters[] = new NativeParameterReflection(
13861384
$param->var->name,
13871385
$firstOptionalParameterIndex !== null && $i >= $firstOptionalParameterIndex,
1388-
$paramType,
1389-
new MixedType(),
1390-
$paramType,
1386+
$this->getFunctionType($param->type, $this->isParameterValueNullable($param), false),
13911387
$param->byRef
13921388
? PassedByReference::createCreatesNewVariable()
13931389
: PassedByReference::createNo(),
13941390
$param->variadic,
13951391
$param->default !== null ? $this->getType($param->default) : null,
1396-
null,
1397-
TrinaryLogic::createMaybe(),
1398-
null,
1399-
[],
14001392
);
14011393
}
14021394

@@ -2933,9 +2925,9 @@ public function hasExpressionType(Expr $node): TrinaryLogic
29332925
}
29342926

29352927
/**
2936-
* @param ExtendedMethodReflection|FunctionReflection|null $reflection
2928+
* @param MethodReflection|FunctionReflection|null $reflection
29372929
*/
2938-
public function pushInFunctionCall($reflection, ?ExtendedParameterReflection $parameter, bool $rememberTypes): self
2930+
public function pushInFunctionCall($reflection, ?ParameterReflection $parameter, bool $rememberTypes): self
29392931
{
29402932
$stack = $this->inFunctionCallsStack;
29412933
$stack[] = [$reflection, $parameter];

src/Analyser/NodeScopeResolver.php

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@
151151
use PHPStan\Reflection\InitializerExprContext;
152152
use PHPStan\Reflection\InitializerExprTypeResolver;
153153
use PHPStan\Reflection\MethodReflection;
154-
use PHPStan\Reflection\Native\ExtendedNativeParameterReflection;
155154
use PHPStan\Reflection\Native\NativeMethodReflection;
155+
use PHPStan\Reflection\Native\NativeParameterReflection;
156156
use PHPStan\Reflection\ParameterReflection;
157157
use PHPStan\Reflection\ParametersAcceptor;
158158
use PHPStan\Reflection\ParametersAcceptorSelector;
@@ -178,6 +178,7 @@
178178
use PHPStan\Type\Generic\TemplateTypeHelper;
179179
use PHPStan\Type\Generic\TemplateTypeMap;
180180
use PHPStan\Type\Generic\TemplateTypeVariance;
181+
use PHPStan\Type\Generic\TemplateTypeVarianceMap;
181182
use PHPStan\Type\IntegerRangeType;
182183
use PHPStan\Type\IntegerType;
183184
use PHPStan\Type\IntersectionType;
@@ -3171,7 +3172,7 @@ function (MutatingScope $scope) use ($stmt, $expr, $nodeCallback, $context, $sto
31713172
TemplateTypeHelper::resolveTemplateTypes(
31723173
$selfOutType,
31733174
$parametersAcceptor->getResolvedTemplateTypeMap(),
3174-
$parametersAcceptor->getCallSiteVarianceMap(),
3175+
$parametersAcceptor instanceof ExtendedParametersAcceptor ? $parametersAcceptor->getCallSiteVarianceMap() : TemplateTypeVarianceMap::createEmpty(),
31753176
TemplateTypeVariance::createCovariant(),
31763177
),
31773178
$scope->getNativeType($normalizedExpr->var),
@@ -5215,19 +5216,13 @@ public function createCallableParameters(Scope $scope, Expr $closureExpr, ?array
52155216
}
52165217

52175218
$type = $scope->getType($args[$index]->value);
5218-
$callableParameters[$index] = new ExtendedNativeParameterReflection(
5219+
$callableParameters[$index] = new NativeParameterReflection(
52195220
$callableParameter->getName(),
52205221
$callableParameter->isOptional(),
52215222
$type,
5222-
$type,
5223-
$scope->getNativeType($args[$index]->value),
52245223
$callableParameter->passedByReference(),
52255224
$callableParameter->isVariadic(),
52265225
$callableParameter->getDefaultValue(),
5227-
$callableParameter->getOutType(),
5228-
$callableParameter->isImmediatelyInvokedCallable(),
5229-
$callableParameter->getClosureThisType(),
5230-
$callableParameter->getAttributes(),
52315226
);
52325227
}
52335228
}
@@ -5500,7 +5495,7 @@ private function resolveClosureThisType(
55005495
}
55015496

55025497
/**
5503-
* @param ExtendedMethodReflection|FunctionReflection|null $calleeReflection
5498+
* @param MethodReflection|FunctionReflection|null $calleeReflection
55045499
* @param callable(Node $node, Scope $scope): void $nodeCallback
55055500
*/
55065501
private function processArgs(
@@ -5516,10 +5511,6 @@ private function processArgs(
55165511
?MutatingScope $closureBindScope = null,
55175512
): ExpressionResult
55185513
{
5519-
if ($parametersAcceptor !== null && !$parametersAcceptor instanceof ExtendedParametersAcceptor) {
5520-
throw new ShouldNotHappenException();
5521-
}
5522-
55235514
$args = $callLike->getArgs();
55245515

55255516
$parameters = null;
@@ -5541,14 +5532,18 @@ private function processArgs(
55415532
$assignByReference = $parameters[$i]->passedByReference()->createsNewVariable();
55425533
$parameterType = $parameters[$i]->getType();
55435534

5544-
$parameterNativeType = $parameters[$i]->getNativeType();
5535+
if ($parameters[$i] instanceof ExtendedParameterReflection) {
5536+
$parameterNativeType = $parameters[$i]->getNativeType();
5537+
}
55455538
$parameter = $parameters[$i];
55465539
} elseif (count($parameters) > 0 && $parametersAcceptor->isVariadic()) {
55475540
$lastParameter = array_last($parameters);
55485541
$assignByReference = $lastParameter->passedByReference()->createsNewVariable();
55495542
$parameterType = $lastParameter->getType();
55505543

5551-
$parameterNativeType = $lastParameter->getNativeType();
5544+
if ($lastParameter instanceof ExtendedParameterReflection) {
5545+
$parameterNativeType = $lastParameter->getNativeType();
5546+
}
55525547
$parameter = $lastParameter;
55535548
}
55545549
}
@@ -5737,7 +5732,10 @@ private function processArgs(
57375732
$paramOutType = $this->getParameterOutExtensionsType($callLike, $calleeReflection, $currentParameter, $scope);
57385733
if ($paramOutType !== null) {
57395734
$byRefType = $paramOutType;
5740-
} elseif ($currentParameter->getOutType() !== null) {
5735+
} elseif (
5736+
$currentParameter instanceof ExtendedParameterReflection
5737+
&& $currentParameter->getOutType() !== null
5738+
) {
57415739
$byRefType = $currentParameter->getOutType();
57425740
} elseif (
57435741
$calleeReflection instanceof MethodReflection

src/Analyser/Scope.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@
1111
use PHPStan\Reflection\ClassMemberAccessAnswerer;
1212
use PHPStan\Reflection\ClassReflection;
1313
use PHPStan\Reflection\ExtendedMethodReflection;
14-
use PHPStan\Reflection\ExtendedParameterReflection;
1514
use PHPStan\Reflection\ExtendedPropertyReflection;
1615
use PHPStan\Reflection\FunctionReflection;
16+
use PHPStan\Reflection\MethodReflection;
1717
use PHPStan\Reflection\NamespaceAnswerer;
18+
use PHPStan\Reflection\ParameterReflection;
1819
use PHPStan\Reflection\Php\PhpFunctionFromParserNodeReflection;
1920
use PHPStan\TrinaryLogic;
2021
use PHPStan\Type\ClosureType;
@@ -141,10 +142,10 @@ public function isInFunctionExists(string $functionName): bool;
141142

142143
public function isInClosureBind(): bool;
143144

144-
/** @return list<FunctionReflection|ExtendedMethodReflection> */
145+
/** @return list<FunctionReflection|MethodReflection> */
145146
public function getFunctionCallStack(): array;
146147

147-
/** @return list<array{FunctionReflection|ExtendedMethodReflection, ExtendedParameterReflection|null}> */
148+
/** @return list<array{FunctionReflection|MethodReflection, ParameterReflection|null}> */
148149
public function getFunctionCallStackWithParameters(): array;
149150

150151
public function isParameterValueNullable(Param $parameter): bool;

src/Analyser/TypeSpecifier.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
use PHPStan\Node\Printer\ExprPrinter;
2727
use PHPStan\Php\PhpVersion;
2828
use PHPStan\Reflection\Assertions;
29+
use PHPStan\Reflection\ExtendedParametersAcceptor;
2930
use PHPStan\Reflection\ParametersAcceptor;
3031
use PHPStan\Reflection\ParametersAcceptorSelector;
3132
use PHPStan\Reflection\ReflectionProvider;
@@ -55,6 +56,7 @@
5556
use PHPStan\Type\Generic\TemplateType;
5657
use PHPStan\Type\Generic\TemplateTypeHelper;
5758
use PHPStan\Type\Generic\TemplateTypeVariance;
59+
use PHPStan\Type\Generic\TemplateTypeVarianceMap;
5860
use PHPStan\Type\IntegerRangeType;
5961
use PHPStan\Type\IntegerType;
6062
use PHPStan\Type\IntersectionType;
@@ -508,7 +510,7 @@ public function specifyTypesInCondition(
508510
$asserts = $assertions->mapTypes(static fn (Type $type) => TemplateTypeHelper::resolveTemplateTypes(
509511
$type,
510512
$parametersAcceptor->getResolvedTemplateTypeMap(),
511-
$parametersAcceptor->getCallSiteVarianceMap(),
513+
$parametersAcceptor instanceof ExtendedParametersAcceptor ? $parametersAcceptor->getCallSiteVarianceMap() : TemplateTypeVarianceMap::createEmpty(),
512514
TemplateTypeVariance::createInvariant(),
513515
));
514516
$specifiedTypes = $this->specifyTypesFromAsserts($context, $expr, $asserts, $parametersAcceptor, $scope);
@@ -562,7 +564,7 @@ public function specifyTypesInCondition(
562564
$asserts = $assertions->mapTypes(static fn (Type $type) => TemplateTypeHelper::resolveTemplateTypes(
563565
$type,
564566
$parametersAcceptor->getResolvedTemplateTypeMap(),
565-
$parametersAcceptor->getCallSiteVarianceMap(),
567+
$parametersAcceptor instanceof ExtendedParametersAcceptor ? $parametersAcceptor->getCallSiteVarianceMap() : TemplateTypeVarianceMap::createEmpty(),
566568
TemplateTypeVariance::createInvariant(),
567569
));
568570
$specifiedTypes = $this->specifyTypesFromAsserts($context, $expr, $asserts, $parametersAcceptor, $scope);
@@ -621,7 +623,7 @@ public function specifyTypesInCondition(
621623
$asserts = $assertions->mapTypes(static fn (Type $type) => TemplateTypeHelper::resolveTemplateTypes(
622624
$type,
623625
$parametersAcceptor->getResolvedTemplateTypeMap(),
624-
$parametersAcceptor->getCallSiteVarianceMap(),
626+
$parametersAcceptor instanceof ExtendedParametersAcceptor ? $parametersAcceptor->getCallSiteVarianceMap() : TemplateTypeVarianceMap::createEmpty(),
625627
TemplateTypeVariance::createInvariant(),
626628
));
627629
$specifiedTypes = $this->specifyTypesFromAsserts($context, $expr, $asserts, $parametersAcceptor, $scope);
@@ -1090,7 +1092,7 @@ public function specifyTypesInCondition(
10901092
$asserts = $asserts->mapTypes(static fn (Type $type) => TemplateTypeHelper::resolveTemplateTypes(
10911093
$type,
10921094
$parametersAcceptor->getResolvedTemplateTypeMap(),
1093-
$parametersAcceptor->getCallSiteVarianceMap(),
1095+
$parametersAcceptor instanceof ExtendedParametersAcceptor ? $parametersAcceptor->getCallSiteVarianceMap() : TemplateTypeVarianceMap::createEmpty(),
10941096
TemplateTypeVariance::createInvariant(),
10951097
));
10961098

src/Dependency/DependencyResolver.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use PHPStan\Node\MethodCallableNode;
2424
use PHPStan\Node\StaticMethodCallableNode;
2525
use PHPStan\Reflection\ClassReflection;
26+
use PHPStan\Reflection\ExtendedParameterReflection;
2627
use PHPStan\Reflection\ExtendedParametersAcceptor;
2728
use PHPStan\Reflection\FunctionReflection;
2829
use PHPStan\Reflection\ReflectionProvider;
@@ -180,6 +181,9 @@ public function resolveDependencies(Node $node, Scope $scope): NodeDependencies
180181
}
181182

182183
foreach ($variant->getParameters() as $parameter) {
184+
if (!$parameter instanceof ExtendedParameterReflection) {
185+
continue;
186+
}
183187
if ($parameter->getOutType() !== null) {
184188
foreach ($parameter->getOutType()->getReferencedClasses() as $referencedClass) {
185189
$this->addClassToDependencies($referencedClass, $dependenciesReflections);

src/Reflection/Callables/CallableParametersAcceptor.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
namespace PHPStan\Reflection\Callables;
44

55
use PHPStan\Node\InvalidateExprNode;
6-
use PHPStan\Reflection\ExtendedParametersAcceptor;
6+
use PHPStan\Reflection\ParametersAcceptor;
77
use PHPStan\TrinaryLogic;
88

99
/**
1010
* @api
1111
*/
12-
interface CallableParametersAcceptor extends ExtendedParametersAcceptor
12+
interface CallableParametersAcceptor extends ParametersAcceptor
1313
{
1414

1515
/**

src/Reflection/InaccessibleMethod.php

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,6 @@ public function getReturnType(): Type
5252
return new MixedType();
5353
}
5454

55-
public function getPhpDocReturnType(): Type
56-
{
57-
return new MixedType();
58-
}
59-
60-
public function getNativeReturnType(): Type
61-
{
62-
return new MixedType();
63-
}
64-
6555
public function getThrowPoints(): array
6656
{
6757
return [];

src/Reflection/Native/ExtendedNativeParameterReflection.php

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
use PHPStan\TrinaryLogic;
99
use PHPStan\Type\MixedType;
1010
use PHPStan\Type\Type;
11-
use PHPStan\Type\TypeCombinator;
12-
use function array_merge;
1311

1412
final class ExtendedNativeParameterReflection implements ExtendedParameterReflection
1513
{
@@ -99,22 +97,4 @@ public function getAttributes(): array
9997
return $this->attributes;
10098
}
10199

102-
public function union(ExtendedParameterReflection $other): self
103-
{
104-
return new self(
105-
$this->name,
106-
$this->optional && $other->isOptional(),
107-
TypeCombinator::union($this->type, $other->getType()),
108-
TypeCombinator::union($this->phpDocType, $other->getPhpDocType()),
109-
TypeCombinator::union($this->nativeType, $other->getNativeType()),
110-
$this->passedByReference->combine($other->passedByReference()),
111-
$this->variadic && $other->isVariadic(),
112-
$this->optional && $other->isOptional() ? $this->defaultValue : null,
113-
$this->outType !== null && $other->getOutType() !== null ? TypeCombinator::union($this->outType, $other->getOutType()) : null,
114-
$this->immediatelyInvokedCallable->and($other->isImmediatelyInvokedCallable()),
115-
$this->closureThisType !== null && $other->getClosureThisType() !== null ? TypeCombinator::union($this->closureThisType, $other->getClosureThisType()) : null,
116-
array_merge($this->attributes, $other->getAttributes()),
117-
);
118-
}
119-
120100
}

0 commit comments

Comments
 (0)