From a4276c5a53501823713caf076941604b0b337841 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 14 May 2025 19:13:34 +0700 Subject: [PATCH] Bump to PHPStan 2.1.15 and revert tweak __toString() native type on ClassChildAnalyzer --- build/target-repository/composer.json | 2 +- composer.json | 2 +- .../NodeAnalyzer/ClassChildAnalyzer.php | 41 +------------------ 3 files changed, 4 insertions(+), 41 deletions(-) diff --git a/build/target-repository/composer.json b/build/target-repository/composer.json index 5a286485251..ba8654cc850 100644 --- a/build/target-repository/composer.json +++ b/build/target-repository/composer.json @@ -8,7 +8,7 @@ ], "require": { "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.1.14" + "phpstan/phpstan": "^2.1.15" }, "autoload": { "files": [ diff --git a/composer.json b/composer.json index f6407f0fba2..096154f4a8f 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "ocramius/package-versions": "^2.9", "ondram/ci-detector": "^4.2", "phpstan/phpdoc-parser": "^2.0.2", - "phpstan/phpstan": "^2.1.14", + "phpstan/phpstan": "^2.1.15", "react/event-loop": "^1.5", "react/promise": "^3.2", "react/socket": "^1.15", diff --git a/src/FamilyTree/NodeAnalyzer/ClassChildAnalyzer.php b/src/FamilyTree/NodeAnalyzer/ClassChildAnalyzer.php index 20301ccab3d..50d48af63a8 100644 --- a/src/FamilyTree/NodeAnalyzer/ClassChildAnalyzer.php +++ b/src/FamilyTree/NodeAnalyzer/ClassChildAnalyzer.php @@ -4,24 +4,14 @@ namespace Rector\FamilyTree\NodeAnalyzer; -use PhpParser\Node; -use PhpParser\Node\Stmt\ClassLike; -use PhpParser\Node\Stmt\ClassMethod; use PHPStan\Reflection\ClassReflection; use PHPStan\Reflection\ParametersAcceptorSelector; use PHPStan\Reflection\Php\PhpMethodReflection; use PHPStan\Type\MixedType; -use PHPStan\Type\StringType; use PHPStan\Type\Type; -use Rector\PhpParser\AstResolver; final readonly class ClassChildAnalyzer { - public function __construct( - private AstResolver $astResolver - ) { - } - /** * Look both parent class and interface, yes, all PHP interface methods are abstract */ @@ -52,14 +42,8 @@ public function resolveParentClassMethodReturnType(ClassReflection $classReflect } foreach ($parentClassMethods as $parentClassMethod) { - // for downgrade purpose on __toString - // @see https://3v4l.org/kdcEh#v7.4.33 - // @see https://github.com/phpstan/phpstan-src/commit/3854cbc5748a7cb51ee0b86ceffe29bd0564bc98 - if ($parentClassMethod->getDeclaringClass()->isBuiltIn() || $methodName !== '__toString') { - $nativeReturnType = $this->resolveNativeType($parentClassMethod); - } else { - $nativeReturnType = $this->resolveToStringNativeTypeFromAstResolver($parentClassMethod); - } + $parametersAcceptor = ParametersAcceptorSelector::combineAcceptors($parentClassMethod->getVariants()); + $nativeReturnType = $parametersAcceptor->getNativeReturnType(); if (! $nativeReturnType instanceof MixedType) { return $nativeReturnType; @@ -69,27 +53,6 @@ public function resolveParentClassMethodReturnType(ClassReflection $classReflect return new MixedType(); } - private function resolveNativeType(PhpMethodReflection $phpMethodReflection): Type - { - $extendedParametersAcceptor = ParametersAcceptorSelector::combineAcceptors($phpMethodReflection->getVariants()); - return $extendedParametersAcceptor->getNativeReturnType(); - } - - private function resolveToStringNativeTypeFromAstResolver(PhpMethodReflection $phpMethodReflection): Type - { - $classReflection = $phpMethodReflection->getDeclaringClass(); - $class = $this->astResolver->resolveClassFromClassReflection($classReflection); - - if ($class instanceof ClassLike) { - $classMethod = $class->getMethod($phpMethodReflection->getName()); - if ($classMethod instanceof ClassMethod && ! $classMethod->returnType instanceof Node) { - return new MixedType(); - } - } - - return new StringType(); - } - /** * @return PhpMethodReflection[] */