|
9 | 9 | use PHPStan\Rules\Rule; |
10 | 10 | use PHPStan\Rules\RuleErrorBuilder; |
11 | 11 | use PHPStan\Type\Constant\ConstantBooleanType; |
12 | | -use PHPStan\Type\Enum\EnumCaseObjectType; |
13 | 12 | use PHPStan\Type\NeverType; |
14 | 13 | use PHPStan\Type\ObjectType; |
15 | | -use PHPStan\Type\SubtractableType; |
16 | 14 | use PHPStan\Type\TypeCombinator; |
17 | | -use PHPStan\Type\TypeUtils; |
18 | | -use PHPStan\Type\TypeWithClassName; |
19 | 15 | use PHPStan\Type\UnionType; |
20 | 16 | use PHPStan\Type\VerbosityLevel; |
21 | 17 | use UnhandledMatchError; |
22 | | -use function array_keys; |
23 | 18 | use function array_map; |
24 | | -use function array_values; |
25 | 19 | use function count; |
26 | 20 | use function sprintf; |
27 | 21 |
|
@@ -92,44 +86,13 @@ public function processNode(Node $node, Scope $scope): array |
92 | 86 |
|
93 | 87 | if (!$hasDefault && !$nextArmIsDead) { |
94 | 88 | $remainingType = $node->getEndScope()->getType($matchCondition); |
95 | | - if ($remainingType instanceof TypeWithClassName && $remainingType instanceof SubtractableType) { |
96 | | - $subtractedType = $remainingType->getSubtractedType(); |
97 | | - if ($subtractedType !== null && $remainingType->getClassReflection() !== null) { |
98 | | - $classReflection = $remainingType->getClassReflection(); |
99 | | - if ($classReflection->isEnum()) { |
100 | | - $cases = []; |
101 | | - foreach (array_keys($classReflection->getEnumCases()) as $name) { |
102 | | - $cases[$name] = new EnumCaseObjectType($classReflection->getName(), $name); |
103 | | - } |
104 | | - |
105 | | - $subtractedTypes = TypeUtils::flattenTypes($subtractedType); |
106 | | - $set = true; |
107 | | - foreach ($subtractedTypes as $subType) { |
108 | | - if (!$subType instanceof EnumCaseObjectType) { |
109 | | - $set = false; |
110 | | - break; |
111 | | - } |
112 | | - |
113 | | - if ($subType->getClassName() !== $classReflection->getName()) { |
114 | | - $set = false; |
115 | | - break; |
116 | | - } |
117 | | - |
118 | | - unset($cases[$subType->getEnumCaseName()]); |
119 | | - } |
120 | | - |
121 | | - $cases = array_values($cases); |
122 | | - $casesCount = count($cases); |
123 | | - if ($set) { |
124 | | - if ($casesCount > 1) { |
125 | | - $remainingType = new UnionType($cases); |
126 | | - } |
127 | | - if ($casesCount === 1) { |
128 | | - $remainingType = $cases[0]; |
129 | | - } |
130 | | - } |
131 | | - } |
132 | | - } |
| 89 | + $cases = $remainingType->getEnumCases(); |
| 90 | + $casesCount = count($cases); |
| 91 | + if ($casesCount > 1) { |
| 92 | + $remainingType = new UnionType($cases); |
| 93 | + } |
| 94 | + if ($casesCount === 1) { |
| 95 | + $remainingType = $cases[0]; |
133 | 96 | } |
134 | 97 | if ( |
135 | 98 | !$remainingType instanceof NeverType |
|
0 commit comments