diff --git a/packages/Architecture/tests/Rector/Class_/ConstructorInjectionToActionInjectionRector/Fixture/extra_calls_in_constructor.inc.php b/packages/Architecture/tests/Rector/Class_/ConstructorInjectionToActionInjectionRector/Fixture/extra_calls_in_constructor.php.inc similarity index 100% rename from packages/Architecture/tests/Rector/Class_/ConstructorInjectionToActionInjectionRector/Fixture/extra_calls_in_constructor.inc.php rename to packages/Architecture/tests/Rector/Class_/ConstructorInjectionToActionInjectionRector/Fixture/extra_calls_in_constructor.php.inc diff --git a/packages/CodingStyle/src/Application/UseAddingCommander.php b/packages/CodingStyle/src/Application/UseAddingCommander.php index ceff26d86605..839294be7cea 100644 --- a/packages/CodingStyle/src/Application/UseAddingCommander.php +++ b/packages/CodingStyle/src/Application/UseAddingCommander.php @@ -198,6 +198,13 @@ public function isImportShortable(Node $node, FullyQualifiedObjectType $fullyQua } } + $functionImports = $this->functionUseImportTypesInFilePath[$filePath] ?? []; + foreach ($functionImports as $useImportType) { + if ($fullyQualifiedObjectType->equals($useImportType)) { + return true; + } + } + return false; } diff --git a/packages/CodingStyle/src/Imports/ImportSkipper.php b/packages/CodingStyle/src/Imports/ImportSkipper.php index beadbfadeaa1..8c52b5069ea7 100644 --- a/packages/CodingStyle/src/Imports/ImportSkipper.php +++ b/packages/CodingStyle/src/Imports/ImportSkipper.php @@ -36,8 +36,10 @@ public function __construct( $this->shortNameResolver = $shortNameResolver; } - public function shouldSkipName(Node $node, FullyQualifiedObjectType $fullyQualifiedObjectType): bool - { + public function shouldSkipNameForFullyQualifiedObjectType( + Node $node, + FullyQualifiedObjectType $fullyQualifiedObjectType + ): bool { if ($this->isShortNameAlreadyUsedForDifferentFullyQualifiedName($node, $fullyQualifiedObjectType)) { return true; } diff --git a/packages/CodingStyle/src/Node/NameImporter.php b/packages/CodingStyle/src/Node/NameImporter.php index 322b237813fe..02e84e136dd4 100644 --- a/packages/CodingStyle/src/Node/NameImporter.php +++ b/packages/CodingStyle/src/Node/NameImporter.php @@ -67,11 +67,7 @@ public function importName(Name $name): ?Name return null; } - if ($this->isNamespaceOrUseImportName($name)) { - return null; - } - - if ($this->isFunctionOrConstantImportWithSingleName($name)) { + if ($this->shouldSkipName($name)) { return null; } @@ -110,7 +106,7 @@ private function importNameAndCollectNewUseStatement( FullyQualifiedObjectType $fullyQualifiedObjectType ): ?Name { // the same end is already imported → skip - if ($this->importSkipper->shouldSkipName($name, $fullyQualifiedObjectType)) { + if ($this->importSkipper->shouldSkipNameForFullyQualifiedObjectType($name, $fullyQualifiedObjectType)) { return null; } @@ -147,4 +143,13 @@ private function addUseImport(Name $name, FullyQualifiedObjectType $fullyQualifi $this->useAddingCommander->addUseImport($name, $fullyQualifiedObjectType); } } + + private function shouldSkipName(Name $name): bool + { + if ($this->isNamespaceOrUseImportName($name)) { + return true; + } + + return $this->isFunctionOrConstantImportWithSingleName($name); + } } diff --git a/packages/CodingStyle/src/Rector/Namespace_/ImportFullyQualifiedNamesRector.php b/packages/CodingStyle/src/Rector/Namespace_/ImportFullyQualifiedNamesRector.php index 36b01e5d3c92..d6ab2d24e06c 100644 --- a/packages/CodingStyle/src/Rector/Namespace_/ImportFullyQualifiedNamesRector.php +++ b/packages/CodingStyle/src/Rector/Namespace_/ImportFullyQualifiedNamesRector.php @@ -14,6 +14,8 @@ /** * @see \Rector\CodingStyle\Tests\Rector\Namespace_\ImportFullyQualifiedNamesRector\ImportFullyQualifiedNamesRectorTest + * @see \Rector\CodingStyle\Tests\Rector\Namespace_\ImportFullyQualifiedNamesRector\NonNamespacedTest + * @see \Rector\CodingStyle\Tests\Rector\Namespace_\ImportFullyQualifiedNamesRector\ImportRootNamespaceClassesDisabledTest */ final class ImportFullyQualifiedNamesRector extends AbstractRector { diff --git a/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/FixtureFunction/double_import_function.php.inc b/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/FixtureFunction/double_import_function.php.inc new file mode 100644 index 000000000000..9abdf91cfcf9 --- /dev/null +++ b/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/FixtureFunction/double_import_function.php.inc @@ -0,0 +1,38 @@ + +----- + diff --git a/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/ImportFullyQualifiedNamesRectorTest.php b/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/ImportFullyQualifiedNamesRectorTest.php index 1ce6a85cd179..871562b0c641 100644 --- a/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/ImportFullyQualifiedNamesRectorTest.php +++ b/packages/CodingStyle/tests/Rector/Namespace_/ImportFullyQualifiedNamesRector/ImportFullyQualifiedNamesRectorTest.php @@ -12,6 +12,7 @@ final class ImportFullyQualifiedNamesRectorTest extends AbstractRectorTestCase { /** * @dataProvider provideDataForTest() + * @dataProvider provideDataForTestFunction() */ public function test(string $file): void { @@ -23,6 +24,11 @@ public function provideDataForTest(): Iterator return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture'); } + public function provideDataForTestFunction(): Iterator + { + return $this->yieldFilesFromDirectory(__DIR__ . '/FixtureFunction'); + } + public function skippedProviderPartials(): Iterator { // @todo fix later diff --git a/packages/NodeTypeResolver/src/PhpDoc/NodeAnalyzer/DocBlockNameImporter.php b/packages/NodeTypeResolver/src/PhpDoc/NodeAnalyzer/DocBlockNameImporter.php index 701022707a2d..4fef3d217c80 100644 --- a/packages/NodeTypeResolver/src/PhpDoc/NodeAnalyzer/DocBlockNameImporter.php +++ b/packages/NodeTypeResolver/src/PhpDoc/NodeAnalyzer/DocBlockNameImporter.php @@ -122,7 +122,7 @@ private function processFqnNameImport( return $identifierTypeNode; } - if ($this->importSkipper->shouldSkipName($node, $fullyQualifiedObjectType)) { + if ($this->importSkipper->shouldSkipNameForFullyQualifiedObjectType($node, $fullyQualifiedObjectType)) { return $identifierTypeNode; } diff --git a/packages/Renaming/tests/Rector/Class_/RenameClassRector/FixtureAutoImportNames/double_funciton_import.php.inc b/packages/Renaming/tests/Rector/Class_/RenameClassRector/FixtureAutoImportNames/double_funciton_import.php.inc new file mode 100644 index 000000000000..0d911904389e --- /dev/null +++ b/packages/Renaming/tests/Rector/Class_/RenameClassRector/FixtureAutoImportNames/double_funciton_import.php.inc @@ -0,0 +1,38 @@ + +----- +