@@ -1229,25 +1229,28 @@ public function getEnumCases(): array
1229
1229
1230
1230
$ className = $ classReflection ->getName ();
1231
1231
1232
- $ cases = [];
1233
- foreach ($ classReflection ->getEnumCases () as $ enumCase ) {
1234
- $ cases [] = new EnumCaseObjectType ($ className , $ enumCase ->getName (), $ classReflection );
1235
- }
1236
-
1237
1232
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 ;
1246
1243
}
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 );
1247
1250
}
1248
1251
}
1249
1252
1250
- return self ::$ enumCases [$ cacheKey ] = array_values ( $ cases) ;
1253
+ return self ::$ enumCases [$ cacheKey ] = $ cases ;
1251
1254
}
1252
1255
1253
1256
public function isCallable (): TrinaryLogic
0 commit comments