Analysis\Centrality.php 2

Type Line Description
51 filtering only non-zero value
62 only the order is interesting, I'm not Google

Analysis\CouplingMaker.php 6

Type Line Description
31 we search for methods declared in interfaces
35 scan for all parameters
38 we find a param, we scan for type hint
41 we find a typed parameter with a class : evil
42 we add the shortcut path (skip the parameter, not relevant)
50 I love this ^o^

Analysis\Cycle.php 1

Type Line Description
26 filter small cycle

Analysis\HiddenCoupling.php 3

Type Line Description
56 en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm
73 not found => hidden coupling :
74 source is impl and target is method

Analysis\LiskovSearch.php 7

Type Line Description
29 for each class
32 we have a method first declared in a class
33 we search for calls to that method
40 we search for the owning class of that impl
44 we found the owning class vertex of $impl
45 add edges to reduced graph
55 arf

Analysis\Strategy\ByCalling.php 3

Type Line Description
33 checking if the path go through a call before finding a class
38 since I build an arborescence on class
39 vertices, I stop on the first encountered class

Analysis\Strategy\ByConnection.php 2

Type Line Description
32 since I build an arborescence on class
33 vertices, I stop on the first encountered class

Analysis\Strategy\ByImplemented.php 3

Type Line Description
33 checking if the path go through on implementation
44 since I build an arborescence on class
45 vertices, I stop on the first encountered class

Command\TypeHintConfig.php 1

Type Line Description
31 github.com/Trismegiste/Mondrian\n";

Config\Helper.php 5

Type Line Description
32 load
34 all this stuff is not really necessary but this component is kewl
35 and I want to use it.
36 A better configuration handling => better programing
42 validates

Graph\Algorithm.php 1

Type Line Description
TODO 22 Make it abstract and use mockup to test it by Hell !

Graph\Digraph.php 5

Type Line Description
43 if the vetex is already in the the adjacencies list, there is no
44 need to add it.
46 if it is not found, we add it (with empty edge list)
65 if there is not already a directed edge between those two vertices
66 we drop the stacking

Graph\PowerIteration.php 7

Type Line Description
17 en.wikipedia.org/wiki/Power_iteration
28 en.wikipedia.org/wiki/Eigenvector_centrality#Eigenvector_centrality
52 result = M . approx
59 very suspicious
60 what if we invert $v and $succ, isn't the reversed digraph ?
63 calc the norm
71 normalize

Graph\ReversedDigraph.php 2

Type Line Description
25 for isolated vertex :
27 we reverse each edge :

Graph\Tarjan.php 6

Type Line Description
29 en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm
32 code.google.com/p/jbpt/source/browse/trunk/jbpt-core/src/main/java/org/jbpt/algo/graph/StronglyConnectedComponents.java
58 Consider successors of v
61 Successor w has not yet been visited; recurse on it
65 Successor w is in stack S and hence in the current SCC
69 If v is a root node, pop the stack and generate an SCC

Plugin\About.php 2

Type Line Description
29 trismegiste.github.io/Mondrian/';
63 www.graphviz.org to know more

Refactor\ContractorBuilder.php 3

Type Line Description
22 finds which class must be refactored (and add inheritance)
24 replaces the parameters types with the interface
26 creates the new interface file

Transform\Format\Graphviz.php 3

Type Line Description
29 add vertices
34 add edges
38 add cluster

Transform\Format\Svg.php 4

Type Line Description
19 for all platforms
30 stdin is a pipe
31 stdout is a pipe
32 stderr is also a pipe

Transform\Format\template-html.php 2

Type Line Description
51 Per-type markers, as they don't inherit styles.
91 Use elliptical arc path segments to doubly-encode directionality.

Transform\ReflectionContext.php 14

