@@ -44,47 +44,95 @@ public function build(Filter $filter, FileAnalyser $analyser): array
4444 $ reverseLookup = [];
4545
4646 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 ());
5450 }
5551
56- $ this ->process ($ classes , $ class ->namespacedName (), $ file , $ class ->startLine (), $ class ->endLine ());
52+ $ this ->process ($ traits , $ trait ->namespacedName (), $ file , $ trait ->startLine (), $ trait ->endLine ());
5753
58- foreach ($ class ->methods () as $ method ) {
59- $ methodName = $ class ->namespacedName () . ':: ' . $ method ->name ();
54+ foreach ($ trait ->methods () as $ method ) {
55+ $ methodName = $ trait ->namespacedName () . ':: ' . $ method ->name ();
6056
6157 $ this ->process ($ methods , $ methodName , $ file , $ method ->startLine (), $ method ->endLine ());
6258
6359 foreach (range ($ method ->startLine (), $ method ->endLine ()) as $ line ) {
6460 $ reverseLookup [$ file . ': ' . $ line ] = $ methodName ;
6561 }
6662 }
67-
68- $ classesThatExtendClass [$ class ->namespacedName ()] = [];
69- $ classDetails [] = $ class ;
7063 }
64+ }
7165
66+ foreach ($ filter ->files () as $ file ) {
7267 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+ );
7587 }
88+ }
89+ }
7690
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+ }
7895
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 ();
81126
82127 $ this ->process ($ methods , $ methodName , $ file , $ method ->startLine (), $ method ->endLine ());
83128
84129 foreach (range ($ method ->startLine (), $ method ->endLine ()) as $ line ) {
85130 $ reverseLookup [$ file . ': ' . $ line ] = $ methodName ;
86131 }
87132 }
133+
134+ $ classesThatExtendClass [$ class ->namespacedName ()] = [];
135+ $ classDetails [] = $ class ;
88136 }
89137
90138 foreach ($ analyser ->functionsIn ($ file ) as $ function ) {
0 commit comments