16
16
17
17
class CasesChanged implements ClassBased
18
18
{
19
- public function __invoke (ReflectionClass $ fromClass , ReflectionClass $ toEnum ): Changes
19
+ public function __invoke (ReflectionClass $ fromClass , ReflectionClass $ toClass ): Changes
20
20
{
21
- if (! $ fromClass instanceof ReflectionEnum) {
21
+ $ fromEnumName = $ fromClass ->getName ();
22
+ $ fromKind = $ this ->kindOf ($ fromClass );
23
+ $ toKind = $ this ->kindOf ($ toClass );
24
+
25
+ if (! $ fromClass instanceof ReflectionEnum && ! $ toClass instanceof ReflectionEnum) {
22
26
return Changes::empty ();
23
27
}
24
28
25
- if (! $ toEnum instanceof ReflectionEnum) {
26
- return Changes::empty ( );
29
+ if (! $ fromClass instanceof ReflectionEnum && $ toClass instanceof ReflectionEnum) {
30
+ return Changes::fromList (Change:: changed ( " $ fromKind " . $ fromEnumName . " became enum " ) );
27
31
}
28
32
29
- $ fromEnumName = $ fromClass ->getName ();
33
+ if ($ fromClass instanceof ReflectionEnum && ! $ toClass instanceof ReflectionEnum) {
34
+ return Changes::fromList (Change::changed ("enum " . $ fromEnumName . " became " . $ toKind ));
35
+ }
30
36
31
37
$ addedCases = array_filter (
32
- $ toEnum ->getCases (),
38
+ $ toClass ->getCases (),
33
39
static function (ReflectionEnumCase $ case ) use ($ fromClass ): bool {
34
40
if (self ::isInternalDocComment ($ case ->getDocComment ())) {
35
41
return false ;
@@ -42,17 +48,17 @@ static function (ReflectionEnumCase $case) use ($fromClass): bool {
42
48
43
49
$ removedCases = array_filter (
44
50
$ fromClass ->getCases (),
45
- static function (ReflectionEnumCase $ case ) use ($ toEnum ): bool {
51
+ static function (ReflectionEnumCase $ case ) use ($ toClass ): bool {
46
52
if (self ::isInternalDocComment ($ case ->getDocComment ())) {
47
53
return false ;
48
54
}
49
55
50
- return ! $ toEnum ->hasCase ($ case ->getName ());
56
+ return ! $ toClass ->hasCase ($ case ->getName ());
51
57
},
52
58
);
53
59
54
60
$ internalisedCases = array_filter (
55
- $ toEnum ->getCases (),
61
+ $ toClass ->getCases (),
56
62
static function (ReflectionEnumCase $ case ) use ($ fromClass ) {
57
63
if (! self ::isInternalDocComment ($ case ->getDocComment ())) {
58
64
return false ;
@@ -105,4 +111,22 @@ private static function isInternalDocComment(string|null $comment): bool
105
111
return $ comment !== null
106
112
&& Regex \matches ($ comment , '/\s+@internal\s+/ ' );
107
113
}
114
+
115
+ /** @psalm-return 'enum'|'interface'|'trait'|'class' */
116
+ private function kindOf (ReflectionClass $ reflectionClass ): string
117
+ {
118
+ if ($ reflectionClass ->isEnum ()) {
119
+ return 'enum ' ;
120
+ }
121
+
122
+ if ($ reflectionClass ->isInterface ()) {
123
+ return 'interface ' ;
124
+ }
125
+
126
+ if ($ reflectionClass ->isTrait ()) {
127
+ return 'trait ' ;
128
+ }
129
+
130
+ return 'class ' ;
131
+ }
108
132
}
0 commit comments