Skip to content

Commit e56b821

Browse files
committed
WIP: TASK Fix enum member access on instance
1 parent 86e1e61 commit e56b821

3 files changed

Lines changed: 12 additions & 7 deletions

File tree

src/TypeSystem/Resolver/Access/AccessTypeResolver.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
use PackageFactory\ComponentEngine\TypeSystem\ScopeInterface;
2929
use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumMemberType;
3030
use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumStaticType;
31-
use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumType;
3231
use PackageFactory\ComponentEngine\TypeSystem\Type\StructType\StructType;
3332
use PackageFactory\ComponentEngine\TypeSystem\TypeInterface;
3433
use PackageFactory\ComponentEngine\Definition\AccessType;
@@ -46,13 +45,13 @@ public function resolveTypeOf(AccessNode $accessNode): TypeInterface
4645
$rootType = $expressionResolver->resolveTypeOf($accessNode->root);
4746

4847
return match ($rootType::class) {
49-
EnumType::class, EnumStaticType::class => $this->createEnumMemberType($accessNode, $rootType),
48+
EnumStaticType::class => $this->createEnumMemberType($accessNode, $rootType),
5049
StructType::class => throw new \Exception('@TODO: StructType Access is not implemented'),
5150
default => throw new \Exception('@TODO Error: Cannot access on type ' . $rootType::class)
5251
};
5352
}
5453

55-
private function createEnumMemberType(AccessNode $accessNode, EnumType|EnumStaticType $enumType): EnumMemberType
54+
private function createEnumMemberType(AccessNode $accessNode, EnumStaticType $enumType): EnumMemberType
5655
{
5756
if (!(
5857
count($accessNode->chain->items) === 1

src/TypeSystem/Type/EnumType/EnumMemberType.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ final class EnumMemberType implements TypeInterface
2929
public function __construct(
3030
public readonly EnumType|EnumStaticType $enumType,
3131
public readonly string $memberName,
32-
public readonly ?TypeInterface $memberValueType
32+
public readonly ?TypeInterface $memberBackedValueType
3333
) {
3434
}
3535

3636
public function is(TypeInterface $other): bool
3737
{
38-
return $this->memberValueType?->is($other) ?? false;
38+
return $this->memberBackedValueType?->is($other) ?? false;
3939
}
4040
}

test/Unit/TypeSystem/Resolver/Access/AccessTypeResolverTest.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ public function invalidAccessExamples(): iterable
4747
'SomeEnum.NonExistent',
4848
'@TODO cannot access member NonExistent of enum SomeEnum'
4949
];
50+
51+
yield "access enum member on non static enum instance" => [
52+
'someEnumValue.A',
53+
"@TODO Error: Cannot access on type PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumType"
54+
];
5055
}
5156

5257
private function resolveAccessType(string $accessAsString, ScopeInterface $scope): TypeInterface
@@ -85,7 +90,7 @@ public function access(): void
8590

8691
$this->assertEquals("A", $accessType->memberName);
8792

88-
$this->assertTrue($accessType->memberValueType->is(StringType::get()));
93+
$this->assertTrue($accessType->memberBackedValueType?->is(StringType::get()));
8994
}
9095

9196
/**
@@ -103,7 +108,8 @@ public function invalidAccessResultsInError(string $accessAsString, string $expe
103108
);
104109
$scope = new DummyScope([
105110
'someString' => StringType::get(),
106-
'SomeEnum' => $someEnum
111+
'SomeEnum' => $someEnum,
112+
'someEnumValue' => $someEnum->toEnumInstanceType()
107113
]);
108114
$accessTypeResolver = new AccessTypeResolver(
109115
scope: $scope

0 commit comments

Comments
 (0)