44
55namespace TypeLang \Mapper \Type \Builder ;
66
7- use TypeLang \Mapper \Mapping \Driver \DriverInterface ;
8- use TypeLang \Mapper \Mapping \Driver \ReflectionDriver ;
97use TypeLang \Mapper \Runtime \Parser \TypeParserInterface ;
108use TypeLang \Mapper \Runtime \Repository \TypeRepositoryInterface ;
119use TypeLang \Mapper \Type \ObjectType ;
12- use TypeLang \Mapper \Type \ObjectType \ObjectInstantiator \ObjectInstantiatorInterface ;
13- use TypeLang \Mapper \Type \ObjectType \ObjectInstantiator \ReflectionObjectInstantiator ;
14- use TypeLang \Mapper \Type \ObjectType \PropertyAccessor \PropertyAccessorInterface ;
15- use TypeLang \Mapper \Type \ObjectType \PropertyAccessor \ReflectionPropertyAccessor ;
16- use TypeLang \Parser \Node \Stmt \NamedTypeNode ;
1710use TypeLang \Parser \Node \Stmt \TypeStatement ;
1811
1912/**
20- * Creates an {@see ObjectType} from a type name containing a reference to an
21- * existing class.
22- *
23- * @template T of object
24- * @template-extends Builder<NamedTypeNode, ObjectType<T>>
13+ * @template-extends NamedTypeBuilder<ObjectType>
2514 */
26- class ObjectTypeBuilder extends Builder
15+ class ObjectTypeBuilder extends NamedTypeBuilder
2716{
28- public function __construct (
29- protected readonly DriverInterface $ driver = new ReflectionDriver (),
30- protected readonly PropertyAccessorInterface $ accessor = new ReflectionPropertyAccessor (),
31- protected readonly ObjectInstantiatorInterface $ instantiator = new ReflectionObjectInstantiator (),
32- ) {}
33-
34- /**
35- * Returns {@see true} if the type contains a reference to an existing class.
36- */
37- public function isSupported (TypeStatement $ statement ): bool
38- {
39- if (!$ statement instanceof NamedTypeNode) {
40- return false ;
41- }
42-
43- /** @var non-empty-string $name */
44- $ name = $ statement ->name ->toString ();
45-
46- if (!\class_exists ($ name )) {
47- return false ;
48- }
49-
50- $ reflection = new \ReflectionClass ($ name );
51-
52- return $ reflection ->isInstantiable ();
53- }
54-
5517 public function build (
5618 TypeStatement $ statement ,
5719 TypeRepositoryInterface $ types ,
@@ -60,19 +22,6 @@ public function build(
6022 $ this ->expectNoShapeFields ($ statement );
6123 $ this ->expectNoTemplateArguments ($ statement );
6224
63- /** @var class-string<T> $class */
64- $ class = $ statement ->name ->toString ();
65-
66- $ metadata = $ this ->driver ->getClassMetadata (
67- class: new \ReflectionClass ($ class ),
68- types: $ types ,
69- parser: $ parser ,
70- );
71-
72- return new ObjectType (
73- metadata: $ metadata ,
74- accessor: $ this ->accessor ,
75- instantiator: $ this ->instantiator ,
76- );
25+ return new ObjectType ();
7726 }
7827}
0 commit comments