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;
}