Navigation Menu

Skip to content

Commit

Permalink
starting refactor edge collector
Browse files Browse the repository at this point in the history
  • Loading branch information
Trismegiste committed Sep 15, 2014
1 parent 29a7eb7 commit 550a992
Show file tree
Hide file tree
Showing 9 changed files with 715 additions and 0 deletions.
27 changes: 27 additions & 0 deletions src/Visitor/Edge/ClassLevel.php
@@ -0,0 +1,27 @@
<?php

/*
* Mondrian
*/

namespace Trismegiste\Mondrian\Visitor\Edge;

use PhpParser\Node\Stmt;

/**
* ClassLevel is ...
*/
class ClassLevel extends ObjectLevelHelper
{

public function enter(\PhpParser\Node $node)
{

}

public function getName()
{
return 'class';
}

}
33 changes: 33 additions & 0 deletions src/Visitor/Edge/Collector.php
@@ -0,0 +1,33 @@
<?php

/*
* Mondrian
*/

namespace Trismegiste\Mondrian\Visitor\Edge;

use Trismegiste\Mondrian\Visitor\VisitorGateway;
use Trismegiste\Mondrian\Transform\ReflectionContext;
use Trismegiste\Mondrian\Transform\GraphContext;
use Trismegiste\Mondrian\Graph\Graph;

/**
* Collector is ...
*/
class Collector extends VisitorGateway
{

public function __construct(ReflectionContext $ref, GraphContext $grf, Graph $g)
{
$visitor = [
new \Trismegiste\Mondrian\Visitor\State\PackageLevel(),
new FileLevel(),
new ClassLevel(),
new InterfaceLevel(),
new TraitLevel()
];

parent::__construct($visitor, $ref, $grf, $g);
}

}
55 changes: 55 additions & 0 deletions src/Visitor/Edge/FileLevel.php
@@ -0,0 +1,55 @@
<?php

/*
* Mondrian
*/

namespace Trismegiste\Mondrian\Visitor\Edge;

use Trismegiste\Mondrian\Visitor\State\FileLevelTemplate;
use PhpParser\Node\Stmt;

/**
* FileLevel is ...
*/
class FileLevel extends FileLevelTemplate
{

protected function enterClassNode(Stmt\Class_ $node)
{
$fqcn = $this->getNamespacedName($node);
$src = $this->findVertex('class', $fqcn);

// extends
if (!is_null($node->extends)) {
if (null !== $dst = $this->findVertex('class', (string) $this->resolveClassName($node->extends))) {
$this->getGraph()->addEdge($src, $dst);
}
}
// implements
foreach ($node->implements as $interf) {
if (null !== $dst = $this->findVertex('interface', (string) $this->resolveClassName($interf))) {
$this->getGraph()->addEdge($src, $dst);
}
}
}

protected function enterInterfaceNode(Stmt\Interface_ $node)
{
$fqcn = $this->getNamespacedName($node);
$src = $this->findVertex('interface', $fqcn);

// implements
foreach ($node->extends as $interf) {
if (null !== $dst = $this->findVertex('interface', (string) $this->resolveClassName($interf))) {
$this->getGraph()->addEdge($src, $dst);
}
}
}

protected function enterTraitNode(Stmt\Trait_ $node)
{

}

}
27 changes: 27 additions & 0 deletions src/Visitor/Edge/InterfaceLevel.php
@@ -0,0 +1,27 @@
<?php

/*
* Mondrian
*/

namespace Trismegiste\Mondrian\Visitor\Edge;

use PhpParser\Node\Stmt;

/**
* InterfaceLevel is ...
*/
class InterfaceLevel extends ObjectLevelHelper
{

public function enter(\PhpParser\Node $node)
{

}

public function getName()
{
return 'interface';
}

}
17 changes: 17 additions & 0 deletions src/Visitor/Edge/ObjectLevelHelper.php
@@ -0,0 +1,17 @@
<?php

/*
* Mondrian
*/

namespace Trismegiste\Mondrian\Visitor\Edge;

use Trismegiste\Mondrian\Visitor\State\AbstractObjectLevel;

/**
* ObjectLevelHelper is
*/
abstract class ObjectLevelHelper extends AbstractObjectLevel
{

}
27 changes: 27 additions & 0 deletions src/Visitor/Edge/TraitLevel.php
@@ -0,0 +1,27 @@
<?php

/*
* Mondrian
*/

namespace Trismegiste\Mondrian\Visitor\Edge;

use PhpParser\Node\Stmt;

/**
* TraitLevel is ...
*/
class TraitLevel extends ObjectLevelHelper
{

public function enter(\PhpParser\Node $node)
{

}

public function getName()
{
return 'trait';
}

}
5 changes: 5 additions & 0 deletions src/Visitor/State/AbstractState.php
Expand Up @@ -51,4 +51,9 @@ protected function getGraph()
return $this->context->getGraph();
}

protected function findVertex($type, $key)
{
return $this->context->getGraphContext()->findVertex($type, $key);
}

}
17 changes: 17 additions & 0 deletions src/Visitor/State/VisitorContext.php
Expand Up @@ -23,13 +23,30 @@ interface VisitorContext
*/
public function pushState($stateKey, Node $node);

/**
* @param string $stateKey
* @return Node
*/
public function getNodeFor($stateKey);

/**
* @param string $stateKey
* @return State
*/
public function getState($stateKey);

/**
* @return \Trismegiste\Mondrian\Transform\ReflectionContext
*/
public function getReflectionContext();

/**
* @return \Trismegiste\Mondrian\Transform\GraphContext
*/
public function getGraphContext();

/**
* @return \Trismegiste\Mondrian\Graph\Graph
*/
public function getGraph();
}

0 comments on commit 550a992

Please sign in to comment.