Skip to content

Commit 3a11805

Browse files
authored
Faster ObjectType->getEnumCases() type substraction
1 parent c6b961d commit 3a11805

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

src/Type/ObjectType.php

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,25 +1229,28 @@ public function getEnumCases(): array
12291229

12301230
$className = $classReflection->getName();
12311231

1232-
$cases = [];
1233-
foreach ($classReflection->getEnumCases() as $enumCase) {
1234-
$cases[] = new EnumCaseObjectType($className, $enumCase->getName(), $classReflection);
1235-
}
1236-
12371232
if ($this->subtractedType !== null) {
1238-
$subtracedEnumCases = $this->subtractedType->getEnumCases();
1239-
foreach ($cases as $i => $case) {
1240-
$caseName = $case->getEnumCaseName();
1241-
foreach ($subtracedEnumCases as $subtracedCase) {
1242-
if ($caseName === $subtracedCase->getEnumCaseName()) {
1243-
unset($cases[$i]);
1244-
continue 2;
1245-
}
1233+
$subtracedEnumCaseNames = [];
1234+
1235+
foreach ($this->subtractedType->getEnumCases() as $subtractedCase) {
1236+
$subtracedEnumCaseNames[$subtractedCase->getEnumCaseName()] = true;
1237+
}
1238+
1239+
$cases = [];
1240+
foreach ($classReflection->getEnumCases() as $enumCase) {
1241+
if (array_key_exists($enumCase->getName(), $subtracedEnumCaseNames)) {
1242+
continue;
12461243
}
1244+
$cases[] = new EnumCaseObjectType($className, $enumCase->getName(), $classReflection);
1245+
}
1246+
} else {
1247+
$cases = [];
1248+
foreach ($classReflection->getEnumCases() as $enumCase) {
1249+
$cases[] = new EnumCaseObjectType($className, $enumCase->getName(), $classReflection);
12471250
}
12481251
}
12491252

1250-
return self::$enumCases[$cacheKey] = array_values($cases);
1253+
return self::$enumCases[$cacheKey] = $cases;
12511254
}
12521255

12531256
public function isCallable(): TrinaryLogic

0 commit comments

Comments
 (0)