diff --git a/src/Fixer/Casing/ClassReferenceNameCasingFixer.php b/src/Fixer/Casing/ClassReferenceNameCasingFixer.php index 11b70ac41a3..565bc46717d 100644 --- a/src/Fixer/Casing/ClassReferenceNameCasingFixer.php +++ b/src/Fixer/Casing/ClassReferenceNameCasingFixer.php @@ -20,6 +20,7 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface; use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceAnalysis; use PhpCsFixer\Tokenizer\Analyzer\NamespacesAnalyzer; +use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer; use PhpCsFixer\Tokenizer\CT; use PhpCsFixer\Tokenizer\Token; use PhpCsFixer\Tokenizer\Tokens; @@ -53,14 +54,21 @@ public function isCandidate(Tokens $tokens): bool protected function applyFix(\SplFileInfo $file, Tokens $tokens): void { $namespacesAnalyzer = new NamespacesAnalyzer(); + $namespaceUsesAnalyzer = new NamespaceUsesAnalyzer(); $classNames = $this->getClassNames(); foreach ($namespacesAnalyzer->getDeclarations($tokens) as $namespace) { + $uses = []; + + foreach ($namespaceUsesAnalyzer->getDeclarationsInNamespace($tokens, $namespace) as $use) { + $uses[strtolower($use->getShortName())] = true; + } + foreach ($this->getClassReference($tokens, $namespace) as $reference) { $currentContent = $tokens[$reference]->getContent(); $lowerCurrentContent = strtolower($currentContent); - if (isset($classNames[$lowerCurrentContent]) && $currentContent !== $classNames[$lowerCurrentContent]) { + if (isset($classNames[$lowerCurrentContent]) && $currentContent !== $classNames[$lowerCurrentContent] && !isset($uses[$lowerCurrentContent])) { $tokens[$reference] = new Token([T_STRING, $classNames[$lowerCurrentContent]]); } } diff --git a/tests/Fixer/Casing/ClassReferenceNameCasingFixerTest.php b/tests/Fixer/Casing/ClassReferenceNameCasingFixerTest.php index 9a213c691e0..a29312ae3f6 100644 --- a/tests/Fixer/Casing/ClassReferenceNameCasingFixerTest.php +++ b/tests/Fixer/Casing/ClassReferenceNameCasingFixerTest.php @@ -202,6 +202,14 @@ public function provideFixCases(): \Generator \A\B\\Bar::bind(fn () => null, null, new class {}); ', ]; + + yield [ + "set('sonata.exporter.writer.xml', EXCEPTION::class); +", + ]; } /**