コード例 #1
0
ファイル: Analyzer.php プロジェクト: KingNoosh/Teknik
 /**
  * Calculates two metrics. The number of added methods and the number of
  * overwritten methods.
  *
  * @param PHP_Depend_Code_Class $class The context class instance.
  *
  * @return void
  * @since 0.9.10
  */
 private function calculateNumberOfAddedAndOverwrittenMethods(PHP_Depend_Code_Class $class)
 {
     $parentClass = $class->getParentClass();
     if ($parentClass === null) {
         return;
     }
     $parentMethodNames = array();
     foreach ($parentClass->getAllMethods() as $method) {
         $parentMethodNames[$method->getName()] = $method->isAbstract();
     }
     $numberOfAddedMethods = 0;
     $numberOfOverwrittenMethods = 0;
     foreach ($class->getAllMethods() as $method) {
         if ($method->getParent() !== $class) {
             continue;
         }
         if (isset($parentMethodNames[$method->getName()])) {
             if (!$parentMethodNames[$method->getName()]) {
                 ++$numberOfOverwrittenMethods;
             }
         } else {
             ++$numberOfAddedMethods;
         }
     }
     $uuid = $class->getUuid();
     $this->nodeMetrics[$uuid][self::M_NUMBER_OF_ADDED_METHODS] = $numberOfAddedMethods;
     $this->nodeMetrics[$uuid][self::M_NUMBER_OF_OVERWRITTEN_METHODS] = $numberOfOverwrittenMethods;
 }
コード例 #2
0
ファイル: Analyzer.php プロジェクト: yusufchang/app
 /**
  * Initializes a empty metric container for the given class node.
  *
  * @param PHP_Depend_Code_Class $class The context class instance.
  *
  * @return void
  * @since 0.9.10
  */
 private function _initNodeMetricsForClass(PHP_Depend_Code_Class $class)
 {
     if (is_object($class->getParentClass())) {
         $this->_initNodeMetricsForClass($class->getParentClass());
     }
     $uuid = $class->getUUID();
     if (isset($this->_nodeMetrics[$uuid])) {
         return;
     }
     ++$this->_numberOfClasses;
     $this->_nodeMetrics[$uuid] = array(self::M_DEPTH_OF_INHERITANCE_TREE => 0, self::M_NUMBER_OF_ADDED_METHODS => 0, self::M_NUMBER_OF_DERIVED_CLASSES => 0, self::M_NUMBER_OF_OVERWRITTEN_METHODS => 0);
 }
コード例 #3
0
ファイル: Analyzer.php プロジェクト: kingsj/core
 /**
  * Calculates the Weight Method Per Class metric, this method only counts
  * protected and public methods of parent classes.
  *
  * @param PHP_Depend_Code_Class $class The context class instance.
  *
  * @return integer
  */
 private function _calculateWMCi(PHP_Depend_Code_Class $class)
 {
     // List of methods, this method only counts not overwritten methods.
     $ccn = array();
     // First collect all methods of the context class
     foreach ($class->getMethods() as $m) {
         $ccn[$m->getName()] = $this->_cyclomaticAnalyzer->getCCN2($m);
     }
     // Get parent class and collect all non private methods.
     $parent = $class->getParentClass();
     while ($parent !== null) {
         // Count all methods
         foreach ($parent->getMethods() as $m) {
             if (!$m->isPrivate() && !isset($methods[$m->getName()])) {
                 $ccn[$m->getName()] = $this->_cyclomaticAnalyzer->getCCN2($m);
             }
         }
         // Fetch parent class
         $parent = $parent->getParentClass();
     }
     return array_sum($ccn);
 }