/** * @group GH-31 * @test */ public function it_filters_imported_php_name_usages() { $file = new File('foo.php', 'code'); $filter = new NoImportedUsagesFilter(); $names = $filter->filter(array(new PhpNameOccurance(new PhpName('Foo\\Bar', 'Foo\\Bar', PhpName::TYPE_USE), $file, 12), new PhpNameOccurance(new PhpName('Foo\\Bar', 'Bar', PhpName::TYPE_USAGE), $file, 12))); $this->assertEquals(1, count($names)); }
public function refactor(Directory $directory) { $phpFiles = $directory->findAllPhpFilesRecursivly(); $renames = new Set(); $occurances = array(); $noImportedUsages = new NoImportedUsagesFilter(); foreach ($phpFiles as $phpFile) { $classes = $this->codeAnalysis->findClasses($phpFile); $occurances = array_merge($noImportedUsages->filter($this->nameScanner->findNames($phpFile)), $occurances); if (count($classes) !== 1) { continue; } $class = $classes[0]; $currentClassName = $class->declarationName(); $expectedClassName = $phpFile->extractPsr0ClassName(); $buffer = $this->editor->openBuffer($phpFile); // This is weird to be required here if ($expectedClassName->shortName() !== $currentClassName->shortName()) { $renames->add(new PhpNameChange($currentClassName, $expectedClassName)); } if (!$expectedClassName->namespaceName()->equals($currentClassName->namespaceName())) { $renames->add(new PhpNameChange($currentClassName->fullyQualified(), $expectedClassName->fullyQualified())); $buffer->replaceString($class->namespaceDeclarationLine(), $currentClassName->namespaceName()->fullyQualifiedName(), $expectedClassName->namespaceName()->fullyQualifiedName()); } } $occurances = array_filter($occurances, function ($occurance) { return $occurance->name()->type() !== PhpName::TYPE_NAMESPACE; }); foreach ($occurances as $occurance) { $name = $occurance->name(); foreach ($renames as $rename) { if ($rename->affects($name)) { $buffer = $this->editor->openBuffer($occurance->file()); $buffer->replaceString($occurance->declarationLine(), $name->relativeName(), $rename->change($name)->relativeName()); continue 2; } } } $this->editor->save(); }