@@ -44,47 +44,95 @@ public function build(Filter $filter, FileAnalyser $analyser): array
44
44
$ reverseLookup = [];
45
45
46
46
foreach ($ filter ->files () as $ file ) {
47
- foreach ($ analyser ->interfacesIn ($ file ) as $ interface ) {
48
- $ classesThatImplementInterface [$ interface ->namespacedName ()] = [];
49
- }
50
-
51
- foreach ($ analyser ->classesIn ($ file ) as $ class ) {
52
- if ($ class ->isNamespaced ()) {
53
- $ this ->process ($ namespaces , $ class ->namespace (), $ file , $ class ->startLine (), $ class ->endLine ());
47
+ foreach ($ analyser ->traitsIn ($ file ) as $ trait ) {
48
+ if ($ trait ->isNamespaced ()) {
49
+ $ this ->process ($ namespaces , $ trait ->namespace (), $ file , $ trait ->startLine (), $ trait ->endLine ());
54
50
}
55
51
56
- $ this ->process ($ classes , $ class ->namespacedName (), $ file , $ class ->startLine (), $ class ->endLine ());
52
+ $ this ->process ($ traits , $ trait ->namespacedName (), $ file , $ trait ->startLine (), $ trait ->endLine ());
57
53
58
- foreach ($ class ->methods () as $ method ) {
59
- $ methodName = $ class ->namespacedName () . ':: ' . $ method ->name ();
54
+ foreach ($ trait ->methods () as $ method ) {
55
+ $ methodName = $ trait ->namespacedName () . ':: ' . $ method ->name ();
60
56
61
57
$ this ->process ($ methods , $ methodName , $ file , $ method ->startLine (), $ method ->endLine ());
62
58
63
59
foreach (range ($ method ->startLine (), $ method ->endLine ()) as $ line ) {
64
60
$ reverseLookup [$ file . ': ' . $ line ] = $ methodName ;
65
61
}
66
62
}
67
-
68
- $ classesThatExtendClass [$ class ->namespacedName ()] = [];
69
- $ classDetails [] = $ class ;
70
63
}
64
+ }
71
65
66
+ foreach ($ filter ->files () as $ file ) {
72
67
foreach ($ analyser ->traitsIn ($ file ) as $ trait ) {
73
- if ($ trait ->isNamespaced ()) {
74
- $ this ->process ($ namespaces , $ trait ->namespace (), $ file , $ trait ->startLine (), $ trait ->endLine ());
68
+ foreach ($ trait ->traits () as $ traitName ) {
69
+ if (!isset ($ traits [$ traitName ])) {
70
+ continue ;
71
+ }
72
+
73
+ $ file = array_keys ($ traits [$ traitName ])[0 ];
74
+
75
+ if (!isset ($ traits [$ trait ->namespacedName ()][$ file ])) {
76
+ $ traits [$ trait ->namespacedName ()][$ file ] = $ traits [$ traitName ][$ file ];
77
+
78
+ continue ;
79
+ }
80
+
81
+ $ traits [$ trait ->namespacedName ()][$ file ] = array_unique (
82
+ array_merge (
83
+ $ traits [$ trait ->namespacedName ()][$ file ],
84
+ $ traits [$ traitName ][$ file ],
85
+ ),
86
+ );
75
87
}
88
+ }
89
+ }
76
90
77
- $ this ->process ($ traits , $ trait ->namespacedName (), $ file , $ trait ->startLine (), $ trait ->endLine ());
91
+ foreach ($ filter ->files () as $ file ) {
92
+ foreach ($ analyser ->interfacesIn ($ file ) as $ interface ) {
93
+ $ classesThatImplementInterface [$ interface ->namespacedName ()] = [];
94
+ }
78
95
79
- foreach ($ trait ->methods () as $ method ) {
80
- $ methodName = $ trait ->namespacedName () . ':: ' . $ method ->name ();
96
+ foreach ($ analyser ->classesIn ($ file ) as $ class ) {
97
+ if ($ class ->isNamespaced ()) {
98
+ $ this ->process ($ namespaces , $ class ->namespace (), $ file , $ class ->startLine (), $ class ->endLine ());
99
+ }
100
+
101
+ $ this ->process ($ classes , $ class ->namespacedName (), $ file , $ class ->startLine (), $ class ->endLine ());
102
+
103
+ foreach ($ class ->traits () as $ traitName ) {
104
+ if (!isset ($ traits [$ traitName ])) {
105
+ continue ;
106
+ }
107
+
108
+ foreach ($ traits [$ traitName ] as $ file => $ lines ) {
109
+ if (!isset ($ classes [$ class ->namespacedName ()][$ file ])) {
110
+ $ classes [$ class ->namespacedName ()][$ file ] = $ lines ;
111
+
112
+ continue ;
113
+ }
114
+
115
+ $ classes [$ class ->namespacedName ()][$ file ] = array_unique (
116
+ array_merge (
117
+ $ classes [$ class ->namespacedName ()][$ file ],
118
+ $ lines ,
119
+ ),
120
+ );
121
+ }
122
+ }
123
+
124
+ foreach ($ class ->methods () as $ method ) {
125
+ $ methodName = $ class ->namespacedName () . ':: ' . $ method ->name ();
81
126
82
127
$ this ->process ($ methods , $ methodName , $ file , $ method ->startLine (), $ method ->endLine ());
83
128
84
129
foreach (range ($ method ->startLine (), $ method ->endLine ()) as $ line ) {
85
130
$ reverseLookup [$ file . ': ' . $ line ] = $ methodName ;
86
131
}
87
132
}
133
+
134
+ $ classesThatExtendClass [$ class ->namespacedName ()] = [];
135
+ $ classDetails [] = $ class ;
88
136
}
89
137
90
138
foreach ($ analyser ->functionsIn ($ file ) as $ function ) {
0 commit comments