From a8f0314d08a722bb4330e6df22a09279739da23a Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 19 Mar 2024 17:22:23 +0700 Subject: [PATCH 1/4] [CodingStyle] Remove usage of Reflection::expandClassName() from nette/utils 4.0 as cause bug on downgrade --- .../ClassNameImport/ShortNameResolver.php | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/rules/CodingStyle/ClassNameImport/ShortNameResolver.php b/rules/CodingStyle/ClassNameImport/ShortNameResolver.php index 097581a75e0..3957bfd6a14 100644 --- a/rules/CodingStyle/ClassNameImport/ShortNameResolver.php +++ b/rules/CodingStyle/ClassNameImport/ShortNameResolver.php @@ -148,8 +148,6 @@ private function resolveForStmts(array $stmts): array */ private function resolveFromStmtsDocBlocks(array $stmts): array { - $classReflection = $this->resolveClassReflection($stmts); - $shortNames = []; $this->simpleCallableNodeTraverser->traverseNodesWithCallable($stmts, function (Node $node) use ( &$shortNames @@ -185,7 +183,7 @@ static function ($node) use (&$shortNames): null { return null; }); - return $this->fqnizeShortNames($shortNames, $classReflection, $stmts); + return $this->fqnizeShortNames($shortNames, $stmts); } /** @@ -211,20 +209,14 @@ private function resolveClassReflection(array $stmts): ?ClassReflection * @param Stmt[] $stmts * @return array */ - private function fqnizeShortNames(array $shortNames, ?ClassReflection $classReflection, array $stmts): array + private function fqnizeShortNames(array $shortNames, array $stmts): array { $shortNamesToFullyQualifiedNames = []; - $nativeReflectionClass = $classReflection instanceof ClassReflection && ! $classReflection->isAnonymous() - ? $classReflection->getNativeReflection() - : null; - foreach ($shortNames as $shortName) { $stmtsMatchedName = $this->useImportNameMatcher->matchNameWithStmts($shortName, $stmts); - if ($nativeReflectionClass instanceof ReflectionClass) { - $fullyQualifiedName = Reflection::expandClassName($shortName, $nativeReflectionClass); - } elseif (is_string($stmtsMatchedName)) { + if (is_string($stmtsMatchedName)) { $fullyQualifiedName = $stmtsMatchedName; } else { $fullyQualifiedName = $shortName; From 372573d4d13e0f04a89bfe5d2c9ef681ae1a24b7 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 19 Mar 2024 10:25:51 +0000 Subject: [PATCH 2/4] [ci-review] Rector Rectify --- .../ClassNameImport/ShortNameResolver.php | 31 ++----------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/rules/CodingStyle/ClassNameImport/ShortNameResolver.php b/rules/CodingStyle/ClassNameImport/ShortNameResolver.php index 3957bfd6a14..529256bd0b2 100644 --- a/rules/CodingStyle/ClassNameImport/ShortNameResolver.php +++ b/rules/CodingStyle/ClassNameImport/ShortNameResolver.php @@ -4,7 +4,6 @@ namespace Rector\CodingStyle\ClassNameImport; -use Nette\Utils\Reflection; use PhpParser\Node; use PhpParser\Node\Identifier; use PhpParser\Node\Name; @@ -13,8 +12,6 @@ use PhpParser\Node\Stmt\Namespace_; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode; use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; -use PHPStan\Reflection\ClassReflection; -use PHPStan\Reflection\ReflectionProvider; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\CodingStyle\NodeAnalyzer\UseImportNameMatcher; @@ -25,7 +22,6 @@ use Rector\PhpParser\Node\BetterNodeFinder; use Rector\PhpParser\Node\CustomNode\FileWithoutNamespace; use Rector\ValueObject\Application\File; -use ReflectionClass; /** * @see \Rector\Tests\CodingStyle\ClassNameImport\ShortNameResolver\ShortNameResolverTest @@ -40,7 +36,6 @@ final class ShortNameResolver public function __construct( private readonly SimpleCallableNodeTraverser $simpleCallableNodeTraverser, private readonly NodeNameResolver $nodeNameResolver, - private readonly ReflectionProvider $reflectionProvider, private readonly BetterNodeFinder $betterNodeFinder, private readonly UseImportNameMatcher $useImportNameMatcher, private readonly PhpDocInfoFactory $phpDocInfoFactory @@ -127,7 +122,7 @@ private function resolveForStmts(array $stmts): array } // already short - if (\str_contains($originalName->toString(), '\\')) { + if (\str_contains((string) $originalName->toString(), '\\')) { return null; } @@ -186,24 +181,6 @@ static function ($node) use (&$shortNames): null { return $this->fqnizeShortNames($shortNames, $stmts); } - /** - * @param Node[] $stmts - */ - private function resolveClassReflection(array $stmts): ?ClassReflection - { - $firstClassLike = $this->betterNodeFinder->findFirstInstanceOf($stmts, ClassLike::class); - if (! $firstClassLike instanceof ClassLike) { - return null; - } - - $className = (string) $this->nodeNameResolver->getName($firstClassLike); - if (! $this->reflectionProvider->hasClass($className)) { - return null; - } - - return $this->reflectionProvider->getClass($className); - } - /** * @param string[] $shortNames * @param Stmt[] $stmts @@ -216,11 +193,7 @@ private function fqnizeShortNames(array $shortNames, array $stmts): array foreach ($shortNames as $shortName) { $stmtsMatchedName = $this->useImportNameMatcher->matchNameWithStmts($shortName, $stmts); - if (is_string($stmtsMatchedName)) { - $fullyQualifiedName = $stmtsMatchedName; - } else { - $fullyQualifiedName = $shortName; - } + $fullyQualifiedName = is_string($stmtsMatchedName) ? $stmtsMatchedName : $shortName; $shortNamesToFullyQualifiedNames[$shortName] = $fullyQualifiedName; } From 793c51a385c499e5348d02efc7a6368ce441d2e6 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 19 Mar 2024 10:26:56 +0000 Subject: [PATCH 3/4] [ci-review] Rector Rectify --- rules/CodingStyle/ClassNameImport/ShortNameResolver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/CodingStyle/ClassNameImport/ShortNameResolver.php b/rules/CodingStyle/ClassNameImport/ShortNameResolver.php index 529256bd0b2..ee6b3e86825 100644 --- a/rules/CodingStyle/ClassNameImport/ShortNameResolver.php +++ b/rules/CodingStyle/ClassNameImport/ShortNameResolver.php @@ -122,7 +122,7 @@ private function resolveForStmts(array $stmts): array } // already short - if (\str_contains((string) $originalName->toString(), '\\')) { + if (\str_contains($originalName->toString(), '\\')) { return null; } From 6f3e40759dab637806addbc1a017583d6a41b03a Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 19 Mar 2024 17:29:46 +0700 Subject: [PATCH 4/4] fixture update --- .../Fixture/already_attributed.php.inc | 30 +++++++++++++++++++ .../Fixture/with_existing_attribute.php.inc | 3 +- 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 tests/Issues/AnnotationToAttributeRenameAutoImport/Fixture/already_attributed.php.inc diff --git a/tests/Issues/AnnotationToAttributeRenameAutoImport/Fixture/already_attributed.php.inc b/tests/Issues/AnnotationToAttributeRenameAutoImport/Fixture/already_attributed.php.inc new file mode 100644 index 00000000000..03ae17586af --- /dev/null +++ b/tests/Issues/AnnotationToAttributeRenameAutoImport/Fixture/already_attributed.php.inc @@ -0,0 +1,30 @@ + '\d+', 'networkId' => '\d+'])] +#[\Symfony\Component\Security\Http\Attribute\IsGranted('TEST')] +class WithExistingAttribute extends AbstractController +{ +} + +?> +----- + '\d+', 'networkId' => '\d+'])] +#[IsGranted('TEST')] +class WithExistingAttribute extends AbstractController +{ +} + +?> \ No newline at end of file diff --git a/tests/Issues/AnnotationToAttributeRenameAutoImport/Fixture/with_existing_attribute.php.inc b/tests/Issues/AnnotationToAttributeRenameAutoImport/Fixture/with_existing_attribute.php.inc index 5326ab04705..9818c1c2582 100644 --- a/tests/Issues/AnnotationToAttributeRenameAutoImport/Fixture/with_existing_attribute.php.inc +++ b/tests/Issues/AnnotationToAttributeRenameAutoImport/Fixture/with_existing_attribute.php.inc @@ -20,12 +20,11 @@ class WithExistingAttribute extends AbstractController namespace Rector\Tests\Issues\RenameAnnotationToAttributeAutoImport\Fixture; -use Symfony\Component\Security\Http\Attribute\IsGranted; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Routing\Annotation\Route; #[Route(path: '/pro/{id}/networks/{networkId}/sectors', name: 'api_network_sectors', requirements: ['id' => '\d+', 'networkId' => '\d+'])] -#[IsGranted('TEST')] +#[\Symfony\Component\Security\Http\Attribute\IsGranted('TEST')] class WithExistingAttribute extends AbstractController { }