/**
  * @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();
 }