diff --git a/rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/ClassLikeNameClassNameImportSkipVoter.php b/rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/ClassLikeNameClassNameImportSkipVoter.php index 2f5dbeeb3b2..fb522f0ecbd 100644 --- a/rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/ClassLikeNameClassNameImportSkipVoter.php +++ b/rules/CodingStyle/ClassNameImport/ClassNameImportSkipVoter/ClassLikeNameClassNameImportSkipVoter.php @@ -5,8 +5,10 @@ namespace Rector\CodingStyle\ClassNameImport\ClassNameImportSkipVoter; use PhpParser\Node; +use PHPStan\Analyser\Scope; use Rector\CodingStyle\ClassNameImport\ShortNameResolver; use Rector\CodingStyle\Contract\ClassNameImport\ClassNameImportSkipVoterInterface; +use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType; use Rector\ValueObject\Application\File; @@ -33,9 +35,31 @@ public function shouldSkip(File $file, FullyQualifiedObjectType $fullyQualifiedO return false; } + /** + * Note: Don't use ScopeFetcher::fetch() on Name instance, + * Scope can be null on Name + * This is part of ScopeAnalyzer::NON_REFRESHABLE_NODES + * @see https://github.com/rectorphp/rector-src/blob/9929af7c0179929b4fde6915cb7a06c3141dde6c/src/NodeAnalyzer/ScopeAnalyzer.php#L17 + */ + $scope = $node->getAttribute(AttributeKey::SCOPE); + $namespace = $scope instanceof Scope ? $scope->getNamespace() : null; + $namespace = strtolower((string) $namespace); + $shortNameLowered = $fullyQualifiedObjectType->getShortNameLowered(); + $fullyQualifiedObjectTypeNamespace = strtolower( + substr($fullyQualifiedObjectType->getClassName(), 0, -strlen($fullyQualifiedObjectType->getShortName()) - 1) + ); + foreach ($classLikeNames as $classLikeName) { - if (strtolower($classLikeName) === $shortNameLowered) { + if (strtolower($classLikeName) !== $shortNameLowered) { + continue; + } + + if ($namespace === '') { + return true; + } + + if ($namespace !== $fullyQualifiedObjectTypeNamespace) { return true; } } diff --git a/tests/Issues/AutoImport/Fixture/fqcn_current_same_class.php.inc b/tests/Issues/AutoImport/Fixture/fqcn_current_same_class.php.inc new file mode 100644 index 00000000000..bdab86555ff --- /dev/null +++ b/tests/Issues/AutoImport/Fixture/fqcn_current_same_class.php.inc @@ -0,0 +1,21 @@ + +----- +