/** * @param OutputInterface $output * @return \Pimple */ public function buildContainer(OutputInterface $output) { $container = new \Pimple(); $container['lexer'] = $container->share(function () { return new ExtendedLexer(array('usedAttributes' => array('comments', 'startLine', 'endLine', 'startTokenPos', 'endTokenPos'))); }); $container['parser'] = $container->share(function ($c) { return new Parser($c['lexer']); }); $visitors = $this->checkerVisitors; foreach ($visitors as $visitorServiceName => $visitorClass) { $container[$visitorServiceName] = $container->share(function () use($visitorClass) { return new $visitorClass(); }); } $container['traverser'] = $container->share(function ($c) use($visitors) { $traverser = new Traverser(); foreach (array_keys($visitors) as $visitorServiceName) { $traverser->addVisitor($c[$visitorServiceName]); } return $traverser; }); $container['contextChecker'] = $container->share(function ($c) { return new ContextChecker($c['parser'], $c['lexer'], $c['traverser']); }); $container['output'] = $container->share(function () use($output) { return new CLIOutputBridge($output); }); $container['nodePrinter'] = $container->share(function () { return new StandardPrettyPrinter(); }); $container['resultPrinter'] = $container->share(function ($c) { return new CLIResultPrinter($c['output'], $c['nodePrinter'], $c['nodeStatementsRemover']); }); $container['pathChecker'] = $container->share(function ($c) { return new PathChecker($c['contextChecker'], $c['fileContextFactory'], $c['resultPrinter']); }); $container['nodeStatementsRemover'] = $container->share(function () { return new NodeStatementsRemover(); }); $container['fileContextFactory'] = $container->share(function () { return new FileContextFactory(); }); return $container; }
/** * @param OutputInterface $output * @param int $intSize * * @return Container */ public function buildContainer(OutputInterface $output, $intSize) { $this->checkerVisitors[static::BITWISE_SHIFT_VISITOR_ID]['arguments'][] = $intSize; $container = new Container(); $container['lexer'] = function () { return new ExtendedLexer(array('usedAttributes' => array('startLine', 'endLine', 'startTokenPos', 'endTokenPos'))); }; $container['parser'] = function ($c) { return new Parser($c['lexer']); }; $this->addVisitors($container); $visitors = $this->checkerVisitors; $container['traverser'] = function () { $traverser = new Traverser(false); // Resolve fully qualified name (class, interface, function, etc) to ease some process $traverser->addVisitor(new NameResolver()); return $traverser; }; $container['nodeVisitorResolver'] = function ($c) use($visitors) { $visitorInstances = array(); foreach (array_keys($visitors) as $visitorServiceName) { $visitorInstances[] = $c[$visitorServiceName]; } return new Resolver($visitorInstances); }; $container['nodeAnalyzer.functionAnalyzer'] = function () { return new FunctionAnalyzer(); }; $container['contextChecker'] = function ($c) { return new ContextChecker($c['parser'], $c['lexer'], $c['traverser']); }; $container['output'] = function () use($output) { return new CLIOutputBridge($output); }; $container['nodePrinter'] = function () { return new StandardPrettyPrinter(); }; $container['resultPrinter'] = function ($c) { return new CLIResultPrinter($c['output'], $c['nodePrinter'], $c['nodeStatementsRemover']); }; $container['pathChecker'] = function ($c) { return new PathChecker($c['contextChecker'], $c['resultPrinter']); }; $container['nodeStatementsRemover'] = function () { return new NodeStatementsRemover(); }; $container['pathTraversableFactory'] = function ($c) { return new PathTraversableFactory($c['excludedPathCanonicalizer']); }; $container['pathCheckExecutor'] = function ($c) { return new PathCheckExecutor($c['pathTraversableFactory'], $c['pathChecker'], $c['traverser'], $c['nodeVisitorResolver']); }; $container['excludedPathCanonicalizer'] = function ($c) { return new ExcludedPathCanonicalizer($c['pathHelper']); }; $container['osDetector'] = function () { return new OSDetector(); }; $container['pathHelperFactory'] = function ($c) { return new PathHelperFactory($c['osDetector']); }; $container['pathHelper'] = function ($c) { /** @var PathHelperFactory $pathHelperFactory */ $pathHelperFactory = $c['pathHelperFactory']; return $pathHelperFactory->createPathHelper(); }; $container['regExpParser'] = function () { return new RegExpParser(); }; return $container; }