From 53305724357b1971933cb2c121d10d99e0bf92dd Mon Sep 17 00:00:00 2001 From: Simon Podlipsky Date: Thu, 13 Jan 2022 19:41:36 +0100 Subject: [PATCH] Revert "Fix $this/self docblock compare removed on on-final class, as it can refer to child this type (#1246)" This reverts commit a2c2979a --- .../TypeComparator/TypeComparator.php | 21 +------------------ ... skip_union_self_this_final_class.php.inc} | 16 -------------- 2 files changed, 1 insertion(+), 36 deletions(-) rename rules-tests/Php80/Rector/FunctionLike/UnionTypesRector/Fixture/{union_self_this_final_class.php.inc => skip_union_self_this_final_class.php.inc} (52%) diff --git a/packages/NodeTypeResolver/TypeComparator/TypeComparator.php b/packages/NodeTypeResolver/TypeComparator/TypeComparator.php index 60f6d8e2150..1afbf8a1422 100644 --- a/packages/NodeTypeResolver/TypeComparator/TypeComparator.php +++ b/packages/NodeTypeResolver/TypeComparator/TypeComparator.php @@ -5,10 +5,8 @@ namespace Rector\NodeTypeResolver\TypeComparator; use PhpParser\Node; -use PHPStan\Analyser\Scope; use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; use PHPStan\PhpDocParser\Ast\Type\TypeNode; -use PHPStan\Reflection\ClassReflection; use PHPStan\Type\ArrayType; use PHPStan\Type\BooleanType; use PHPStan\Type\Constant\ConstantBooleanType; @@ -23,7 +21,6 @@ use PHPStan\Type\TypeTraverser; use PHPStan\Type\UnionType; use Rector\BetterPhpDocParser\ValueObject\PhpDocAttributeKey; -use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; use Rector\NodeTypeResolver\PHPStan\TypeHasher; use Rector\StaticTypeMapper\StaticTypeMapper; @@ -108,7 +105,7 @@ public function arePhpParserAndPhpStanPhpDocTypesEqual( return false; } - return $this->isThisTypeInFinalClass($phpStanDocType, $phpParserNodeType, $node); + return true; } public function isSubtype(Type $checkedType, Type $mainType): bool @@ -269,20 +266,4 @@ private function areTypesSameWithLiteralTypeInPhpDoc( && $phpParserNodeType->isSuperTypeOf($phpStanDocType) ->yes(); } - - private function isThisTypeInFinalClass(Type $phpStanDocType, Type $phpParserNodeType, Node $node): bool - { - // special case for non-final $this/self compare; in case of interface/abstract class, it can be another $this - if ($phpStanDocType instanceof ThisType && $phpParserNodeType instanceof ThisType) { - $scope = $node->getAttribute(AttributeKey::SCOPE); - if ($scope instanceof Scope) { - $classReflection = $scope->getClassReflection(); - if ($classReflection instanceof ClassReflection) { - return $classReflection->isFinal(); - } - } - } - - return true; - } } diff --git a/rules-tests/Php80/Rector/FunctionLike/UnionTypesRector/Fixture/union_self_this_final_class.php.inc b/rules-tests/Php80/Rector/FunctionLike/UnionTypesRector/Fixture/skip_union_self_this_final_class.php.inc similarity index 52% rename from rules-tests/Php80/Rector/FunctionLike/UnionTypesRector/Fixture/union_self_this_final_class.php.inc rename to rules-tests/Php80/Rector/FunctionLike/UnionTypesRector/Fixture/skip_union_self_this_final_class.php.inc index bfcbae5aa56..0e6c915ece2 100644 --- a/rules-tests/Php80/Rector/FunctionLike/UnionTypesRector/Fixture/union_self_this_final_class.php.inc +++ b/rules-tests/Php80/Rector/FunctionLike/UnionTypesRector/Fixture/skip_union_self_this_final_class.php.inc @@ -12,19 +12,3 @@ final class SkipUnionSelfThisFinalClass return $this; } } - -?> ------ -