Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
18 / 18
ByImplemented
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
8
100.00% covered (success)
100.00%
18 / 18
 __construct(Graph $g)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 collapseEdge(Vertex $src, Vertex $dst, array $path)
100.00% covered (success)
100.00%
1 / 1
7
100.00% covered (success)
100.00%
16 / 16
<?php
/*
 * Mondrian
 */
namespace Trismegiste\Mondrian\Analysis\Strategy;
use Trismegiste\Mondrian\Graph\Vertex;
use Trismegiste\Mondrian\Graph\Edge;
use Trismegiste\Mondrian\Graph\Graph;
use Trismegiste\Mondrian\Transform\Vertex\ImplVertex;
use Trismegiste\Mondrian\Transform\Vertex\MethodVertex;
use Trismegiste\Mondrian\Transform\Vertex\ClassVertex;
/**
 * ByImplemented selects path between classes if
 * there is a use in a implementation. It stops at the first class
 * because connect property is transitive.
 */
class ByImplemented implements Search
{
    protected $reducedGraph;
    public function __construct(Graph $g)
    {
        $this->reducedGraph = $g;
    }
    public function collapseEdge(Vertex $src, Vertex $dst, array $path)
    {
        // checking if the path go through on implementation
        $implFound = false;
        foreach ($path as $step) {
            if ($step->getTarget() instanceof ClassVertex) {
                break;
            }
            if ($step->getTarget() instanceof ImplVertex) {
                $implFound = true;
                break;
            }
        }
        // since I build an arborescence on class
        // vertices, I stop on the first encountered class
        if ($implFound) {
            foreach ($path as $step) {
                if ($step->getTarget() instanceof ClassVertex) {
                    $this->reducedGraph->addEdge($src, $step->getTarget());
                    break;
                }
            }
        }
    }
}