@@ -765,62 +765,62 @@ private static function optimizeConstantArrays(array $types): array
765
765
{
766
766
$ constantArrayValuesCount = self ::countConstantArrayValueTypes ($ types );
767
767
768
- if ($ constantArrayValuesCount > ConstantArrayTypeBuilder::ARRAY_COUNT_LIMIT ) {
769
- $ results = [];
770
- foreach ($ types as $ type ) {
771
- $ results [] = TypeTraverser::map ($ type , static function (Type $ type , callable $ traverse ): Type {
772
- if ($ type instanceof ConstantArrayType) {
773
- if ($ type ->isIterableAtLeastOnce ()->no ()) {
774
- return $ type ;
775
- }
768
+ if ($ constantArrayValuesCount <= ConstantArrayTypeBuilder::ARRAY_COUNT_LIMIT ) {
769
+ return $ types ;
770
+ }
776
771
777
- $ isList = true ;
778
- $ valueTypes = [];
779
- $ keyTypes = [];
780
- $ nextAutoIndex = 0 ;
781
- foreach ($ type ->getKeyTypes () as $ i => $ innerKeyType ) {
782
- if (!$ innerKeyType instanceof ConstantIntegerType) {
783
- $ isList = false ;
784
- } elseif ($ innerKeyType ->getValue () !== $ nextAutoIndex ) {
785
- $ isList = false ;
786
- $ nextAutoIndex = $ innerKeyType ->getValue () + 1 ;
787
- } else {
788
- $ nextAutoIndex ++;
789
- }
790
-
791
- $ generalizedKeyType = $ innerKeyType ->generalize (GeneralizePrecision::moreSpecific ());
792
- $ keyTypes [$ generalizedKeyType ->describe (VerbosityLevel::precise ())] = $ generalizedKeyType ;
793
-
794
- $ innerValueType = $ type ->getValueTypes ()[$ i ];
795
- $ generalizedValueType = TypeTraverser::map ($ innerValueType , static function (Type $ type , callable $ innerTraverse ) use ($ traverse ): Type {
796
- if ($ type instanceof ArrayType) {
797
- return TypeCombinator::intersect ($ type , new OversizedArrayType ());
798
- }
799
-
800
- return $ traverse ($ type );
801
- });
802
- $ valueTypes [$ generalizedValueType ->describe (VerbosityLevel::precise ())] = $ generalizedValueType ;
803
- }
772
+ $ results = [];
773
+ foreach ($ types as $ type ) {
774
+ $ results [] = TypeTraverser::map ($ type , static function (Type $ type , callable $ traverse ): Type {
775
+ if (!$ type instanceof ConstantArrayType) {
776
+ return $ traverse ($ type );
777
+ }
804
778
805
- $ keyType = TypeCombinator::union (...array_values ($ keyTypes ));
806
- $ valueType = TypeCombinator::union (...array_values ($ valueTypes ));
779
+ if ($ type ->isIterableAtLeastOnce ()->no ()) {
780
+ return $ type ;
781
+ }
807
782
808
- $ arrayType = new ArrayType ($ keyType , $ valueType );
809
- if ($ isList ) {
810
- $ arrayType = AccessoryArrayListType::intersectWith ($ arrayType );
783
+ $ isList = true ;
784
+ $ valueTypes = [];
785
+ $ keyTypes = [];
786
+ $ nextAutoIndex = 0 ;
787
+ foreach ($ type ->getKeyTypes () as $ i => $ innerKeyType ) {
788
+ if (!$ innerKeyType instanceof ConstantIntegerType) {
789
+ $ isList = false ;
790
+ } elseif ($ innerKeyType ->getValue () !== $ nextAutoIndex ) {
791
+ $ isList = false ;
792
+ $ nextAutoIndex = $ innerKeyType ->getValue () + 1 ;
793
+ } else {
794
+ $ nextAutoIndex ++;
795
+ }
796
+
797
+ $ generalizedKeyType = $ innerKeyType ->generalize (GeneralizePrecision::moreSpecific ());
798
+ $ keyTypes [$ generalizedKeyType ->describe (VerbosityLevel::precise ())] = $ generalizedKeyType ;
799
+
800
+ $ innerValueType = $ type ->getValueTypes ()[$ i ];
801
+ $ generalizedValueType = TypeTraverser::map ($ innerValueType , static function (Type $ type , callable $ innerTraverse ) use ($ traverse ): Type {
802
+ if ($ type instanceof ArrayType) {
803
+ return TypeCombinator::intersect ($ type , new OversizedArrayType ());
811
804
}
812
805
813
- return TypeCombinator::intersect ($ arrayType , new NonEmptyArrayType (), new OversizedArrayType ());
814
- }
806
+ return $ traverse ($ type );
807
+ });
808
+ $ valueTypes [$ generalizedValueType ->describe (VerbosityLevel::precise ())] = $ generalizedValueType ;
809
+ }
815
810
816
- return $ traverse ($ type );
817
- });
818
- }
811
+ $ keyType = TypeCombinator::union (...array_values ($ keyTypes ));
812
+ $ valueType = TypeCombinator::union (...array_values ($ valueTypes ));
813
+
814
+ $ arrayType = new ArrayType ($ keyType , $ valueType );
815
+ if ($ isList ) {
816
+ $ arrayType = AccessoryArrayListType::intersectWith ($ arrayType );
817
+ }
819
818
820
- return $ results ;
819
+ return TypeCombinator::intersect ($ arrayType , new NonEmptyArrayType (), new OversizedArrayType ());
820
+ });
821
821
}
822
822
823
- return $ types ;
823
+ return $ results ;
824
824
}
825
825
826
826
/**
0 commit comments