상속: extends Symfony\Component\Finder\Finder
 /**
  * @param string  $path
  * @param RuleSet $ruleSet
  *
  * @return RuleSet
  */
 public function traverse($path, RuleSet $ruleSet = null)
 {
     $result = $this->finder->parsePhpFiles($path);
     if (!$ruleSet instanceof RuleSet) {
         $ruleSet = new RuleSet();
     }
     foreach ($result->parsedFiles() as $file) {
         if ($file->hasDeprecations()) {
             $ruleSet->merge($file);
         }
     }
     return $ruleSet;
 }
 /**
  * @param string  $path
  * @param RuleSet $ruleSet
  *
  * @return RuleSet
  */
 public function traverse($path, RuleSet $ruleSet = null)
 {
     $files = $this->finder->in($path);
     if (!$ruleSet instanceof RuleSet) {
         $ruleSet = new RuleSet();
     }
     foreach ($files as $i => $file) {
         /** @var PhpFileInfo $file */
         if ($file->hasDeprecations()) {
             $ruleSet->merge($file);
         }
     }
     return $ruleSet;
 }
 /**
  * @param string $sourceArg
  * @param string $ruleSetArg
  *
  * @return Violation[]
  *
  * @throws \Exception
  */
 public function checkForDeprecations($sourceArg, $ruleSetArg)
 {
     $this->output->startProgress();
     $this->output->startRuleSetGeneration();
     $ruleSet = $this->ruleSetLoader->loadRuleSet($ruleSetArg);
     $ruleSet->merge($this->preDefinedRuleSet);
     $this->output->endRuleSetGeneration();
     $this->output->startUsageDetection();
     // TODO: Move to AncestorResolver not hard coded
     $lib = is_dir($ruleSetArg) ? $ruleSetArg : realpath('vendor');
     $this->ancestorResolver->setSourcePaths(array($sourceArg, $lib));
     $result = $this->deprecationFinder->parsePhpFiles($sourceArg);
     $violations = $this->violationDetector->getViolations($ruleSet, $result->parsedFiles());
     $this->output->endUsageDetection();
     $this->output->startOutputRendering();
     $this->renderer->renderViolations($violations, $result->parserErrors());
     $this->output->endOutputRendering();
     $this->output->endProgress($result->fileCount(), count($violations));
     return $violations;
 }
 public function buildContainer()
 {
     $c = $this->container;
     // EVENT DISPATCHER
     $c['event_dispatcher'] = function () {
         $dispatcher = new EventDispatcher();
         $dispatcher->addSubscriber(new CommandListener());
         return $dispatcher;
     };
     // RULESET CACHE
     $c['ruleset.cache'] = function () {
         return new Cache(new Filesystem());
     };
     // RULESET TRAVERSER
     // TODO: fix container injection
     $c['ruleset.traverser'] = $c->factory(function ($c) {
         return new Traverser($c, $c['event_dispatcher']);
     });
     // RULESET LOADER
     $c['ruleset.loader.directory'] = function ($c) {
         return new DirectoryLoader($c['ruleset.traverser'], $c['ruleset.cache']);
     };
     $c['ruleset.loader.composer'] = function ($c) {
         return new ComposerLoader($c['ruleset.traverser'], $c['ruleset.cache'], $c['event_dispatcher']);
     };
     $c['ruleset.loader.ruleset'] = function ($c) {
         return new FileLoader($c['event_dispatcher']);
     };
     $c['symboltable'] = function () {
         return new SymbolTable();
     };
     /*
      * type guesser
      */
     // SymbolTableVariableResolver
     $c['typeguesser.symboltable_variable_resolver.argument_resolver'] = function ($c) {
         return new ArgumentResolver($c['symboltable']);
     };
     $c['typeguesser.symboltable_variable_resolver.reattach_variable_state'] = function ($c) {
         return new ReattachStateToVariable($c['symboltable']);
     };
     $c['typeguesser.symboltable_variable_resolver.reattach_property_state'] = function ($c) {
         return new ReattachStateToProperty($c['symboltable']);
     };
     $c['typeguesser.symboltable_variable_resolver.variable_assign'] = function ($c) {
         return new VariableAssignResolver($c['symboltable']);
     };
     $c['typeguesser.symboltable_variable_resolver.property_assign'] = function ($c) {
         return new PropertyAssignResolver($c['symboltable']);
     };
     $c['typeguesser.symboltable_variable_resolver.symfony_resolver'] = function ($c) {
         return new SymfonyResolver($c['symboltable'], $c['symfony_container_reader']);
     };
     $c['typeguesser.symboltable_variable_resolver'] = function ($c) {
         $resolver = new ComposedResolver();
         $resolver->addResolver($c['typeguesser.symboltable_variable_resolver.argument_resolver']);
         $resolver->addResolver($c['typeguesser.symboltable_variable_resolver.reattach_variable_state']);
         $resolver->addResolver($c['typeguesser.symboltable_variable_resolver.reattach_property_state']);
         $resolver->addResolver($c['typeguesser.symboltable_variable_resolver.variable_assign']);
         $resolver->addResolver($c['typeguesser.symboltable_variable_resolver.property_assign']);
         $resolver->addResolver($c['typeguesser.symboltable_variable_resolver.symfony_resolver']);
         return $resolver;
     };
     // ConstructorResolver
     $c['typeguesser.constructor_resolver'] = function ($c) {
         $resolver = new ConstructorResolver($c['symboltable']);
         $resolver->addVisitor($c['parser.usage.visitors.symboltable_variable_resolver_visitor']);
         return $resolver;
     };
     // SymfonyContainerReader
     $c['symfony_container_reader'] = function () {
         return new ContainerReader();
     };
     /*
      * AnalysisVisitors
      */
     $c['parser.usage.visitors.constructor_resolver_visitor'] = function ($c) {
         return new ConstructorResolverVisitor($c['typeguesser.constructor_resolver']);
     };
     $c['parser.usage.visitors.symboltable_variable_resolver_visitor'] = function ($c) {
         return new SymbolTableVariableResolverVisitor($c['typeguesser.symboltable_variable_resolver'], $c['symboltable']);
     };
     // PARSER
     $c['parser.base_traverser'] = function () {
         $traverser = new NodeTraverser();
         $traverser->addVisitor(new NameResolver());
         return $traverser;
     };
     $c['parser.usage'] = function ($c) {
         return new UsageParser(array($c['parser.usage.visitors.symboltable_variable_resolver_visitor'], $c['parser.usage.visitors.constructor_resolver_visitor']), array(new FindInterfaces(), new FindArguments(), new FindClasses(), new FindSuperTypes(), new FindMethodCalls(), new FindMethodDefinitions(), new FindStaticMethodCalls()), $c['parser.base_traverser'], new NodeTraverser(), new NodeTraverser());
     };
     $c['parser.deprecation'] = function ($c) {
         return new DeprecationParser(array(new FindDeprecatedTagsVisitor()), $c['parser.base_traverser']);
     };
     // FINDER
     $c['finder.php_usage'] = $c->factory(function ($c) {
         $finder = new ParsedPhpFileFinder();
         $finder->exclude('vendor')->exclude('Tests')->exclude('Test')->setParser($c['parser.usage']);
         return $finder;
     });
     $c['finder.php_deprecation'] = $c->factory(function ($c) {
         $finder = new ParsedPhpFileFinder();
         $finder->contains('@deprecated')->exclude('vendor')->exclude('Tests')->exclude('Test')->setParser($c['parser.deprecation']);
         return $finder;
     });
     // VIOLATION MESSAGEHELPER
     $c['violation.message_helper.class_message'] = function () {
         return new Renderer\MessageHelper\Message\ClassViolationMessage('SensioLabs\\DeprecationDetector\\FileInfo\\Usage\\ClassUsage');
     };
     $c['violation.message_helper.interface_message'] = function () {
         return new Renderer\MessageHelper\Message\InterfaceViolationMessage('SensioLabs\\DeprecationDetector\\FileInfo\\Usage\\InterfaceUsage');
     };
     $c['violation.message_helper.method_message'] = function () {
         return new Renderer\MessageHelper\Message\MethodViolationMessage('SensioLabs\\DeprecationDetector\\FileInfo\\Usage\\MethodUsage');
     };
     $c['violation.message_helper.method_definition_message'] = function () {
         return new Renderer\MessageHelper\Message\MethodDefinitionViolationMessage('SensioLabs\\DeprecationDetector\\FileInfo\\MethodDefinition');
     };
     $c['violation.message_helper.supertype_message'] = function () {
         return new Renderer\MessageHelper\Message\SuperTypeViolationMessage('SensioLabs\\DeprecationDetector\\FileInfo\\Usage\\SuperTypeUsage');
     };
     $c['violation.message_helper'] = function ($c) {
         $messageHelper = new Renderer\MessageHelper\MessageHelper();
         $messageHelper->addViolationMessage($c['violation.message_helper.class_message']);
         $messageHelper->addViolationMessage($c['violation.message_helper.interface_message']);
         $messageHelper->addViolationMessage($c['violation.message_helper.method_message']);
         $messageHelper->addViolationMessage($c['violation.message_helper.method_definition_message']);
         $messageHelper->addViolationMessage($c['violation.message_helper.supertype_message']);
         return $messageHelper;
     };
     // VIOLATION RENDERER
     $c['violation.renderer'] = function ($c) {
         return new Renderer\ConsoleOutputRenderer(new ConsoleOutput(), $c['violation.message_helper']);
     };
     // ANCESTOR RESOLVER
     // TODO: fix container injection
     $c['ancestor_resolver'] = function ($c) {
         return new AncestorResolver($c);
     };
     $c['violation_checker'] = function ($c) {
         return new ComposedViolationChecker([new ClassViolationChecker(), new InterfaceViolationChecker(), new MethodViolationChecker($c['ancestor_resolver']), new SuperTypeViolationChecker(), new TypeHintViolationChecker(), new MethodDefinitionViolationChecker($c['ancestor_resolver'])]);
     };
     $c['violation_detector'] = function ($c) {
         return new ViolationDetector($c['event_dispatcher'], $c['violation_checker']);
     };
 }
 public function reset()
 {
     $this->finder = ParsedPhpFileFinder::deprecationFinder($this->finder->getParser(), $this->finder->getOutput());
 }
 /**
  * @param ParserInterface $parser
  * @param VerboseProgressOutput $progressOutput
  * @return ParsedPhpFileFinder
  */
 public static function usageFinder(ParserInterface $parser, VerboseProgressOutput $progressOutput)
 {
     $finder = new ParsedPhpFileFinder($parser, $progressOutput);
     $finder->exclude('vendor')->exclude('Tests')->exclude('Test');
     return $finder;
 }
 /**
  * @param Configuration   $configuration
  * @param OutputInterface $output
  *
  * @return DeprecationDetector
  */
 public function create(Configuration $configuration, OutputInterface $output)
 {
     $this->symbolTable = new SymbolTable();
     $deprecationProgressOutput = new VerboseProgressOutput(new ProgressBar($output), $configuration->isVerbose(), 'Deprecation detection');
     $deprecationUsageParser = $this->getUsageParser($configuration);
     $deprecationUsageFinder = ParsedPhpFileFinder::usageFinder($deprecationUsageParser, $deprecationProgressOutput);
     $this->ancestorResolver = new AncestorResolver($deprecationUsageParser);
     $ruleSetProgressOutput = new VerboseProgressOutput(new ProgressBar($output), $configuration->isVerbose(), 'RuleSet generation');
     $ruleSetDeprecationParser = $this->getDeprecationParser();
     $ruleSetDeprecationFinder = ParsedPhpFileFinder::deprecationFinder($ruleSetDeprecationParser, $ruleSetProgressOutput);
     $deprecationDirectoryTraverser = new DirectoryTraverser($ruleSetDeprecationFinder);
     $violationDetector = $this->getViolationDetector($configuration);
     $renderer = $this->getRenderer($configuration, $output);
     $ruleSetLoader = $this->getRuleSetLoader($deprecationDirectoryTraverser, $configuration);
     $progressOutput = new DefaultProgressOutput($output, new Stopwatch());
     return new DeprecationDetector($this->getPredefinedRuleSet(), $ruleSetLoader, $this->ancestorResolver, $deprecationUsageFinder, $violationDetector, $renderer, $progressOutput);
 }