/**
  * Search for unnecessary namespace imports and definitions and replace occurrences.
  *
  * @param FileGenerator $fileGenerator
  * @return string Generated code
  */
 public function replaceNamespace(FileGenerator $fileGenerator)
 {
     $uses = [];
     $search = [];
     $replace = [];
     foreach ($fileGenerator->getUses() as $import) {
         $namespace = trim(substr($import[0], 0, strrpos($import[0], '\\')), '\\');
         if ($fileGenerator->getNamespace() !== $namespace) {
             $uses[] = $import;
         }
         $name = trim(substr($import[0], strrpos($import[0], '\\')), '\\');
         $search[] = '\\' . $import[0];
         $search[] = ', \\' . $import[0];
         $replace[] = $name;
         $replace[] = ', ' . $name;
     }
     // workaround to reset use imports
     $reflection = new \ReflectionClass($fileGenerator);
     $property = $reflection->getProperty('uses');
     $property->setAccessible(true);
     $property->setValue($fileGenerator, $uses);
     $code = $fileGenerator->generate();
     return str_replace($search, $replace, $code);
 }
Пример #2
0
 public function testSetUsesWithGetUses()
 {
     $file = new FileGenerator();
     $uses = array('Your\\Bar', 'My\\Baz', array('use' => 'Another\\Baz', 'as' => 'Baz2'));
     $file->setUses($uses);
     $file->setUses($file->getUses());
     $generated = $file->generate();
     $this->assertContains('use My\\Baz;', $generated);
     $this->assertContains('use Your\\Bar;', $generated);
     $this->assertContains('use Another\\Baz as Baz2;', $generated);
 }
Пример #3
0
 /**
  * If a method exists under a namespace and has been aliased, or has been imported, don't replace.
  *
  * @param FileGenerator $generator
  * @param array         $functions
  *
  * @return array
  */
 private function removeUseFunctionsFromBackslashing(FileGenerator $generator, array $functions)
 {
     foreach ($generator->getUses() as $namespacedFunction) {
         list($functionOrClass) = $namespacedFunction;
         if (\function_exists($functionOrClass)) {
             $function = \explode("\\", $functionOrClass);
             $function = \array_pop($function);
             if (!empty($functions[$function])) {
                 unset($functions[$function]);
             }
         }
     }
     return $functions;
 }