From 55758e30690b4edee9eff3c74ccec30bbf484dba Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 15 Oct 2025 13:33:16 +0200 Subject: [PATCH 1/6] add intersection fixture --- .../Fixture/cover_intersection.php.inc | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/Fixture/cover_intersection.php.inc diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/Fixture/cover_intersection.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/Fixture/cover_intersection.php.inc new file mode 100644 index 00000000000..105d4f7e6f6 --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/Fixture/cover_intersection.php.inc @@ -0,0 +1,53 @@ +nextItems($items); + } + + private function nextItems($items): void + { + } +} + +?> +----- +nextItems($items); + } + + private function nextItems(array $items): void + { + } +} + +?> From 3db92ed5e7394b456f2a0988bed1f043b51f381b Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 15 Oct 2025 13:37:15 +0200 Subject: [PATCH 2/6] remove accessor array list type --- .../cover_intersection.php | 25 +++++++++ .../cover_intersection.php.inc | 6 +-- .../cover_intersection_with_docblock.php.inc | 53 +++++++++++++++++++ .../NodeAnalyzer/CallTypesResolver.php | 13 +++++ 4 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection.php rename rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/{Fixture => FixtureIntersection}/cover_intersection.php.inc (83%) create mode 100644 rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection_with_docblock.php.inc diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection.php b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection.php new file mode 100644 index 00000000000..1ea39888de7 --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection.php @@ -0,0 +1,25 @@ +nextItems($items); + } + + private function nextItems($items): void + { + } +} + +?> diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/Fixture/cover_intersection.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection.php.inc similarity index 83% rename from rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/Fixture/cover_intersection.php.inc rename to rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection.php.inc index 105d4f7e6f6..5e80b9f7f8d 100644 --- a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/Fixture/cover_intersection.php.inc +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection.php.inc @@ -2,13 +2,12 @@ declare(strict_types=1); -namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddMethodCallBasedStrictParamTypeRector\Fixture; +namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddMethodCallBasedStrictParamTypeRector\FixtureIntersection; final class CoverIntersection { public function run(array $values): void { - /** @var int[] $items */ $items = []; foreach ($values as $value) { @@ -29,13 +28,12 @@ final class CoverIntersection declare(strict_types=1); -namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddMethodCallBasedStrictParamTypeRector\Fixture; +namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddMethodCallBasedStrictParamTypeRector\FixtureIntersection; final class CoverIntersection { public function run(array $values): void { - /** @var int[] $items */ $items = []; foreach ($values as $value) { diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection_with_docblock.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection_with_docblock.php.inc new file mode 100644 index 00000000000..2b96c13af3c --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection_with_docblock.php.inc @@ -0,0 +1,53 @@ +nextItems($items); + } + + private function nextItems($items): void + { + } +} + +?> +----- +nextItems($items); + } + + private function nextItems(array $items): void + { + } +} + +?> diff --git a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php index 857b8fcfeaa..15be180226e 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php +++ b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php @@ -12,13 +12,17 @@ use PhpParser\Node\Identifier; use PhpParser\Node\VariadicPlaceholder; use PHPStan\Reflection\ReflectionProvider; +use PHPStan\Type\Accessory\AccessoryArrayListType; use PHPStan\Type\ArrayType; use PHPStan\Type\Constant\ConstantArrayType; +use PHPStan\Type\IntersectionType; use PHPStan\Type\MixedType; use PHPStan\Type\NeverType; use PHPStan\Type\ObjectType; use PHPStan\Type\ThisType; use PHPStan\Type\Type; +use PHPStan\Type\TypeCombinator; +use PHPStan\Type\TypeUtils; use PHPStan\Type\UnionType; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; @@ -90,6 +94,15 @@ private function resolveStrictArgValueType(Arg $arg): Type { $argValueType = $this->nodeTypeResolver->getNativeType($arg->value); + if ($argValueType instanceof IntersectionType) { + dump($argValueType); + + $argValueType = TypeCombinator::remove($argValueType, new AccessoryArrayListType()); + + dump($argValueType); + die; + } + return $this->normalizeType($argValueType); } From 28f5852a9a5219b55c1bed5d6b7d1086727dd92f Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 15 Oct 2025 13:41:53 +0200 Subject: [PATCH 3/6] remove accessory array type, to allow array type fill --- .../cover_intersection.php | 25 --------- .../cover_intersection_with_docblock.php.inc | 53 ------------------- .../NodeAnalyzer/CallTypesResolver.php | 13 ----- src/NodeTypeResolver/NodeTypeResolver.php | 28 ++++++++++ 4 files changed, 28 insertions(+), 91 deletions(-) delete mode 100644 rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection.php delete mode 100644 rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection_with_docblock.php.inc diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection.php b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection.php deleted file mode 100644 index 1ea39888de7..00000000000 --- a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection.php +++ /dev/null @@ -1,25 +0,0 @@ -nextItems($items); - } - - private function nextItems($items): void - { - } -} - -?> diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection_with_docblock.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection_with_docblock.php.inc deleted file mode 100644 index 2b96c13af3c..00000000000 --- a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddMethodCallBasedStrictParamTypeRector/FixtureIntersection/cover_intersection_with_docblock.php.inc +++ /dev/null @@ -1,53 +0,0 @@ -nextItems($items); - } - - private function nextItems($items): void - { - } -} - -?> ------ -nextItems($items); - } - - private function nextItems(array $items): void - { - } -} - -?> diff --git a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php index 15be180226e..857b8fcfeaa 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php +++ b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php @@ -12,17 +12,13 @@ use PhpParser\Node\Identifier; use PhpParser\Node\VariadicPlaceholder; use PHPStan\Reflection\ReflectionProvider; -use PHPStan\Type\Accessory\AccessoryArrayListType; use PHPStan\Type\ArrayType; use PHPStan\Type\Constant\ConstantArrayType; -use PHPStan\Type\IntersectionType; use PHPStan\Type\MixedType; use PHPStan\Type\NeverType; use PHPStan\Type\ObjectType; use PHPStan\Type\ThisType; use PHPStan\Type\Type; -use PHPStan\Type\TypeCombinator; -use PHPStan\Type\TypeUtils; use PHPStan\Type\UnionType; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; @@ -94,15 +90,6 @@ private function resolveStrictArgValueType(Arg $arg): Type { $argValueType = $this->nodeTypeResolver->getNativeType($arg->value); - if ($argValueType instanceof IntersectionType) { - dump($argValueType); - - $argValueType = TypeCombinator::remove($argValueType, new AccessoryArrayListType()); - - dump($argValueType); - die; - } - return $this->normalizeType($argValueType); } diff --git a/src/NodeTypeResolver/NodeTypeResolver.php b/src/NodeTypeResolver/NodeTypeResolver.php index 41dad8c7b3e..c888e7a0ccf 100644 --- a/src/NodeTypeResolver/NodeTypeResolver.php +++ b/src/NodeTypeResolver/NodeTypeResolver.php @@ -29,11 +29,13 @@ use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\Native\NativeFunctionReflection; use PHPStan\Reflection\ReflectionProvider; +use PHPStan\Type\Accessory\AccessoryArrayListType; use PHPStan\Type\ArrayType; use PHPStan\Type\Constant\ConstantArrayType; use PHPStan\Type\Constant\ConstantBooleanType; use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\ErrorType; +use PHPStan\Type\IntersectionType; use PHPStan\Type\MixedType; use PHPStan\Type\NeverType; use PHPStan\Type\NullType; @@ -279,6 +281,10 @@ public function getNativeType(Expr $expr): Type $type = $this->resolveArrayDimFetchType($expr, $scope, $type); } + if ($type instanceof IntersectionType) { + $type = $this->cleanArrayIntersectionType($type); + } + if (! $type instanceof UnionType) { if ($this->isAnonymousObjectType($type)) { return new ObjectWithoutClassType(); @@ -675,4 +681,26 @@ private function isSubstrOnPHP74(FuncCall $funcCall): bool return ! $this->phpVersionProvider->isAtLeastPhpVersion(PhpVersion::PHP_80); } + + private function cleanArrayIntersectionType(Type $type): Type + { + if (! $type instanceof IntersectionType) { + return $type; + } + + $cleanTypes = []; + foreach ($type->getTypes() as $intersectionType) { + if ($intersectionType instanceof AccessoryArrayListType) { + continue; + } + + $cleanTypes[] = $intersectionType; + } + + if (count($cleanTypes) === 1) { + return $cleanTypes[0]; + } + + return new IntersectionType($cleanTypes); + } } From c419fe28a90e3cacb9597ec8eb84a938cc8211a6 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 15 Oct 2025 18:11:44 +0200 Subject: [PATCH 4/6] move to correct type method --- src/NodeTypeResolver/NodeTypeResolver.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/NodeTypeResolver/NodeTypeResolver.php b/src/NodeTypeResolver/NodeTypeResolver.php index c888e7a0ccf..21d58da5cc8 100644 --- a/src/NodeTypeResolver/NodeTypeResolver.php +++ b/src/NodeTypeResolver/NodeTypeResolver.php @@ -281,10 +281,6 @@ public function getNativeType(Expr $expr): Type $type = $this->resolveArrayDimFetchType($expr, $scope, $type); } - if ($type instanceof IntersectionType) { - $type = $this->cleanArrayIntersectionType($type); - } - if (! $type instanceof UnionType) { if ($this->isAnonymousObjectType($type)) { return new ObjectWithoutClassType(); @@ -383,6 +379,8 @@ private function correctType(Type $type): Type $type = $this->accessoryNonEmptyStringTypeCorrector->correct($type); $type = $this->genericClassStringTypeCorrector->correct($type); + $type = $this->cleanArrayIntersectionType($type); + return $this->accessoryNonEmptyArrayTypeCorrector->correct($type); } From c3d5ba6352d223a24a546d0ce87c3a3db51ca644 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 15 Oct 2025 18:14:54 +0200 Subject: [PATCH 5/6] extract NodeTypeCorrector service to wrap similar logic --- ...ocblockForArrayDimAssignedObjectRector.php | 22 +++---- src/NodeTypeResolver/NodeTypeCorrector.php | 62 +++++++++++++++++++ src/NodeTypeResolver/NodeTypeResolver.php | 47 ++------------ 3 files changed, 73 insertions(+), 58 deletions(-) create mode 100644 src/NodeTypeResolver/NodeTypeCorrector.php diff --git a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForArrayDimAssignedObjectRector.php b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForArrayDimAssignedObjectRector.php index bf38a8df846..5809dc3f431 100644 --- a/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForArrayDimAssignedObjectRector.php +++ b/rules/TypeDeclarationDocblocks/Rector/ClassMethod/AddReturnDocblockForArrayDimAssignedObjectRector.php @@ -14,9 +14,7 @@ use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Return_; use PhpParser\NodeVisitor; -use PHPStan\Type\Accessory\AccessoryArrayListType; use PHPStan\Type\ArrayType; -use PHPStan\Type\IntersectionType; use PHPStan\Type\MixedType; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; @@ -151,23 +149,17 @@ public function refactor(Node $node): ?Node return $node; } - private function matchArrayObjectType(Type $returnedType): ?Type + private function matchArrayObjectType(Type $type): ?Type { - if ($returnedType instanceof IntersectionType) { - foreach ($returnedType->getTypes() as $intersectionedType) { - if ($intersectionedType instanceof AccessoryArrayListType) { - continue; - } - - if ($intersectionedType instanceof ArrayType && $intersectionedType->getItemType() instanceof ObjectType) { - return $intersectionedType->getItemType(); - } + if (! $type instanceof ArrayType) { + return null; + } - return null; - } + if (! $type->getItemType() instanceof ObjectType) { + return null; } - return null; + return $type->getItemType(); } private function isVariableExclusivelyArrayDimAssigned( diff --git a/src/NodeTypeResolver/NodeTypeCorrector.php b/src/NodeTypeResolver/NodeTypeCorrector.php new file mode 100644 index 00000000000..bfa3512eaf8 --- /dev/null +++ b/src/NodeTypeResolver/NodeTypeCorrector.php @@ -0,0 +1,62 @@ +accessoryNonEmptyStringTypeCorrector->correct($type); + $type = $this->genericClassStringTypeCorrector->correct($type); + + $type = $this->removeAccessoryArrayListType($type); + + return $this->accessoryNonEmptyArrayTypeCorrector->correct($type); + } + + private function removeAccessoryArrayListType(Type $type): Type + { + if (! $type instanceof IntersectionType) { + return $type; + } + + $cleanTypes = []; + foreach ($type->getTypes() as $intersectionType) { + if ($intersectionType instanceof AccessoryArrayListType) { + continue; + } + + $cleanTypes[] = $intersectionType; + } + + // dump($cleanTypes); + // die; + + if (count($cleanTypes) === 1) { + return $cleanTypes[0]; + } + + return new IntersectionType($cleanTypes); + } +} diff --git a/src/NodeTypeResolver/NodeTypeResolver.php b/src/NodeTypeResolver/NodeTypeResolver.php index 21d58da5cc8..03872f7ec4e 100644 --- a/src/NodeTypeResolver/NodeTypeResolver.php +++ b/src/NodeTypeResolver/NodeTypeResolver.php @@ -29,13 +29,11 @@ use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\Native\NativeFunctionReflection; use PHPStan\Reflection\ReflectionProvider; -use PHPStan\Type\Accessory\AccessoryArrayListType; use PHPStan\Type\ArrayType; use PHPStan\Type\Constant\ConstantArrayType; use PHPStan\Type\Constant\ConstantBooleanType; use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\ErrorType; -use PHPStan\Type\IntersectionType; use PHPStan\Type\MixedType; use PHPStan\Type\NeverType; use PHPStan\Type\NullType; @@ -54,9 +52,6 @@ use Rector\NodeTypeResolver\Contract\NodeTypeResolverAwareInterface; use Rector\NodeTypeResolver\Contract\NodeTypeResolverInterface; use Rector\NodeTypeResolver\Node\AttributeKey; -use Rector\NodeTypeResolver\NodeTypeCorrector\AccessoryNonEmptyArrayTypeCorrector; -use Rector\NodeTypeResolver\NodeTypeCorrector\AccessoryNonEmptyStringTypeCorrector; -use Rector\NodeTypeResolver\NodeTypeCorrector\GenericClassStringTypeCorrector; use Rector\NodeTypeResolver\PHPStan\ObjectWithoutClassTypeWithParentTypes; use Rector\Php\PhpVersionProvider; use Rector\StaticTypeMapper\ValueObject\Type\AliasedObjectType; @@ -82,10 +77,8 @@ final class NodeTypeResolver public function __construct( private readonly ObjectTypeSpecifier $objectTypeSpecifier, private readonly ClassAnalyzer $classAnalyzer, - private readonly GenericClassStringTypeCorrector $genericClassStringTypeCorrector, + private readonly NodeTypeCorrector $nodeTypeCorrector, private readonly ReflectionProvider $reflectionProvider, - private readonly AccessoryNonEmptyStringTypeCorrector $accessoryNonEmptyStringTypeCorrector, - private readonly AccessoryNonEmptyArrayTypeCorrector $accessoryNonEmptyArrayTypeCorrector, private readonly RenamedClassesDataCollector $renamedClassesDataCollector, private readonly NodeNameResolver $nodeNameResolver, private readonly PhpVersionProvider $phpVersionProvider, @@ -203,7 +196,7 @@ public function getType(Node $node): Type $type = $this->resolveByNodeTypeResolvers($node); if ($type instanceof Type) { - $type = $this->correctType($type); + $type = $this->nodeTypeCorrector->correctType($type); if ($type instanceof ObjectType) { $scope = $node->getAttribute(AttributeKey::SCOPE); @@ -238,7 +231,7 @@ public function getType(Node $node): Type return new MixedType(); } - $type = $this->correctType($scope->getType($node)); + $type = $this->nodeTypeCorrector->correctType($scope->getType($node)); // hot fix for phpstan not resolving chain method calls if (! $node instanceof MethodCall) { @@ -286,7 +279,7 @@ public function getNativeType(Expr $expr): Type return new ObjectWithoutClassType(); } - return $this->correctType($type); + return $this->nodeTypeCorrector->correctType($type); } return $this->resolveNativeUnionType($type); @@ -374,16 +367,6 @@ public function isMethodStaticCallOrClassMethodObjectType(Node $node, ObjectType return $classReflection->hasTraitUse($objectType->getClassName()); } - private function correctType(Type $type): Type - { - $type = $this->accessoryNonEmptyStringTypeCorrector->correct($type); - $type = $this->genericClassStringTypeCorrector->correct($type); - - $type = $this->cleanArrayIntersectionType($type); - - return $this->accessoryNonEmptyArrayTypeCorrector->correct($type); - } - /** * Allow pull type from * @@ -679,26 +662,4 @@ private function isSubstrOnPHP74(FuncCall $funcCall): bool return ! $this->phpVersionProvider->isAtLeastPhpVersion(PhpVersion::PHP_80); } - - private function cleanArrayIntersectionType(Type $type): Type - { - if (! $type instanceof IntersectionType) { - return $type; - } - - $cleanTypes = []; - foreach ($type->getTypes() as $intersectionType) { - if ($intersectionType instanceof AccessoryArrayListType) { - continue; - } - - $cleanTypes[] = $intersectionType; - } - - if (count($cleanTypes) === 1) { - return $cleanTypes[0]; - } - - return new IntersectionType($cleanTypes); - } } From 9a42cb3c8f7ff25788c02237d1c019d8be6c5439 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 15 Oct 2025 18:35:57 +0200 Subject: [PATCH 6/6] update names --- .../Rector/Catch_/ThrowWithPreviousExceptionRector.php | 6 +++--- .../Rector/ClassConst/RemoveFinalFromConstRector.php | 6 +++--- rules/Php71/Rector/FuncCall/RemoveExtraParametersRector.php | 4 ++-- .../BoolReturnTypeFromBooleanStrictReturnsRector.php | 4 ++-- src/NodeAnalyzer/VariadicAnalyzer.php | 4 ++-- .../NodeAnalyzer/ArrayCallableMethodMatcher.php | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/rules/CodeQuality/Rector/Catch_/ThrowWithPreviousExceptionRector.php b/rules/CodeQuality/Rector/Catch_/ThrowWithPreviousExceptionRector.php index 22c10a5e0ae..90109dc2b8b 100644 --- a/rules/CodeQuality/Rector/Catch_/ThrowWithPreviousExceptionRector.php +++ b/rules/CodeQuality/Rector/Catch_/ThrowWithPreviousExceptionRector.php @@ -210,9 +210,9 @@ private function resolveExceptionArgumentPosition(Name $exceptionName): ?int $extendedMethodReflection->getVariants() ); - foreach ($extendedParametersAcceptor->getParameters() as $position => $parameterReflectionWithPhpDoc) { - $parameterType = $parameterReflectionWithPhpDoc->getType(); - $className = ClassNameFromObjectTypeResolver::resolve($parameterReflectionWithPhpDoc->getType()); + foreach ($extendedParametersAcceptor->getParameters() as $position => $extendedParameterReflection) { + $parameterType = $extendedParameterReflection->getType(); + $className = ClassNameFromObjectTypeResolver::resolve($extendedParameterReflection->getType()); if ($className === null) { continue; diff --git a/rules/CodingStyle/Rector/ClassConst/RemoveFinalFromConstRector.php b/rules/CodingStyle/Rector/ClassConst/RemoveFinalFromConstRector.php index 5d4f65ea9ec..b9438c586d1 100644 --- a/rules/CodingStyle/Rector/ClassConst/RemoveFinalFromConstRector.php +++ b/rules/CodingStyle/Rector/ClassConst/RemoveFinalFromConstRector.php @@ -63,12 +63,12 @@ public function refactor(Node $node): ?Node } $hasChanged = false; - foreach ($node->getConstants() as $constant) { - if (! $constant->isFinal()) { + foreach ($node->getConstants() as $classConst) { + if (! $classConst->isFinal()) { continue; } - $this->visibilityManipulator->removeFinal($constant); + $this->visibilityManipulator->removeFinal($classConst); $hasChanged = true; } diff --git a/rules/Php71/Rector/FuncCall/RemoveExtraParametersRector.php b/rules/Php71/Rector/FuncCall/RemoveExtraParametersRector.php index f9d30d5cb69..71d6e02022b 100644 --- a/rules/Php71/Rector/FuncCall/RemoveExtraParametersRector.php +++ b/rules/Php71/Rector/FuncCall/RemoveExtraParametersRector.php @@ -147,8 +147,8 @@ private function resolveMaximumAllowedParameterCount( MethodReflection | FunctionReflection $functionLikeReflection ): int { $parameterCounts = [0]; - foreach ($functionLikeReflection->getVariants() as $variant) { - $parameterCounts[] = count($variant->getParameters()); + foreach ($functionLikeReflection->getVariants() as $parametersAcceptor) { + $parameterCounts[] = count($parametersAcceptor->getParameters()); } return max($parameterCounts); diff --git a/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php b/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php index 67686c20157..567b14895f6 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromBooleanStrictReturnsRector.php @@ -170,8 +170,8 @@ private function isNativeBooleanReturnTypeFuncCall(FuncCall $funcCall): bool return false; } - foreach ($functionReflection->getVariants() as $variant) { - if (! $variant->getNativeReturnType()->isBoolean()->yes()) { + foreach ($functionReflection->getVariants() as $extendedParametersAcceptor) { + if (! $extendedParametersAcceptor->getNativeReturnType()->isBoolean()->yes()) { return false; } } diff --git a/src/NodeAnalyzer/VariadicAnalyzer.php b/src/NodeAnalyzer/VariadicAnalyzer.php index 0ce71370199..b120be23fc5 100644 --- a/src/NodeAnalyzer/VariadicAnalyzer.php +++ b/src/NodeAnalyzer/VariadicAnalyzer.php @@ -30,9 +30,9 @@ public function hasVariadicParameters(FuncCall | StaticCall | MethodCall $call): private function hasVariadicVariant(MethodReflection | FunctionReflection $functionLikeReflection): bool { - foreach ($functionLikeReflection->getVariants() as $variant) { + foreach ($functionLikeReflection->getVariants() as $parametersAcceptor) { // can be any number of arguments → nothing to limit here - if ($variant->isVariadic()) { + if ($parametersAcceptor->isVariadic()) { return true; } } diff --git a/src/NodeCollector/NodeAnalyzer/ArrayCallableMethodMatcher.php b/src/NodeCollector/NodeAnalyzer/ArrayCallableMethodMatcher.php index a67a308fbe2..d655ca56113 100644 --- a/src/NodeCollector/NodeAnalyzer/ArrayCallableMethodMatcher.php +++ b/src/NodeCollector/NodeAnalyzer/ArrayCallableMethodMatcher.php @@ -178,8 +178,8 @@ private function resolveClassContextType( $extendedMethodReflection->getVariants() ); - foreach ($extendedParametersAcceptor->getParameters() as $parameterReflectionWithPhpDoc) { - if (! $parameterReflectionWithPhpDoc->getDefaultValue() instanceof Type) { + foreach ($extendedParametersAcceptor->getParameters() as $extendedParameterReflection) { + if (! $extendedParameterReflection->getDefaultValue() instanceof Type) { return new MixedType(); } }