示例#1
0
 /**
  * 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();
     }
 }
示例#2
0
 /**
  * Tests that the factory throws the expected exception for an invalid
  * strategy identifier.
  *
  * @return void
  * @covers PHP_Depend_Metrics_CodeRank_StrategyFactory
  * @group pdepend
  * @group pdepend::metrics
  * @group pdepend::metrics::coderank
  * @group unittest
  */
 public function testFactoryMethodThrowsExceptionForInvalidStrategyIdentifier()
 {
     $factory = new PHP_Depend_Metrics_CodeRank_StrategyFactory();
     $this->setExpectedException('InvalidArgumentException', 'Cannot load file for identifier "foo_bar_baz".');
     $factory->createStrategy('foo_bar_baz');
 }