From 76b516bc802b493ca51f4af0b28ee20dbe5cb895 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 9 Oct 2025 21:04:41 +0200 Subject: [PATCH 1/9] Fix invalid argument type PHPStan errors --- phpstan.neon | 3 --- .../DataProviderAnnotationToAttributeRector.php | 6 +++++- rules/CodeQuality/NodeAnalyser/AssertMethodAnalyzer.php | 3 +++ .../NodeAnalyser/NullableObjectAssignCollector.php | 4 ++++ .../AddInstanceofAssertForNullableInstanceRector.php | 7 ++++++- .../ClassMethod/CreateMockToAnonymousClassRector.php | 2 +- .../Rector/Class_/AddReturnTypeToDependedRector.php | 3 +++ .../Rector/Class_/PreferPHPUnitSelfCallRector.php | 3 +++ .../Rector/Class_/PreferPHPUnitThisCallRector.php | 3 +++ .../Class_/TypeWillReturnCallableArrowFunctionRector.php | 7 ++++++- .../Rector/Class_/RemoveNamedArgsInDataProviderRector.php | 3 +++ .../Rector/Class_/NamedArgumentForDataProviderRector.php | 2 +- 12 files changed, 38 insertions(+), 8 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 36ae3df3..632706e5 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -43,9 +43,6 @@ parameters: - identifier: instanceof.alwaysTrue - - - identifier: argument.type - - identifier: assign.propertyType diff --git a/rules/AnnotationsToAttributes/Rector/ClassMethod/DataProviderAnnotationToAttributeRector.php b/rules/AnnotationsToAttributes/Rector/ClassMethod/DataProviderAnnotationToAttributeRector.php index 0287fce4..860d8f66 100644 --- a/rules/AnnotationsToAttributes/Rector/ClassMethod/DataProviderAnnotationToAttributeRector.php +++ b/rules/AnnotationsToAttributes/Rector/ClassMethod/DataProviderAnnotationToAttributeRector.php @@ -143,7 +143,11 @@ public function refactor(Node $node): ?Node $originalAttributeValue = $desiredTagValueNode->value->getOriginalContent(); } - $node->attrGroups[] = $this->createAttributeGroup(strtok($originalAttributeValue, " \t\n\r\0\x0B")); + $originalAttributeValueToken = strtok($originalAttributeValue ?: '', " \t\n\r\0\x0B"); + if ($originalAttributeValueToken === false) { + continue; + } + $node->attrGroups[] = $this->createAttributeGroup($originalAttributeValueToken); // cleanup $this->phpDocTagRemover->removeTagValueFromNode($phpDocInfo, $desiredTagValueNode); diff --git a/rules/CodeQuality/NodeAnalyser/AssertMethodAnalyzer.php b/rules/CodeQuality/NodeAnalyser/AssertMethodAnalyzer.php index 7c0ef823..562ccbfa 100644 --- a/rules/CodeQuality/NodeAnalyser/AssertMethodAnalyzer.php +++ b/rules/CodeQuality/NodeAnalyser/AssertMethodAnalyzer.php @@ -73,6 +73,9 @@ public function detectTestCaseCallForStatic(MethodCall $methodCall): bool private function resolveMethodReflection(MethodCall|StaticCall $call): ?ExtendedMethodReflection { $methodName = $this->nodeNameResolver->getName($call->name); + if ($methodName === null) { + return null; + } $classReflection = $this->reflectionResolver->resolveClassReflection($call); if (! $classReflection instanceof ClassReflection) { diff --git a/rules/CodeQuality/NodeAnalyser/NullableObjectAssignCollector.php b/rules/CodeQuality/NodeAnalyser/NullableObjectAssignCollector.php index 5e5f41a7..f4cc804f 100644 --- a/rules/CodeQuality/NodeAnalyser/NullableObjectAssignCollector.php +++ b/rules/CodeQuality/NodeAnalyser/NullableObjectAssignCollector.php @@ -73,6 +73,10 @@ private function collectFromAssign(Assign $assign): ?VariableNameToType } $variableName = $this->nodeNameResolver->getName($assign->var); + if (! is_string($variableName)) { + return null; + } + return new VariableNameToType($variableName, $bareVariableType->getClassName()); } } diff --git a/rules/CodeQuality/Rector/ClassMethod/AddInstanceofAssertForNullableInstanceRector.php b/rules/CodeQuality/Rector/ClassMethod/AddInstanceofAssertForNullableInstanceRector.php index b7704f2e..2eb03e8b 100644 --- a/rules/CodeQuality/Rector/ClassMethod/AddInstanceofAssertForNullableInstanceRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/AddInstanceofAssertForNullableInstanceRector.php @@ -197,8 +197,13 @@ private function matchedNullableVariableNameToType( return null; } + $variableName = $this->getName($node->var); + if ($variableName === null) { + return null; + } + $matchedNullableVariableNameToType = $variableNameToTypeCollection->matchByVariableName( - $this->getName($node->var) + $variableName ); // is the variable we're interested in? diff --git a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php index 8fec01db..f12805c2 100644 --- a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php @@ -201,7 +201,7 @@ private function createAnonymousClass(Arg $firstArg): Class_ } // must respect PHPStan anonymous internal naming \Rector\NodeTypeResolver\PHPStan\Scope\PHPStanNodeScopeResolver::ANONYMOUS_CLASS_START_REGEX - return new Class_('AnonymousClass1234', [ + return new Class_('AnonymousClass1234', [ // @phpstan-ignore argument.type 'extends' => $className, ], [ 'startLine' => $firstArg->getStartLine(), diff --git a/rules/CodeQuality/Rector/Class_/AddReturnTypeToDependedRector.php b/rules/CodeQuality/Rector/Class_/AddReturnTypeToDependedRector.php index 4f357bb3..79e718fb 100644 --- a/rules/CodeQuality/Rector/Class_/AddReturnTypeToDependedRector.php +++ b/rules/CodeQuality/Rector/Class_/AddReturnTypeToDependedRector.php @@ -110,6 +110,9 @@ public function refactor(Node $node): ?Node } $soleReturnExpr = $returns[0]->expr; + if ($soleReturnExpr === null) { + continue; + } // does return a type? $returnedExprType = $this->nodeTypeResolver->getNativeType($soleReturnExpr); diff --git a/rules/CodeQuality/Rector/Class_/PreferPHPUnitSelfCallRector.php b/rules/CodeQuality/Rector/Class_/PreferPHPUnitSelfCallRector.php index 2f6b1a25..d3d45ad5 100644 --- a/rules/CodeQuality/Rector/Class_/PreferPHPUnitSelfCallRector.php +++ b/rules/CodeQuality/Rector/Class_/PreferPHPUnitSelfCallRector.php @@ -88,6 +88,9 @@ public function refactor(Node $node): ?Node } $methodName = $this->getName($node->name); + if ($methodName === null) { + return null; + } $hasChanged = true; return $this->nodeFactory->createStaticCall('self', $methodName, $node->getArgs()); diff --git a/rules/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector.php b/rules/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector.php index 51e8e4e8..cde87824 100644 --- a/rules/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector.php +++ b/rules/CodeQuality/Rector/Class_/PreferPHPUnitThisCallRector.php @@ -98,6 +98,9 @@ public function refactor(Node $node): ?Node } $methodName = $this->getName($node->name); + if ($methodName === null) { + return null; + } $hasChanged = true; return $this->nodeFactory->createMethodCall('this', $methodName, $node->getArgs()); diff --git a/rules/CodeQuality/Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php b/rules/CodeQuality/Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php index e415d9cc..f4acc1fc 100644 --- a/rules/CodeQuality/Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php +++ b/rules/CodeQuality/Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php @@ -235,8 +235,13 @@ public function refactor(Node $node): ?Class_ } if (! $innerClosure->returnType instanceof Node) { + $returnType = $parameterTypesAndReturnType->getReturnType(); + if ($returnType === null) { + return null; + } + $returnTypeNode = $this->staticTypeMapper->mapPHPStanTypeToPhpParserNode( - $parameterTypesAndReturnType->getReturnType(), + $returnType, TypeKind::RETURN ); diff --git a/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php b/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php index 66ee91e9..3b886299 100644 --- a/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php +++ b/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php @@ -102,6 +102,9 @@ public function refactor(Node $node): ?Node $expr = $stmt->expr; $arrayChanged = false; if ($expr instanceof Yield_) { + if (!$expr->value instanceof Array_) { + return null; + } $arrayChanged = $this->handleArray($expr->value); } elseif ($expr instanceof Array_) { $arrayChanged = $this->handleArray($expr); diff --git a/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php b/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php index c669a6c7..84f10a7b 100644 --- a/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php +++ b/rules/PHPUnit110/Rector/Class_/NamedArgumentForDataProviderRector.php @@ -154,7 +154,7 @@ public function getNamedArguments(ClassMethod $classMethod): array } /** - * @param list $stmts + * @param array $stmts * @return array */ public function getResolvedVariables(array $stmts): array From bfd7ce493734dcf25ef7f8b543476561c66a1acf Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 9 Oct 2025 21:10:48 +0200 Subject: [PATCH 2/9] fix cs --- .../AddInstanceofAssertForNullableInstanceRector.php | 4 +--- .../Rector/ClassMethod/CreateMockToAnonymousClassRector.php | 3 ++- .../Rector/Class_/RemoveNamedArgsInDataProviderRector.php | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/rules/CodeQuality/Rector/ClassMethod/AddInstanceofAssertForNullableInstanceRector.php b/rules/CodeQuality/Rector/ClassMethod/AddInstanceofAssertForNullableInstanceRector.php index 2eb03e8b..f24e41c7 100644 --- a/rules/CodeQuality/Rector/ClassMethod/AddInstanceofAssertForNullableInstanceRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/AddInstanceofAssertForNullableInstanceRector.php @@ -202,9 +202,7 @@ private function matchedNullableVariableNameToType( return null; } - $matchedNullableVariableNameToType = $variableNameToTypeCollection->matchByVariableName( - $variableName - ); + $matchedNullableVariableNameToType = $variableNameToTypeCollection->matchByVariableName($variableName); // is the variable we're interested in? return null; diff --git a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php index f12805c2..2a6953d1 100644 --- a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php @@ -201,7 +201,8 @@ private function createAnonymousClass(Arg $firstArg): Class_ } // must respect PHPStan anonymous internal naming \Rector\NodeTypeResolver\PHPStan\Scope\PHPStanNodeScopeResolver::ANONYMOUS_CLASS_START_REGEX - return new Class_('AnonymousClass1234', [ // @phpstan-ignore argument.type + // @phpstan-ignore argument.type + return new Class_('AnonymousClass1234', [ 'extends' => $className, ], [ 'startLine' => $firstArg->getStartLine(), diff --git a/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php b/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php index 3b886299..7d8e88be 100644 --- a/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php +++ b/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php @@ -102,7 +102,7 @@ public function refactor(Node $node): ?Node $expr = $stmt->expr; $arrayChanged = false; if ($expr instanceof Yield_) { - if (!$expr->value instanceof Array_) { + if (! $expr->value instanceof Array_) { return null; } $arrayChanged = $this->handleArray($expr->value); From 4ca3f87ae83bd6f4e8ee06cda0ce34f39b4e86bc Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 9 Oct 2025 21:11:30 +0200 Subject: [PATCH 3/9] remove ignore --- .../Rector/ClassMethod/CreateMockToAnonymousClassRector.php | 1 - 1 file changed, 1 deletion(-) diff --git a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php index 2a6953d1..8fec01db 100644 --- a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php @@ -201,7 +201,6 @@ private function createAnonymousClass(Arg $firstArg): Class_ } // must respect PHPStan anonymous internal naming \Rector\NodeTypeResolver\PHPStan\Scope\PHPStanNodeScopeResolver::ANONYMOUS_CLASS_START_REGEX - // @phpstan-ignore argument.type return new Class_('AnonymousClass1234', [ 'extends' => $className, ], [ From cdd85e6a1fee8ffd4e0d8a00e3e9291b26ae5d4f Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 9 Oct 2025 21:15:12 +0200 Subject: [PATCH 4/9] fix --- .../Rector/ClassMethod/CreateMockToAnonymousClassRector.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php index 8fec01db..e5ae18ed 100644 --- a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php @@ -200,6 +200,10 @@ private function createAnonymousClass(Arg $firstArg): Class_ throw new NotImplementedYetException(); } + if (!$className instanceof Node\Name) { + throw new NotImplementedYetException(); + } + // must respect PHPStan anonymous internal naming \Rector\NodeTypeResolver\PHPStan\Scope\PHPStanNodeScopeResolver::ANONYMOUS_CLASS_START_REGEX return new Class_('AnonymousClass1234', [ 'extends' => $className, From 082e8fec5a814b611ffad8ca4cbfcc65914566c9 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 9 Oct 2025 21:15:25 +0200 Subject: [PATCH 5/9] cs --- .../Rector/ClassMethod/CreateMockToAnonymousClassRector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php index e5ae18ed..69a23bac 100644 --- a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php @@ -200,7 +200,7 @@ private function createAnonymousClass(Arg $firstArg): Class_ throw new NotImplementedYetException(); } - if (!$className instanceof Node\Name) { + if (! $className instanceof Node\Name) { throw new NotImplementedYetException(); } From 15e2682bf59682b7d350674ea815511e2fa727bb Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 9 Oct 2025 21:16:11 +0200 Subject: [PATCH 6/9] run rector --- .../ClassMethod/DataProviderAnnotationToAttributeRector.php | 1 + .../Rector/ClassMethod/CreateMockToAnonymousClassRector.php | 3 ++- .../Class_/TypeWillReturnCallableArrowFunctionRector.php | 2 +- .../Rector/Class_/RemoveNamedArgsInDataProviderRector.php | 1 + 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/rules/AnnotationsToAttributes/Rector/ClassMethod/DataProviderAnnotationToAttributeRector.php b/rules/AnnotationsToAttributes/Rector/ClassMethod/DataProviderAnnotationToAttributeRector.php index 860d8f66..e9bbc351 100644 --- a/rules/AnnotationsToAttributes/Rector/ClassMethod/DataProviderAnnotationToAttributeRector.php +++ b/rules/AnnotationsToAttributes/Rector/ClassMethod/DataProviderAnnotationToAttributeRector.php @@ -147,6 +147,7 @@ public function refactor(Node $node): ?Node if ($originalAttributeValueToken === false) { continue; } + $node->attrGroups[] = $this->createAttributeGroup($originalAttributeValueToken); // cleanup diff --git a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php index 69a23bac..54174c41 100644 --- a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php @@ -4,6 +4,7 @@ namespace Rector\PHPUnit\CodeQuality\Rector\ClassMethod; +use PhpParser\Node\Name; use PhpParser\Modifiers; use PhpParser\Node; use PhpParser\Node\Arg; @@ -200,7 +201,7 @@ private function createAnonymousClass(Arg $firstArg): Class_ throw new NotImplementedYetException(); } - if (! $className instanceof Node\Name) { + if (! $className instanceof Name) { throw new NotImplementedYetException(); } diff --git a/rules/CodeQuality/Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php b/rules/CodeQuality/Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php index f4acc1fc..d501ec9a 100644 --- a/rules/CodeQuality/Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php +++ b/rules/CodeQuality/Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php @@ -236,7 +236,7 @@ public function refactor(Node $node): ?Class_ if (! $innerClosure->returnType instanceof Node) { $returnType = $parameterTypesAndReturnType->getReturnType(); - if ($returnType === null) { + if (!$returnType instanceof Type) { return null; } diff --git a/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php b/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php index 7d8e88be..3b91c99b 100644 --- a/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php +++ b/rules/PHPUnit100/Rector/Class_/RemoveNamedArgsInDataProviderRector.php @@ -105,6 +105,7 @@ public function refactor(Node $node): ?Node if (! $expr->value instanceof Array_) { return null; } + $arrayChanged = $this->handleArray($expr->value); } elseif ($expr instanceof Array_) { $arrayChanged = $this->handleArray($expr); From 726a0adaeafc7d5f467db0a43439aeadf293312f Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 9 Oct 2025 21:17:31 +0200 Subject: [PATCH 7/9] cs --- .../Rector/ClassMethod/CreateMockToAnonymousClassRector.php | 2 +- .../Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php index 54174c41..1342bc88 100644 --- a/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php @@ -4,7 +4,6 @@ namespace Rector\PHPUnit\CodeQuality\Rector\ClassMethod; -use PhpParser\Node\Name; use PhpParser\Modifiers; use PhpParser\Node; use PhpParser\Node\Arg; @@ -14,6 +13,7 @@ use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\New_; +use PhpParser\Node\Name; use PhpParser\Node\Scalar; use PhpParser\Node\Scalar\String_; use PhpParser\Node\Stmt; diff --git a/rules/CodeQuality/Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php b/rules/CodeQuality/Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php index d501ec9a..fcd89013 100644 --- a/rules/CodeQuality/Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php +++ b/rules/CodeQuality/Rector/Class_/TypeWillReturnCallableArrowFunctionRector.php @@ -236,7 +236,7 @@ public function refactor(Node $node): ?Class_ if (! $innerClosure->returnType instanceof Node) { $returnType = $parameterTypesAndReturnType->getReturnType(); - if (!$returnType instanceof Type) { + if (! $returnType instanceof Type) { return null; } From 64edf67ec2f73b752e37bc3e3bb5c075d2183de1 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 9 Oct 2025 21:20:14 +0200 Subject: [PATCH 8/9] fix another ignored error --- phpstan.neon | 4 ---- .../Reflection/MethodParametersAndReturnTypesResolver.php | 4 ++-- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 632706e5..698e3a9e 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -45,7 +45,3 @@ parameters: - identifier: assign.propertyType - - - - message: '#Cannot call method getName\(\) on PHPStan\\Reflection\\ClassReflection\|null#' - path: rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php diff --git a/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php b/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php index ce968de9..fd31f59b 100644 --- a/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php +++ b/rules/CodeQuality/Reflection/MethodParametersAndReturnTypesResolver.php @@ -189,7 +189,7 @@ public function resolveParameterTypes( foreach ($extendedParametersAcceptor->getParameters() as $parameterReflection) { $parameterType = $this->resolveObjectType($parameterReflection->getNativeType()); - if ($parameterType instanceof ObjectType && $currentClassReflection->getName() !== $parameterType->getClassReflection()->getName()) { + if ($parameterType instanceof ObjectType && $currentClassReflection->getName() !== $parameterType->getClassReflection()?->getName()) { $parameterTypes[] = new MixedType(); continue; } @@ -240,7 +240,7 @@ private function resolveReturnType( $returnType = $this->resolveObjectType($extendedParametersAcceptor->getNativeReturnType()); - if ($returnType instanceof ObjectType && $currentClassReflection->getName() !== $returnType->getClassReflection()->getName()) { + if ($returnType instanceof ObjectType && $currentClassReflection->getName() !== $returnType->getClassReflection()?->getName()) { return new MixedType(); } From d86463a7594a44fad7291c2af5ebfe75e817121e Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 9 Oct 2025 21:23:07 +0200 Subject: [PATCH 9/9] Update phpstan.neon --- phpstan.neon | 2 -- 1 file changed, 2 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 698e3a9e..52a516bd 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -34,8 +34,6 @@ parameters: # false positive - '#Access to an undefined property Rector\\Contract\\PhpParser\\Node\\StmtsAwareInterface\:\:\$stmts#' - - '#PhpParser\\Node\\Stmt\\Expression is not generic#' - # more advanced usage, but not always working # see https://github.com/rectorphp/rector-src/actions/runs/11798721617/job/32865546672?pr=6422#step:5:110 - '#Doing instanceof PHPStan\\Type\\.+ is error\-prone and deprecated#'