@@ -449,47 +449,23 @@ function (CallableTypeParameterNode $parameterNode) use ($nameScope, &$isVariadi
449449
450450 private function resolveArrayShapeNode (ArrayShapeNode $ typeNode , NameScope $ nameScope ): Type
451451 {
452- $ requiredItems = [];
453- $ optionalItems = [];
454- foreach ($ typeNode ->items as $ itemNode ) {
455- if ($ itemNode ->optional ) {
456- $ optionalItems [] = $ itemNode ;
457- continue ;
458- }
459-
460- $ requiredItems [] = $ itemNode ;
461- }
462-
463452 $ builder = ConstantArrayTypeBuilder::createEmpty ();
464453
465- $ addToBuilder = function (ConstantArrayTypeBuilder $ builder , array $ items ) use ($ nameScope ): void {
466- foreach ($ items as $ itemNode ) {
467- $ offsetType = null ;
468- if ($ itemNode ->keyName instanceof ConstExprIntegerNode) {
469- $ offsetType = new ConstantIntegerType ((int ) $ itemNode ->keyName ->value );
470- } elseif ($ itemNode ->keyName instanceof IdentifierTypeNode) {
471- $ offsetType = new ConstantStringType ($ itemNode ->keyName ->name );
472- } elseif ($ itemNode ->keyName instanceof ConstExprStringNode) {
473- $ offsetType = new ConstantStringType ($ itemNode ->keyName ->value );
474- } elseif ($ itemNode ->keyName !== null ) {
475- throw new \PHPStan \ShouldNotHappenException ('Unsupported key node type: ' . get_class ($ itemNode ->keyName ));
476- }
477- $ builder ->setOffsetValueType ($ offsetType , $ this ->resolve ($ itemNode ->valueType , $ nameScope ));
454+ foreach ($ typeNode ->items as $ itemNode ) {
455+ $ offsetType = null ;
456+ if ($ itemNode ->keyName instanceof ConstExprIntegerNode) {
457+ $ offsetType = new ConstantIntegerType ((int ) $ itemNode ->keyName ->value );
458+ } elseif ($ itemNode ->keyName instanceof IdentifierTypeNode) {
459+ $ offsetType = new ConstantStringType ($ itemNode ->keyName ->name );
460+ } elseif ($ itemNode ->keyName instanceof ConstExprStringNode) {
461+ $ offsetType = new ConstantStringType ($ itemNode ->keyName ->value );
462+ } elseif ($ itemNode ->keyName !== null ) {
463+ throw new \PHPStan \ShouldNotHappenException ('Unsupported key node type: ' . get_class ($ itemNode ->keyName ));
478464 }
479- };
480-
481- $ arrays = [];
482- $ addToBuilder ($ builder , $ requiredItems );
483- $ arrays [] = $ builder ->getArray ();
484-
485- if (count ($ optionalItems ) === 0 ) {
486- return $ arrays [0 ];
465+ $ builder ->setOffsetValueType ($ offsetType , $ this ->resolve ($ itemNode ->valueType , $ nameScope ), $ itemNode ->optional );
487466 }
488467
489- $ addToBuilder ($ builder , $ optionalItems );
490- $ arrays [] = $ builder ->getArray ();
491-
492- return TypeCombinator::union (...$ arrays );
468+ return $ builder ->getArray ();
493469 }
494470
495471 private function resolveConstTypeNode (ConstTypeNode $ typeNode , NameScope $ nameScope ): Type
0 commit comments