public static factory ( |
||
$eventManager | ||
$config | ||
return |
public static function factory(EventManager $eventManager, Configuration $config)
{
$analyzersConfig = $config->getValue('analyzers');
$filterEnabled = function ($passClass) use($config, $analyzersConfig) {
/** @var AnalyzerPass\Metadata $passMetadata */
$passMetadata = $passClass::getMetadata();
if (!isset($analyzersConfig[$passMetadata->getName()])) {
return false;
}
if (!$analyzersConfig[$passMetadata->getName()]['enabled']) {
return false;
}
if (!$passMetadata->allowsPhpVersion($config->getValue('language_level'))) {
return false;
}
return true;
};
$instanciate = function ($passClass) use($analyzersConfig) {
$passName = $passClass::getMetadata()->getName();
return new $passClass($analyzersConfig[$passName]);
};
$analyzer = new Analyzer($eventManager);
$analyzer->registerExpressionPasses(array_map($instanciate, array_filter(self::getExpressionPasses(), $filterEnabled)));
$analyzer->registerStatementPasses(array_map($instanciate, array_filter(self::getStatementPasses(), $filterEnabled)));
$analyzer->registerScalarPasses(array_map($instanciate, array_filter(self::getScalarPasses(), $filterEnabled)));
$analyzer->bind();
return $analyzer;
}
/** * @param string $analyzerName * @return EventManager * @throws \Webiny\Component\EventManager\EventManagerException */ protected function getEventManager($analyzerName) { if (!class_exists($analyzerName, true)) { throw new \InvalidArgumentException("Analyzer with name: {$analyzerName} doesnot exist"); } /** @var \PHPSA\Analyzer\Pass\Metadata $metaData */ $metaData = $analyzerName::getMetadata(); if (!$metaData->allowsPhpVersion(PHP_VERSION)) { parent::markTestSkipped(sprintf('We cannot tests %s with %s because PHP required version is %s', $analyzerName, PHP_VERSION, $metaData->getRequiredPhpVersion())); } $analyzerConfiguration = $metaData->getConfiguration(); $analyzerConfiguration->attribute('enabled', true); $config = [$analyzerName::getMetadata()->getConfiguration()]; $em = EventManager::getInstance(); $configuration = new Configuration([], $config); \PHPSA\Analyzer\Factory::factory($em, $configuration); return $em; }