Example #1
0
 function enterNode(\PhpParser\Node $node)
 {
     if ($node instanceof \PhpParser\Node\Stmt\Namespace_) {
         $this->addNamespace(array('namespace' => $node->name->toString(), 'line' => $node->getLine(), 'file' => $this->file));
     }
     if ($node instanceof \PhpParser\Node\Stmt\Use_) {
         foreach ($node->uses as $use) {
             $this->addUse(array('name' => $use->name, 'alias' => $use->alias));
         }
     }
     if ($node instanceof \PhpParser\Node\Stmt\Class_) {
         $this->addClass(array('name' => $node->name, 'extends' => $node->extends, 'implements' => $node->implements, 'abstract' => $node->isAbstract(), 'final' => $node->isFinal(), 'comment' => $node->getDocComment(), 'doc' => $this->doc_comment_parser->parse($node->getDocComment()), 'line' => $node->getLine(), 'file' => $this->file));
     }
     if ($node instanceof \PhpParser\Node\Stmt\Interface_) {
         $this->addInterface(array('name' => $node->name, 'extends' => $node->extends, 'comment' => $node->getDocComment(), 'doc' => $this->doc_comment_parser->parse($node->getDocComment()), 'line' => $node->getLine(), 'file' => $this->file));
     }
     if ($node instanceof \PhpParser\Node\Stmt\ClassMethod) {
         $this->addClassMethod(array('byRef' => $node->byRef, 'name' => $node->name, 'params' => $node->params, 'returnType' => $node->returnType, 'public' => $node->isPublic(), 'protected' => $node->isProtected(), 'private' => $node->isPrivate(), 'abstract' => $node->isAbstract(), 'final' => $node->isFinal(), 'static' => $node->isStatic(), 'comment' => $node->getDocComment(), 'doc' => $this->doc_comment_parser->parse($node->getDocComment()), 'line' => $node->getLine(), 'file' => $this->file));
     }
     if ($node instanceof \PhpParser\Node\Stmt\Property) {
         $this->last_property = $node;
     }
     if ($node instanceof \PhpParser\Node\Stmt\PropertyProperty) {
         $this->addClassProperty(array('name' => $node->name, 'default' => $node->default, 'public' => $this->last_property->isPublic(), 'protected' => $this->last_property->isProtected(), 'private' => $this->last_property->isPrivate(), 'static' => $this->last_property->isStatic(), 'comment' => $node->getDocComment(), 'doc' => $this->doc_comment_parser->parse($node->getDocComment()), 'line' => $node->getLine(), 'file' => $this->file));
     }
     // $this->logger->info(get_class($node));
 }
 public function enterNode(PhpParser\Node $node)
 {
     if ($node instanceof Stmt\ClassMethod) {
         // create new context, keep parent
         $this->stack->start(new MethodContext($node->name, $node->getLine(), $node->getAttribute('endLine')));
         // report non public methods
         if ($node->isPrivate()) {
             $this->stack->addIssue(new PrivateMethodIssue($node));
         } elseif ($node->isProtected()) {
             $this->stack->addIssue(new ProtectedMethodIssue($node));
         }
         // report final methods
         if ($node->isFinal()) {
             $this->stack->addIssue(new FinalMethodIssue($node));
         }
     }
 }
 /**
  * Initialize a new User Class
  *
  * @param Node $node
  *
  * @return void
  */
 private function initUserClass(Node $node)
 {
     if (isset($node->namespacedName) && $node->namespacedName instanceof Node\Name && $node->namespacedName->isQualified()) {
         $min = '5.3.0';
     } else {
         if ($node->isAbstract() || $node->isFinal()) {
             $min = '5.0.0';
         } else {
             $min = '4.0.0';
         }
     }
     $max = '';
     $element = 'classes';
     $name = (string) $node->namespacedName;
     $this->contextStack[] = array($element, $name);
     // parent class
     if (isset($node->extends)) {
         $name = (string) $node->extends;
         $group = $this->findObjectType($name);
         $versions = $this->metrics[$group][$name];
         if ('user' == $versions['ext.name']) {
             if ($node->extends->isFullyQualified()) {
                 if (count($node->extends->parts) === 1) {
                     // PHP4 syntax (global namespace)
                     $versions = array('php.min' => '4.0.0');
                 } else {
                     $versions = array('php.min' => '5.3.0');
                 }
             } else {
                 $versions = array();
             }
         }
         $this->updateElementVersion('classes', $name, $versions);
         ++$this->metrics['classes'][$name]['matches'];
         if ('objects' == $group) {
             // now object is categorized, remove from temp queue
             unset($this->metrics[$group][$name]);
         }
         $this->updateLocalVersions($versions);
     }
     // interfaces
     foreach ($node->implements as $interface) {
         $name = (string) $interface;
         $group = $this->findObjectType($name);
         $versions = $this->metrics[$group][$name];
         $this->updateElementVersion('interfaces', $name, $versions);
         ++$this->metrics['interfaces'][$name]['matches'];
         if ('objects' == $group) {
             // now object is categorized, remove from temp queue
             unset($this->metrics[$group][$name]);
         }
         $this->updateLocalVersions($versions);
     }
     $name = (string) $node->namespacedName;
     $group = $this->findObjectType($name);
     $versions = $this->metrics[$group][$name];
     if ('objects' == $group) {
         // now object is categorized, remove from temp queue
         unset($this->metrics[$group][$name]);
     }
     $versions = array_merge($versions, array('php.min' => $min, 'php.max' => $max, 'declared' => true));
     $this->updateLocalVersions($versions);
 }