|
4 | 4 |
|
5 | 5 | namespace Roave\BetterReflection\SourceLocator\SourceStubber; |
6 | 6 |
|
| 7 | +use BackedEnum; |
7 | 8 | use LogicException; |
8 | 9 | use PhpParser\Builder\Class_; |
9 | 10 | use PhpParser\Builder\ClassConst; |
|
39 | 40 | use ReflectionUnionType as CoreReflectionUnionType; |
40 | 41 | use Roave\BetterReflection\Reflection\Annotation\AnnotationHelper; |
41 | 42 | use Roave\BetterReflection\Util\ClassExistenceChecker; |
| 43 | +use UnitEnum; |
42 | 44 |
|
43 | 45 | use function array_diff; |
44 | 46 | use function array_key_exists; |
@@ -285,6 +287,10 @@ private function addExtendsAndImplements(Class_|Interface_|Enum_ $classNode, Cor |
285 | 287 | } |
286 | 288 |
|
287 | 289 | foreach ($interfaces as $interfaceName) { |
| 290 | + if ($classReflection->isEnum() && in_array($interfaceName, [BackedEnum::class, UnitEnum::class], true)) { |
| 291 | + continue; |
| 292 | + } |
| 293 | + |
288 | 294 | $interfaceNode = new FullyQualified($interfaceName); |
289 | 295 |
|
290 | 296 | if ($classNode instanceof Interface_) { |
@@ -479,15 +485,27 @@ private function isMethodDeclaredInClass(CoreReflectionMethod $methodReflection, |
479 | 485 | return false; |
480 | 486 | } |
481 | 487 |
|
| 488 | + $methodName = $methodReflection->getName(); |
| 489 | + |
482 | 490 | /** @var array<string, string> $traitAliases */ |
483 | 491 | $traitAliases = $classReflection->getTraitAliases(); |
484 | 492 |
|
485 | | - if (array_key_exists($methodReflection->getName(), $traitAliases)) { |
| 493 | + if (array_key_exists($methodName, $traitAliases)) { |
486 | 494 | return false; |
487 | 495 | } |
488 | 496 |
|
489 | 497 | foreach ($classReflection->getTraits() as $trait) { |
490 | | - if ($trait->hasMethod($methodReflection->getName())) { |
| 498 | + if ($trait->hasMethod($methodName)) { |
| 499 | + return false; |
| 500 | + } |
| 501 | + } |
| 502 | + |
| 503 | + if ($classReflection instanceof CoreReflectionEnum) { |
| 504 | + if ($methodName === 'cases') { |
| 505 | + return false; |
| 506 | + } |
| 507 | + |
| 508 | + if ($classReflection->isBacked() && in_array($methodName, ['from', 'tryFrom'], true)) { |
491 | 509 | return false; |
492 | 510 | } |
493 | 511 | } |
|
0 commit comments