@@ -71,20 +71,7 @@ public function build(Filter $filter, FileAnalyser $analyser): array
7171 continue ;
7272 }
7373
74- $ file = array_keys ($ traits [$ traitName ])[0 ];
75-
76- if (!isset ($ traits [$ trait ->namespacedName ()][$ file ])) {
77- $ traits [$ trait ->namespacedName ()][$ file ] = $ traits [$ traitName ][$ file ];
78-
79- continue ;
80- }
81-
82- $ traits [$ trait ->namespacedName ()][$ file ] = array_unique (
83- array_merge (
84- $ traits [$ trait ->namespacedName ()][$ file ],
85- $ traits [$ traitName ][$ file ],
86- ),
87- );
74+ $ this ->mergeLines ($ trait ->namespacedName (), $ traits [$ traitName ], $ traits );
8875 }
8976 }
9077 }
@@ -108,20 +95,7 @@ public function build(Filter $filter, FileAnalyser $analyser): array
10895 continue ;
10996 }
11097
111- foreach ($ traits [$ traitName ] as $ traitFile => $ lines ) {
112- if (!isset ($ classes [$ class ->namespacedName ()][$ traitFile ])) {
113- $ classes [$ class ->namespacedName ()][$ traitFile ] = $ lines ;
114-
115- continue ;
116- }
117-
118- $ classes [$ class ->namespacedName ()][$ traitFile ] = array_unique (
119- array_merge (
120- $ classes [$ class ->namespacedName ()][$ traitFile ],
121- $ lines ,
122- ),
123- );
124- }
98+ $ this ->mergeLines ($ class ->namespacedName (), $ traits [$ traitName ], $ classes );
12599 }
126100
127101 $ this ->processMethods ($ class , $ file , $ methods , $ reverseLookup );
@@ -159,28 +133,7 @@ public function build(Filter $filter, FileAnalyser $analyser): array
159133 }
160134
161135 foreach ($ this ->parentClasses ($ classDetails , $ class ) as $ parentClass ) {
162- // in big inheritance trees we might handle a lot of data.
163- // this inner loop needs to prevent unnecessary work whenever possible
164- foreach ($ classes [$ parentClass ->namespacedName ()] as $ file => $ lines ) {
165- if (!isset ($ classes [$ class ->namespacedName ()][$ file ])) {
166- $ classes [$ class ->namespacedName ()][$ file ] = $ lines ;
167-
168- continue ;
169- }
170-
171- if (
172- $ classes [$ class ->namespacedName ()][$ file ] === $ lines
173- ) {
174- continue ;
175- }
176-
177- $ classes [$ class ->namespacedName ()][$ file ] = array_unique (
178- array_merge (
179- $ classes [$ class ->namespacedName ()][$ file ],
180- $ lines ,
181- ),
182- );
183- }
136+ $ this ->mergeLines ($ class ->namespacedName (), $ classes [$ parentClass ->namespacedName ()], $ classes );
184137
185138 if (isset ($ classesThatExtendClass [$ parentClass ->namespacedName ()])) {
186139 $ this ->process ($ classesThatExtendClass , $ parentClass ->namespacedName (), $ class ->file (), $ class ->startLine (), $ class ->endLine ());
@@ -216,6 +169,33 @@ public function build(Filter $filter, FileAnalyser $analyser): array
216169 ];
217170 }
218171
172+ private function mergeLines (string $ targetClass , array $ sourceData , array &$ data ): void
173+ {
174+ // in big inheritance trees we might handle a lot of data.
175+ // this loop needs to prevent unnecessary work whenever possible.
176+
177+ foreach ($ sourceData as $ file => $ lines ) {
178+ if (!isset ($ data [$ targetClass ][$ file ])) {
179+ $ data [$ targetClass ][$ file ] = $ lines ;
180+
181+ continue ;
182+ }
183+
184+ if (
185+ $ data [$ targetClass ][$ file ] === $ lines
186+ ) {
187+ continue ;
188+ }
189+
190+ $ data [$ targetClass ][$ file ] = array_unique (
191+ array_merge (
192+ $ data [$ targetClass ][$ file ],
193+ $ lines ,
194+ ),
195+ );
196+ }
197+ }
198+
219199 private function processMethods (Class_ |Trait_ $ classOrTrait , string $ file , array &$ methods , array &$ reverseLookup ): void
220200 {
221201 foreach ($ classOrTrait ->methods () as $ method ) {
0 commit comments