Skip to content

Commit 5c6f2c1

Browse files
staabmsebastianbergmann
authored andcommitted
Faster MapBuilder->build()
1 parent 60c24d2 commit 5c6f2c1

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

src/Target/MapBuilder.php

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
use function array_keys;
1313
use function array_merge;
14-
use function array_merge_recursive;
1514
use function array_slice;
1615
use function array_unique;
1716
use function count;
@@ -160,16 +159,28 @@ public function build(Filter $filter, FileAnalyser $analyser): array
160159
}
161160

162161
foreach ($this->parentClasses($classDetails, $class) as $parentClass) {
163-
$merged = array_merge_recursive(
164-
$classes[$class->namespacedName()],
165-
$classes[$parentClass->namespacedName()],
166-
);
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;
167167

168-
foreach ($merged as $mergedFile => $lines) {
169-
$merged[$mergedFile] = array_unique($lines);
170-
}
168+
continue;
169+
}
170+
171+
if (
172+
$classes[$class->namespacedName()][$file] === $lines
173+
) {
174+
continue;
175+
}
171176

172-
$classes[$class->namespacedName()] = $merged;
177+
$classes[$class->namespacedName()][$file] = array_unique(
178+
array_merge(
179+
$classes[$class->namespacedName()][$file],
180+
$lines,
181+
),
182+
);
183+
}
173184

174185
if (isset($classesThatExtendClass[$parentClass->namespacedName()])) {
175186
$this->process($classesThatExtendClass, $parentClass->namespacedName(), $class->file(), $class->startLine(), $class->endLine());

0 commit comments

Comments
 (0)