public function testFindNames()
 {
     $file = File::createFromPath(__FILE__, __DIR__);
     $scanner = new ParserPhpNameScanner();
     $names = $scanner->findNames($file);
     $this->assertEquals(array(new PhpNameOccurance(new PhpName('QafooLabs\\Refactoring\\Adapters\\PHPParser', 'QafooLabs\\Refactoring\\Adapters\\PHPParser', PhpName::TYPE_NAMESPACE), $file, 3), new PhpNameOccurance(new PhpName('QafooLabs\\Refactoring\\Domain\\Model\\File', 'QafooLabs\\Refactoring\\Domain\\Model\\File', PhpName::TYPE_USE), $file, 5), new PhpNameOccurance(new PhpName('QafooLabs\\Refactoring\\Domain\\Model\\PhpName', 'QafooLabs\\Refactoring\\Domain\\Model\\PhpName', PhpName::TYPE_USE), $file, 6), new PhpNameOccurance(new PhpName('QafooLabs\\Refactoring\\Domain\\Model\\PhpNameOccurance', 'QafooLabs\\Refactoring\\Domain\\Model\\PhpNameOccurance', PhpName::TYPE_USE), $file, 7), new PhpNameOccurance(new PhpName('QafooLabs\\Refactoring\\Adapters\\PHPParser\\ParserPhpNameScannerTest', 'ParserPhpNameScannerTest', PhpName::TYPE_CLASS), $file, 9), new PhpNameOccurance(new PhpName('PHPUnit_Framework_TestCase', 'PHPUnit_Framework_TestCase', PhpName::TYPE_USAGE), $file, 9), new PhpNameOccurance(new PhpName('QafooLabs\\Refactoring\\Domain\\Model\\File', 'File', PhpName::TYPE_USAGE), $file, 13), new PhpNameOccurance(new PhpName('QafooLabs\\Refactoring\\Adapters\\PHPParser\\ParserPhpNameScanner', 'ParserPhpNameScanner', PhpName::TYPE_USAGE), $file, 14)), array_slice($names, 0, 8));
 }
 public function findNames(File $file)
 {
     $parser = new PHPParser_Parser(new PHPParser_Lexer());
     $collector = new PhpNameCollector();
     $traverser = new PHPParser_NodeTraverser();
     try {
         $stmts = $parser->parse($file->getCode());
     } catch (PHPParser_Error $e) {
         throw new \RuntimeException("Error parsing " . $file->getRelativePath() . ": " . $e->getMessage(), 0, $e);
     }
     $traverser->addVisitor($collector);
     $traverser->traverse($stmts);
     return array_map(function ($use) use($file) {
         $type = constant('QafooLabs\\Refactoring\\Domain\\Model\\PhpName::TYPE_' . strtoupper($use['type']));
         return new PhpNameOccurance(new PhpName($use['fqcn'], $use['alias'], $type), $file, $use['line']);
     }, $collector->collectedNameDeclarations());
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $file = File::createFromPath($input->getArgument('file'), getcwd());
     $codeAnalysis = new StaticCodeAnalysis();
     $editor = new PatchEditor(new OutputPatchCommand($output));
     $phpNameScanner = new ParserPhpNameScanner();
     $optimizeUse = new OptimizeUse($codeAnalysis, $editor, $phpNameScanner);
     $optimizeUse->refactor($file);
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $file = File::createFromPath($input->getArgument('file'), getcwd());
     $line = (int) $input->getArgument('line');
     $variable = new Variable($input->getArgument('variable'));
     $scanner = new ParserVariableScanner();
     $codeAnalysis = new StaticCodeAnalysis();
     $editor = new PatchEditor(new OutputPatchCommand($output));
     $convertRefactoring = new ConvertLocalToInstanceVariable($scanner, $codeAnalysis, $editor);
     $convertRefactoring->refactor($file, $line, $variable);
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $file = File::createFromPath($input->getArgument('file'), getcwd());
     $range = LineRange::fromString($input->getArgument('range'));
     $newMethodName = $input->getArgument('newmethod');
     $scanner = new ParserVariableScanner();
     $codeAnalysis = new StaticCodeAnalysis();
     $editor = new PatchEditor(new OutputPatchCommand($output));
     $extractMethod = new ExtractMethod($scanner, $codeAnalysis, $editor);
     $extractMethod->refactor($file, $range, $newMethodName);
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $file = File::createFromPath($input->getArgument('file'), getcwd());
     $line = (int) $input->getArgument('line');
     $name = new Variable($input->getArgument('name'));
     $newName = new Variable($input->getArgument('new-name'));
     $scanner = new ParserVariableScanner();
     $codeAnalysis = new StaticCodeAnalysis();
     $editor = new PatchEditor(new OutputPatchCommand($output));
     $renameLocalVariable = new RenameLocalVariable($scanner, $codeAnalysis, $editor);
     $renameLocalVariable->refactor($file, $line, $name, $newName);
 }
 public function scanForVariables(File $file, LineRange $range)
 {
     $parser = new PHPParser_Parser(new PHPParser_Lexer());
     $stmts = $parser->parse($file->getCode());
     $collector = new LineRangeStatementCollector($range);
     $traverser = new PHPParser_NodeTraverser();
     $traverser->addVisitor(new NodeConnector());
     $traverser->addVisitor($collector);
     $traverser->traverse($stmts);
     $selectedStatements = $collector->getStatements();
     if (!$selectedStatements) {
         throw new \RuntimeException("No statements found in line range.");
     }
     $localVariableClassifier = new LocalVariableClassifier();
     $traverser = new PHPParser_NodeTraverser();
     $traverser->addVisitor($localVariableClassifier);
     $traverser->traverse($selectedStatements);
     $localVariables = $localVariableClassifier->getUsedLocalVariables();
     $assignments = $localVariableClassifier->getAssignments();
     return new DefinedVariables($localVariables, $assignments);
 }
 /**
  * {@inheritDoc}
  */
 public function openBuffer(File $file)
 {
     if (!isset($this->builders[$file->getRelativePath()])) {
         $this->builders[$file->getRelativePath()] = new PatchBuilder($file->getCode(), $file->getRelativePath());
     }
     return new PatchBuffer($this->builders[$file->getRelativePath()]);
 }
 /**
  * @return File[]
  */
 public function findAllPhpFilesRecursivly()
 {
     $workingDirectory = $this->workingDirectory;
     $iterator = new AppendIterator();
     foreach ($this->paths as $path) {
         $iterator->append(new CallbackTransformIterator(new CallbackFilterIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::LEAVES_ONLY), function (SplFileInfo $file) {
             return substr($file->getFilename(), -4) === ".php";
         }), function ($file) use($workingDirectory) {
             return File::createFromPath($file->getPathname(), $workingDirectory);
         }));
     }
     $files = iterator_to_array($iterator);
     return new StandardCallbackFilterIterator($iterator, function ($file, $filename) use($files) {
         return !in_array($filename, $files);
     });
 }
 /**
  * @dataProvider dataExtractPsr0ClassName
  */
 public function testExtractPsr0ClassName($expectedClassName, $fileName)
 {
     $file = new File($fileName, '<?php');
     $actualClassName = $file->extractPsr0ClassName();
     $this->assertTrue($expectedClassName->equals($actualClassName), "- {$expectedClassName}\n+ {$actualClassName}");
 }