Skip to content

Commit 6e58db6

Browse files
committed
Refactor
de-duplicate logic and re-use fast path in more places
1 parent 6ee14bf commit 6e58db6

File tree

1 file changed

+30
-50
lines changed

1 file changed

+30
-50
lines changed

src/Target/MapBuilder.php

Lines changed: 30 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)