Skip to content

Commit f8bf272

Browse files
ruudknicolas-grekas
authored andcommitted
[Config] Fix support for attributes on class constants and enum cases
1 parent 2a32d77 commit f8bf272

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

Resource/ReflectionClassResource.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,14 @@ private function generateSignature(\ReflectionClass $class): iterable
135135
yield print_r($class->getConstants(), true);
136136
}
137137

138+
foreach ($class->getReflectionConstants() as $constant) {
139+
foreach ($constant->getAttributes() as $a) {
140+
$attributes[] = [$a->getName(), (string) $a];
141+
}
142+
yield $constant->name.print_r($attributes, true);
143+
$attributes = [];
144+
}
145+
138146
if (!$class->isInterface()) {
139147
$defaults = $class->getDefaultProperties();
140148

Tests/Resource/ReflectionClassResourceTest.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,30 @@ public function testIgnoresObjectsInSignature()
216216
TestServiceWithStaticProperty::$initializedObject = new TestServiceWithStaticProperty();
217217
$this->assertTrue($res->isFresh(0));
218218
}
219+
220+
public function testEnum()
221+
{
222+
$res = new ReflectionClassResource($enum = new \ReflectionClass(SomeEnum::class));
223+
$r = new \ReflectionClass(ReflectionClassResource::class);
224+
$generateSignature = $r->getMethod('generateSignature')->getClosure($res);
225+
$actual = implode("\n", iterator_to_array($generateSignature($enum)));
226+
$this->assertStringContainsString('UnitEnum', $actual);
227+
$this->assertStringContainsString('TestAttribute', $actual);
228+
$this->assertStringContainsString('Beta', $actual);
229+
}
230+
231+
public function testBackedEnum()
232+
{
233+
$res = new ReflectionClassResource($enum = new \ReflectionClass(SomeBackedEnum::class));
234+
$r = new \ReflectionClass(ReflectionClassResource::class);
235+
$generateSignature = $r->getMethod('generateSignature')->getClosure($res);
236+
$actual = implode("\n", iterator_to_array($generateSignature($enum)));
237+
$this->assertStringContainsString('UnitEnum', $actual);
238+
$this->assertStringContainsString('BackedEnum', $actual);
239+
$this->assertStringContainsString('TestAttribute', $actual);
240+
$this->assertStringContainsString('Beta', $actual);
241+
$this->assertStringContainsString('beta', $actual);
242+
}
219243
}
220244

221245
interface DummyInterface
@@ -262,3 +286,19 @@ class TestServiceWithStaticProperty
262286
{
263287
public static object $initializedObject;
264288
}
289+
290+
enum SomeEnum
291+
{
292+
case Alpha;
293+
294+
#[TestAttribute]
295+
case Beta;
296+
}
297+
298+
enum SomeBackedEnum: string
299+
{
300+
case Alpha = 'alpha';
301+
302+
#[TestAttribute]
303+
case Beta = 'beta';
304+
}

0 commit comments

Comments
 (0)