3232use Dedoc \Scramble \Support \Type \TemplatePlaceholderType ;
3333use Dedoc \Scramble \Support \Type \TemplateType ;
3434use Dedoc \Scramble \Support \Type \Type ;
35- use Dedoc \Scramble \Support \Type \TypeHelper ;
3635use Dedoc \Scramble \Support \Type \TypeTraverser ;
3736use Dedoc \Scramble \Support \Type \TypeWalker ;
38- use Dedoc \Scramble \Support \Type \Union ;
3937use Dedoc \Scramble \Support \Type \UnknownType ;
4038use Dedoc \Scramble \Support \Type \VoidType ;
4139
@@ -61,12 +59,7 @@ public function resolve(Scope $scope, Type $type): Type
6159 );
6260
6361 // Type finalization: removing duplicates from union, unpacking array items (inside `replace`), calling resolving extensions.
64- $ finalizedResolvedType = (new TypeWalker )->replace (
65- $ resolvedType ,
66- fn (Type $ t ) => $ t instanceof Union ? TypeHelper::mergeTypes (...$ t ->types ) : null ,
67- );
68-
69- return $ this ->resolveLateTypes ($ finalizedResolvedType ->setOriginal ($ originalType ), $ originalType )->widen ();
62+ return $ this ->finalizeType ($ resolvedType ->setOriginal ($ originalType ), $ originalType )->widen ();
7063 }
7164
7265 private function doResolve (Type $ t , Type $ type , Scope $ scope ): Type
@@ -121,11 +114,13 @@ private function resolveLateTypeEarly(LateResolvingType $type): Type
121114 return $ type ->resolve ();
122115 }
123116
124- private function resolveLateTypes (Type $ type , Type $ originalType ): Type
117+ private function finalizeType (Type $ type , Type $ originalType ): Type
125118 {
126119 $ attributes = $ type ->attributes ();
127120
128121 $ traverser = new TypeTraverser ([
122+ new UnionNormalizingTypeVisitor ,
123+ new KeyedArrayUnpackingTypeVisitor ,
129124 new LateTypeResolvingTypeVisitor ,
130125 ]);
131126
0 commit comments