Type Line Description
78 default declarer :
86 higher parent ?
100 @todo recursion for use trait in trait
102 @todo for trait, we need a recursion
105 in fact this all method is a recursion with a getImportedMethod()
107 @todo alias ! Because of Alias, a trait does not own its
108 declaration. An existing trait in a class does not give
109 you any information about its contract since the class
110 could rename each trait's method
135 higher parent ?
155 this is a security since I'm changing the API
234 class $classname is using the trait $fqcn, now
235 is the method first declared in this class ?
237 ok we can add $classname to the returned list

Transform\Vertex\MethodVertex.php 3

Type Line Description
17 I didn't add the classname for 2 reasons : much clearer
18 and since there can be false positive on calls with same
19 name, adding the name can be more confusing

Transform\Vertex\TraitVertex.php 1

Type Line Description
19 because traits are in he same place as rainbow and unicorn : it's magic so: pentagon & pink

Visitor\EdgeCollector.php 45

Type Line Description
29 since we only track the public method, we check we are in :
48 edge for use trait
114 managing params of the signature :
116 adding edge from signature to param :
119 now the type of the param :
122 there is a type, we add a link to the type, if it is found
125 we add the edge
143 who is embedding the impl ?
149 in any case, we link the implementation to the params
151 adding edge from signature to param :
153 it is possible to not find the param because the signature
154 is external to the source code :
179 search for the declaring class of this method
182 if current class == declaring class, we add the edge
190 search for the declaring class of this method
193 if current class == declaring class, we add the edge
197 if not abstract, the implementation depends on the class.
198 For odd reason, a method in an interface is not abstract
199 that's why, there is a double check
207 edge between impl and trait :
213 edges between impl towards param (with typed param)
215 adding edge from implementation to param :
218 now the type of the param :
221 there is a type, we add a link to the type, if it is found
224 we add the edge
230 edge between class vertex which using the trait and copy-pasted methods :
233 we link the class and the signature
237 and copypasted signature to unique parameter
253 implements
269 extends
275 implements
318 skipping $this :
320 nothing to call
323 checking if the called is a method param
333 is it a typed param ?
336 we check if it is an outer class or not : is it known ?
345 can't see shit captain
361 skipping some obvious calls :
363 searching a candidate for $called::$method
364 I think there is a chain of responsibility beneath that :
367 fallback : link to every methods with the same name :
371 store the fallback for futher report
378 fallback or not, we exclude calls from annotations
421 it's possible to not find a trait if it is from an external library for example
422 or could be dead code too

Visitor\FqcnHelper.php 6

Type Line Description
36 if the visitor is used without PhpFile nodes
48 resetting the tracking of namespace and alias if we enter in a new file
80 don't resolve special class names
85 fully qualified names are already resolved
90 resolve aliases (for non-relative names)
93 if no alias exists prepend current namespace

Visitor\InterfaceExtractor.php 3

Type Line Description
19 a list of PhpFile
20 a temporary stack of methods for the currently new interface
101 I filter only good relevant methods (no __construct, __clone, __invoke ...)

Visitor\NewInstanceRefactor.php 4

Type Line Description
56 generate
122 to prevent cloning in Traverser (workaround) :
139 only refactor a method if it contains more than 1 statements (would be pointless otherwise, IMO)
159 @todo creating a new protected factory for a trait makes sense

Visitor\PublicCollector.php 1

Type Line Description
131 if there are annotations, we add them to the node

Visitor\SymbolMap.php 4

Type Line Description
52 extends
58 implements
72 extends
103 @todo do not forget aliases

Visitor\VertexCollector.php 10

Type Line Description
59 create implemenation node
60 if not abstract we add the vertex for the implementation
65 push param for implementation
71 copy paste this signature in every class which use this current trait
72 Anyway we check if there is no other parent which declaring first this method
75 we copy-paste the signature declaration in the class which using the current trait
87 if this class is declaring the method, we create a vertex for this signature
93 if not abstract we add the vertex for the implementation
101 if this interface is declaring the method, we create a vertex for this signature
123 now param