/** * Processes all {@link PHP_Depend_Code_Package} code nodes. * * @param PHP_Depend_Code_NodeIterator $packages All code packages. * * @return void */ public function analyze(PHP_Depend_Code_NodeIterator $packages) { if ($this->nodeMetrics === null) { $this->fireStartAnalyzer(); $factory = new PHP_Depend_Metrics_CodeRank_StrategyFactory(); if (isset($this->options[self::STRATEGY_OPTION])) { foreach ($this->options[self::STRATEGY_OPTION] as $identifier) { $this->strategies[] = $factory->createStrategy($identifier); } } else { $this->strategies[] = $factory->createDefaultStrategy(); } // Register all listeners foreach ($this->getVisitListeners() as $listener) { foreach ($this->strategies as $strategy) { $strategy->addVisitListener($listener); } } // First traverse package tree foreach ($packages as $package) { // Traverse all strategies foreach ($this->strategies as $strategy) { $package->accept($strategy); } } // Collect all nodes foreach ($this->strategies as $strategy) { $collected = $strategy->getCollectedNodes(); $this->nodes = array_merge_recursive($collected, $this->nodes); } // Init node metrics $this->nodeMetrics = array(); // Calculate code rank metrics $this->buildCodeRankMetrics(); $this->fireEndAnalyzer(); } }