|
3 | 3 | namespace PHPStan\Rules\Classes; |
4 | 4 |
|
5 | 5 | use PhpParser\Node; |
| 6 | +use PhpParser\Node\Stmt\ClassConst; |
6 | 7 | use PhpParser\Node\Stmt\EnumCase; |
7 | 8 | use PHPStan\Analyser\Scope; |
8 | 9 | use PHPStan\Node\InClassNode; |
@@ -31,35 +32,30 @@ public function processNode(Node $node, Scope $scope): array |
31 | 32 |
|
32 | 33 | $errors = []; |
33 | 34 |
|
34 | | - $declaredClassConstants = []; |
35 | | - foreach ($node->getOriginalNode()->getConstants() as $constDecl) { |
36 | | - foreach ($constDecl->consts as $const) { |
37 | | - if (array_key_exists($const->name->name, $declaredClassConstants)) { |
| 35 | + $declaredClassConstantsOrEnumCases = []; |
| 36 | + foreach ($node->getOriginalNode()->stmts as $stmtNode) { |
| 37 | + if ($stmtNode instanceof EnumCase) { |
| 38 | + if (array_key_exists($stmtNode->name->name, $declaredClassConstantsOrEnumCases)) { |
38 | 39 | $errors[] = RuleErrorBuilder::message(sprintf( |
39 | | - 'Cannot redeclare constant %s::%s.', |
| 40 | + 'Cannot redeclare enum case %s::%s.', |
40 | 41 | $classReflection->getDisplayName(), |
41 | | - $const->name->name |
42 | | - ))->line($const->getLine())->nonIgnorable()->build(); |
| 42 | + $stmtNode->name->name |
| 43 | + ))->line($stmtNode->getLine())->nonIgnorable()->build(); |
43 | 44 | } else { |
44 | | - $declaredClassConstants[$const->name->name] = true; |
| 45 | + $declaredClassConstantsOrEnumCases[$stmtNode->name->name] = true; |
| 46 | + } |
| 47 | + } elseif ($stmtNode instanceof ClassConst) { |
| 48 | + foreach ($stmtNode->consts as $classConstNode) { |
| 49 | + if (array_key_exists($classConstNode->name->name, $declaredClassConstantsOrEnumCases)) { |
| 50 | + $errors[] = RuleErrorBuilder::message(sprintf( |
| 51 | + 'Cannot redeclare constant %s::%s.', |
| 52 | + $classReflection->getDisplayName(), |
| 53 | + $classConstNode->name->name |
| 54 | + ))->line($classConstNode->getLine())->nonIgnorable()->build(); |
| 55 | + } else { |
| 56 | + $declaredClassConstantsOrEnumCases[$classConstNode->name->name] = true; |
| 57 | + } |
45 | 58 | } |
46 | | - } |
47 | | - } |
48 | | - |
49 | | - $declaredEnumCases = []; |
50 | | - foreach ($node->getOriginalNode()->stmts as $stmtNode) { |
51 | | - if (!$stmtNode instanceof EnumCase) { |
52 | | - continue; |
53 | | - } |
54 | | - |
55 | | - if (array_key_exists($stmtNode->name->name, $declaredEnumCases)) { |
56 | | - $errors[] = RuleErrorBuilder::message(sprintf( |
57 | | - 'Cannot redeclare enum case %s::%s.', |
58 | | - $classReflection->getDisplayName(), |
59 | | - $stmtNode->name->name |
60 | | - ))->line($stmtNode->getLine())->nonIgnorable()->build(); |
61 | | - } else { |
62 | | - $declaredEnumCases[$stmtNode->name->name] = true; |
63 | 59 | } |
64 | 60 | } |
65 | 61 |
|
|
0 commit comments