4444/**
4545 * @internal This class is not part of the BC promise of this library.
4646 */
47- class TypeFactory
47+ final class TypeFactory
4848{
4949 private TypeResolver $ resolver ;
5050
@@ -53,7 +53,7 @@ public function __construct(TypeResolver $resolver)
5353 $ this ->resolver = $ resolver ;
5454 }
5555
56- public function createType (TypeNode $ type , Context $ context ): ?Type
56+ public function createType (TypeNode $ type , ? Context $ context ): ?Type
5757 {
5858 switch (get_class ($ type )) {
5959 case ArrayTypeNode::class:
@@ -77,6 +77,7 @@ public function createType(TypeNode $type, Context $context): ?Type
7777 return $ this ->createFromCallable ($ type , $ context );
7878
7979 case ConstTypeNode::class:
80+ return null ;
8081 case GenericTypeNode::class:
8182 return $ this ->createFromGeneric ($ type , $ context );
8283
@@ -85,22 +86,29 @@ public function createType(TypeNode $type, Context $context): ?Type
8586
8687 case IntersectionTypeNode::class:
8788 return new Intersection (
88- array_map (
89- fn (TypeNode $ nestedType ) => $ this ->createType ($ nestedType , $ context ),
90- $ type ->types
89+ array_filter (
90+ array_map (
91+ fn (TypeNode $ nestedType ) => $ this ->createType ($ nestedType , $ context ),
92+ $ type ->types
93+ )
9194 )
9295 );
9396
9497 case NullableTypeNode::class:
95- return new Nullable (
96- $ this ->createType ($ type ->type , $ context )
97- );
98+ $ nestedType = $ this ->createType ($ type ->type , $ context );
99+ if ($ nestedType === null ) {
100+ return null ;
101+ }
102+
103+ return new Nullable ($ nestedType );
98104
99105 case UnionTypeNode::class:
100106 return new Compound (
101- array_map (
102- fn (TypeNode $ nestedType ) => $ this ->createType ($ nestedType , $ context ),
103- $ type ->types
107+ array_filter (
108+ array_map (
109+ fn (TypeNode $ nestedType ) => $ this ->createType ($ nestedType , $ context ),
110+ $ type ->types
111+ )
104112 )
105113 );
106114
@@ -115,7 +123,7 @@ public function createType(TypeNode $type, Context $context): ?Type
115123 }
116124 }
117125
118- private function createFromGeneric (GenericTypeNode $ type , Context $ context ): Type
126+ private function createFromGeneric (GenericTypeNode $ type , ? Context $ context ): Type
119127 {
120128 switch (strtolower ($ type ->type ->name )) {
121129 case 'array ' :
@@ -162,7 +170,7 @@ private function createFromGeneric(GenericTypeNode $type, Context $context): Typ
162170 }
163171 }
164172
165- private function createFromCallable (CallableTypeNode $ type , Context $ context ): Callable_
173+ private function createFromCallable (CallableTypeNode $ type , ? Context $ context ): Callable_
166174 {
167175 return new Callable_ ();
168176 }
0 commit comments