@@ -144,15 +144,19 @@ private static function getTypeOfExpression(Tokens $tokens, int $index): string
144144 */
145145 private static function getTypeOfExpressionForTokenKinds (array $ tokenKinds ): string
146146 {
147- if (self ::isOfTypeBasedOnKinds ($ tokenKinds , self ::INTEGER_KINDS )) {
147+ if (self ::isOfTypeBasedOnKinds ($ tokenKinds , [], [\T_ARRAY , CT ::T_ARRAY_SQUARE_BRACE_OPEN ])) {
148+ return 'array ' ;
149+ }
150+
151+ if (self ::isOfTypeBasedOnKinds ($ tokenKinds , self ::INTEGER_KINDS , [])) {
148152 return 'int ' ;
149153 }
150154
151- if (self ::isOfTypeBasedOnKinds ($ tokenKinds , self ::FLOAT_KINDS )) {
155+ if (self ::isOfTypeBasedOnKinds ($ tokenKinds , self ::FLOAT_KINDS , [] )) {
152156 return 'float ' ;
153157 }
154158
155- if (self ::isOfTypeBasedOnKinds ($ tokenKinds , self ::STRING_KINDS , '. ' )) {
159+ if (self ::isOfTypeBasedOnKinds ($ tokenKinds , self ::STRING_KINDS , [ '. ' ] )) {
156160 return 'string ' ;
157161 }
158162
@@ -162,11 +166,18 @@ private static function getTypeOfExpressionForTokenKinds(array $tokenKinds): str
162166 /**
163167 * @param list<int|string> $expressionTokenKinds
164168 * @param list<int|string> $expectedKinds
169+ * @param list<int|string> $instantWinners
165170 */
166- private static function isOfTypeBasedOnKinds (array $ expressionTokenKinds , array $ expectedKinds , ?string $ instantWinner = null ): bool
167- {
171+ private static function isOfTypeBasedOnKinds (
172+ array $ expressionTokenKinds ,
173+ array $ expectedKinds ,
174+ array $ instantWinners ,
175+ ): bool {
168176 foreach ($ expressionTokenKinds as $ index => $ expressionTokenKind ) {
169- if ($ expressionTokenKind === $ instantWinner ) {
177+ if ($ expressionTokenKind === '? ' ) {
178+ return false ;
179+ }
180+ if (\in_array ($ expressionTokenKind , $ instantWinners , true )) {
170181 return true ;
171182 }
172183 if (\in_array ($ expressionTokenKind , $ expectedKinds , true )) {
0 commit comments