PHPSA\Analyzer::registerStatementPasses PHP Method

registerStatementPasses() public method

public registerStatementPasses ( array $statementPasses )
$statementPasses array all the statement analyzers
    public function registerStatementPasses(array $statementPasses)
    {
        foreach ($statementPasses as $pass) {
            if (!$pass instanceof AnalyzerPassInterface) {
                throw new \RuntimeException('Analyzer pass must implement AnalyzerPassInterface');
            }
            $bindOnStatements = $pass->getRegister();
            foreach ($bindOnStatements as $bindOnStatement) {
                if (isset($this->bindOnStatements[$bindOnStatement])) {
                    $this->bindOnStatements[$bindOnStatement][] = $pass;
                } else {
                    $this->bindOnStatements[$bindOnStatement] = [$pass];
                }
            }
        }
    }

Usage Example

Example #1
0
 /**
  * @param EventManager $eventManager
  * @param Configuration $config
  * @return Analyzer
  */
 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;
 }