Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
8 / 8 |
CRAP | |
100.00% |
40 / 40 |
SymbolMap | |
100.00% |
1 / 1 |
|
100.00% |
8 / 8 |
13 | |
100.00% |
40 / 40 |
__construct(ReflectionContext $ctx) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
enterNode(\PHPParser_Node $node) | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
enterClassNode(\PHPParser_Node_Stmt_Class $node) | |
100.00% |
1 / 1 |
3 | |
100.00% |
12 / 12 |
|||
enterInterfaceNode(\PHPParser_Node_Stmt_Interface $node) | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
enterPublicMethodNode(\PHPParser_Node_Stmt_ClassMethod $node) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
afterTraverse(array $dummy) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
enterTraitNode(\PHPParser_Node_Stmt_Trait $node) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
importSignatureTrait(\PHPParser_Node_Stmt_TraitUse $node) | |
100.00% |
1 / 1 |
2 | |
100.00% |
6 / 6 |
<?php | |
/* | |
* Mondrian | |
*/ | |
namespace Trismegiste\Mondrian\Visitor; | |
use Trismegiste\Mondrian\Transform\ReflectionContext; | |
/** | |
* SymbolMap is a class to collect list of class/interface/method name | |
* | |
* It fills the Context with symbols | |
*/ | |
class SymbolMap extends PublicCollector | |
{ | |
private $context; | |
/** | |
* Build the collector | |
* | |
* @param Context $ctx | |
*/ | |
public function __construct(ReflectionContext $ctx) | |
{ | |
$this->context = $ctx; | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
public function enterNode(\PHPParser_Node $node) | |
{ | |
parent::enterNode($node); | |
switch ($node->getType()) { | |
case 'Stmt_TraitUse' : | |
$this->importSignatureTrait($node); | |
break; | |
} | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
protected function enterClassNode(\PHPParser_Node_Stmt_Class $node) | |
{ | |
$this->context->initSymbol($this->currentClass, ReflectionContext::SYMBOL_CLASS); | |
// extends | |
if (!is_null($node->extends)) { | |
$name = (string) $this->resolveClassName($node->extends); | |
$this->context->initSymbol($name, ReflectionContext::SYMBOL_CLASS); | |
$this->context->pushParentClass($this->currentClass, $name); | |
} | |
// implements | |
foreach ($node->implements as $parent) { | |
$name = (string) $this->resolveClassName($parent); | |
$this->context->initSymbol($name, ReflectionContext::SYMBOL_INTERFACE); | |
$this->context->pushParentClass($this->currentClass, $name); | |
} | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
protected function enterInterfaceNode(\PHPParser_Node_Stmt_Interface $node) | |
{ | |
$this->context->initSymbol($this->currentClass, ReflectionContext::SYMBOL_INTERFACE); | |
// extends | |
foreach ($node->extends as $interf) { | |
$name = (string) $this->resolveClassName($interf); | |
$this->context->initSymbol($name, ReflectionContext::SYMBOL_INTERFACE); | |
$this->context->pushParentClass($this->currentClass, $name); | |
} | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
protected function enterPublicMethodNode(\PHPParser_Node_Stmt_ClassMethod $node) | |
{ | |
$this->context->addMethodToClass($this->currentClass, $node->name); | |
} | |
/** | |
* Compiling the pass : resolving symbols in the context | |
*/ | |
public function afterTraverse(array $dummy) | |
{ | |
$this->context->resolveSymbol(); | |
} | |
protected function enterTraitNode(\PHPParser_Node_Stmt_Trait $node) | |
{ | |
$this->context->initSymbol($this->currentClass, ReflectionContext::SYMBOL_TRAIT); | |
} | |
protected function importSignatureTrait(\PHPParser_Node_Stmt_TraitUse $node) | |
{ | |
// @todo do not forget aliases | |
foreach ($node->traits as $import) { | |
$name = (string) $this->resolveClassName($import); | |
$this->context->initSymbol($name, ReflectionContext::SYMBOL_TRAIT); | |
$this->context->pushUseTrait($this->currentClass, $name); | |
} | |
} | |
} |