Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
4 / 4 |
CRAP | |
100.00% |
53 / 53 |
PublicCollector | |
100.00% |
1 / 1 |
|
100.00% |
8 / 8 |
23 | |
100.00% |
53 / 53 |
enterClassNode(\PHPParser_Node_Stmt_Class $node) | |
100.00% |
1 / 1 |
1 | ||||||
enterInterfaceNode(\PHPParser_Node_Stmt_Interface $node) | |
100.00% |
1 / 1 |
1 | ||||||
enterTraitNode(\PHPParser_Node_Stmt_Trait $node) | |
100.00% |
1 / 1 |
1 | ||||||
enterPublicMethodNode(\PHPParser_Node_Stmt_ClassMethod $node) | |
100.00% |
1 / 1 |
1 | ||||||
enterNode(\PHPParser_Node $node) | |
100.00% |
1 / 1 |
6 | |
100.00% |
22 / 22 |
|||
leaveNode(\PHPParser_Node $node) | |
100.00% |
1 / 1 |
7 | |
100.00% |
15 / 15 |
|||
getCurrentMethodIndex() | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
extractAnnotation(\PHPParser_Node_Stmt $node) | |
100.00% |
1 / 1 |
5 | |
100.00% |
13 / 13 |
<?php | |
/* | |
* Mondrian | |
*/ | |
namespace Trismegiste\Mondrian\Visitor; | |
/** | |
* PublicCollector is an abstract node collector for public "things" of types | |
* | |
*/ | |
abstract class PublicCollector extends FqcnHelper | |
{ | |
protected $currentClass = false; | |
protected $currentMethod = false; | |
/** | |
* Visits a class node | |
* | |
* @param \PHPParser_Node_Stmt_Class $node | |
*/ | |
abstract protected function enterClassNode(\PHPParser_Node_Stmt_Class $node); | |
/** | |
* Visits an interface node | |
* | |
* @param \PHPParser_Node_Stmt_Interface $node | |
*/ | |
abstract protected function enterInterfaceNode(\PHPParser_Node_Stmt_Interface $node); | |
/** | |
* Visits an trait node | |
* | |
* @param \PHPParser_Node_Stmt_Trait $node | |
*/ | |
abstract protected function enterTraitNode(\PHPParser_Node_Stmt_Trait $node); | |
/** | |
* Visits a public method node | |
* | |
* @param \PHPParser_Node_Stmt_ClassMethod $node | |
*/ | |
abstract protected function enterPublicMethodNode(\PHPParser_Node_Stmt_ClassMethod $node); | |
/** | |
* {@inheritDoc} | |
*/ | |
public function enterNode(\PHPParser_Node $node) | |
{ | |
parent::enterNode($node); | |
switch ($node->getType()) { | |
case 'Stmt_Class' : | |
$this->currentClass = $this->getNamespacedName($node); | |
$this->enterClassNode($node); | |
break; | |
case 'Stmt_Interface' : | |
$this->currentClass = $this->getNamespacedName($node); | |
$this->enterInterfaceNode($node); | |
break; | |
case 'Stmt_Trait' : | |
$this->currentClass = $this->getNamespacedName($node); | |
$this->enterTraitNode($node); | |
break; | |
case 'Stmt_ClassMethod' : | |
if ($node->isPublic()) { | |
$this->currentMethod = $node->name; | |
$this->enterPublicMethodNode($node); | |
} | |
break; | |
} | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
public function leaveNode(\PHPParser_Node $node) | |
{ | |
switch ($node->getType()) { | |
case 'Stmt_Class': | |
case 'Stmt_Interface': | |
case 'Stmt_Trait': | |
$this->currentClass = false; | |
break; | |
case 'Stmt_ClassMethod' : | |
$this->currentMethod = false; | |
break; | |
case 'PhpFile' : | |
if ($this->currentPhpFile->isModified()) { | |
return $this->currentPhpFile; | |
} | |
break; | |
} | |
} | |
/** | |
* the vertex name for a MethodVertex | |
* | |
* @return string | |
*/ | |
protected function getCurrentMethodIndex() | |
{ | |
return $this->currentClass . '::' . $this->currentMethod; | |
} | |
/** | |
* Extracts annotations in the comment of a statement and injects them in | |
* attribute of the node | |
* | |
* @param \PHPParser_Node_Stmt $node | |
*/ | |
protected function extractAnnotation(\PHPParser_Node_Stmt $node) | |
{ | |
if ($node->hasAttribute('comments')) { | |
$compil = array(); | |
foreach ($node->getAttribute('comments') as $comm) { | |
preg_match_all('#^.*@mondrian\s+([\w]+)\s+([^\s]+)\s*$#m', $comm->getReformattedText(), $match); | |
foreach ($match[0] as $idx => $matchedOccur) { | |
$compil[$match[1][$idx]][] = $match[2][$idx]; | |
} | |
} | |
// if there are annotations, we add them to the node | |
foreach ($compil as $attr => $lst) { | |
$node->setAttribute($attr, $lst); | |
} | |
} | |
} | |
} |