|
24 | 24 |
|
25 | 25 | use PackageFactory\ComponentEngine\Module\ModuleId; |
26 | 26 | use PackageFactory\ComponentEngine\Parser\Ast\EnumDeclarationNode; |
27 | | -use PackageFactory\ComponentEngine\Parser\Ast\NumberLiteralNode; |
28 | | -use PackageFactory\ComponentEngine\Parser\Ast\StringLiteralNode; |
29 | | -use PackageFactory\ComponentEngine\TypeSystem\Resolver\NumberLiteral\NumberLiteralTypeResolver; |
30 | | -use PackageFactory\ComponentEngine\TypeSystem\Resolver\StringLiteral\StringLiteralTypeResolver; |
31 | 27 | use PackageFactory\ComponentEngine\TypeSystem\TypeInterface; |
32 | 28 |
|
33 | 29 | trait EnumTrait |
34 | 30 | { |
35 | 31 | public function __construct( |
36 | 32 | public readonly ?ModuleId $moduleId, |
37 | 33 | public readonly string $enumName, |
38 | | - private readonly array $membersWithType, |
| 34 | + private readonly array $memberNameHashMap, |
39 | 35 | ) { |
40 | 36 | } |
41 | 37 |
|
42 | 38 | public static function fromModuleIdAndDeclaration(ModuleId $moduleId, EnumDeclarationNode $enumDeclarationNode): self |
43 | 39 | { |
44 | | - $membersWithType = []; |
45 | | - |
| 40 | + $memberNameHashMap = []; |
46 | 41 | foreach ($enumDeclarationNode->memberDeclarations->items as $memberDeclarationNode) { |
47 | | - $membersWithType[$memberDeclarationNode->name] = match ($memberDeclarationNode->value |
48 | | - ? $memberDeclarationNode->value::class |
49 | | - : null |
50 | | - ) { |
51 | | - NumberLiteralNode::class => (new NumberLiteralTypeResolver()) |
52 | | - ->resolveTypeOf($memberDeclarationNode->value), |
53 | | - StringLiteralNode::class => (new StringLiteralTypeResolver()) |
54 | | - ->resolveTypeOf($memberDeclarationNode->value), |
55 | | - null => null |
56 | | - }; |
| 42 | + $memberNameHashMap[$memberDeclarationNode->name] = true; |
57 | 43 | } |
58 | 44 |
|
59 | 45 | return new self( |
60 | 46 | moduleId: $moduleId, |
61 | 47 | enumName: $enumDeclarationNode->enumName, |
62 | | - membersWithType: $membersWithType |
| 48 | + memberNameHashMap: $memberNameHashMap |
63 | 49 | ); |
64 | 50 | } |
65 | 51 |
|
66 | 52 | public function getMemberNames(): array |
67 | 53 | { |
68 | | - return array_keys($this->membersWithType); |
| 54 | + return array_keys($this->memberNameHashMap); |
69 | 55 | } |
70 | 56 |
|
71 | 57 | public function getMemberType(string $memberName): EnumMemberType |
72 | 58 | { |
73 | | - if (!array_key_exists($memberName, $this->membersWithType)) { |
| 59 | + if (!array_key_exists($memberName, $this->memberNameHashMap)) { |
74 | 60 | throw new \Exception('@TODO cannot access member ' . $memberName . ' of enum ' . $this->enumName); |
75 | 61 | } |
76 | 62 | return new EnumMemberType( |
77 | 63 | $this, |
78 | | - $memberName, |
79 | | - $this->membersWithType[$memberName] |
| 64 | + $memberName |
80 | 65 | ); |
81 | 66 | } |
82 | 67 |
|
|
0 commit comments