Skip to content

Commit 63c0c96

Browse files
committed
feat(enum-collector): improve extensibility of EnumCollector
1 parent b4c233c commit 63c0c96

File tree

1 file changed

+26
-7
lines changed

1 file changed

+26
-7
lines changed

src/Collectors/EnumCollector.php

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,12 @@ class EnumCollector extends DefaultCollector
1212
{
1313
public function getTransformedType(ReflectionClass $class): ?TransformedType
1414
{
15-
$transformers = array_map('get_class', $this->config->getTransformers());
16-
17-
if (! \in_array(EnumTransformer::class, $transformers, true)) {
15+
if (!$this->shouldCollect($class)) {
1816
return null;
1917
}
2018

2119
$reflector = ClassTypeReflector::create($class);
2220

23-
if (! $reflector->getReflectionClass()->implementsInterface(BackedEnum::class)) {
24-
return null;
25-
}
26-
2721
$transformedType = $reflector->getType()
2822
? $this->resolveAlreadyTransformedType($reflector)
2923
: $this->resolveTypeViaTransformer($reflector);
@@ -35,4 +29,29 @@ public function getTransformedType(ReflectionClass $class): ?TransformedType
3529

3630
return $transformedType;
3731
}
32+
33+
protected function shouldCollect(ReflectionClass $class): bool
34+
{
35+
$transformers = array_map('get_class', $this->config->getTransformers());
36+
37+
$hasEnumTransformer = \count(
38+
array_filter($transformers, function (string $transformer) {
39+
if ($transformer === EnumTransformer::class) {
40+
return true;
41+
}
42+
43+
return is_subclass_of($transformer, EnumTransformer::class);
44+
}),
45+
) > 0;
46+
47+
if (!$hasEnumTransformer) {
48+
return false;
49+
}
50+
51+
if (!$class->implementsInterface(BackedEnum::class)) {
52+
return false;
53+
}
54+
55+
return true;
56+
}
3857
}

0 commit comments

Comments
 (0)