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