@@ -23,7 +23,7 @@ final class TypedClassConstantFixer extends AbstractFixer
2323{
2424 private const INTEGER_KINDS = [\T_LNUMBER , '+ ' , '- ' , '* ' , '( ' , ') ' , \T_POW , \T_SL , \T_SR ];
2525 private const FLOAT_KINDS = [\T_DNUMBER , ...self ::INTEGER_KINDS , '/ ' ];
26- private const STRING_KINDS = [\T_CONSTANT_ENCAPSED_STRING , ' . ' , \T_LNUMBER , \T_DNUMBER ];
26+ private const STRING_KINDS = [\T_CONSTANT_ENCAPSED_STRING , \T_LNUMBER , \T_DNUMBER ];
2727
2828 public function getDefinition (): FixerDefinitionInterface
2929 {
@@ -144,33 +144,36 @@ private static function getTypeOfExpression(Tokens $tokens, int $index): string
144144 */
145145 private static function getTypeOfExpressionForTokenKinds (array $ tokenKinds ): string
146146 {
147- if (self ::hasExclusivelyKinds ($ tokenKinds , self ::INTEGER_KINDS )) {
147+ if (self ::isOfTypeBasedOnKinds ($ tokenKinds , self ::INTEGER_KINDS )) {
148148 return 'int ' ;
149149 }
150150
151- if (self ::hasExclusivelyKinds ($ tokenKinds , self ::FLOAT_KINDS )) {
151+ if (self ::isOfTypeBasedOnKinds ($ tokenKinds , self ::FLOAT_KINDS )) {
152152 return 'float ' ;
153153 }
154154
155- if (self ::hasExclusivelyKinds ($ tokenKinds , self ::STRING_KINDS )) {
155+ if (self ::isOfTypeBasedOnKinds ($ tokenKinds , self ::STRING_KINDS , ' . ' )) {
156156 return 'string ' ;
157157 }
158158
159159 return 'mixed ' ;
160160 }
161161
162162 /**
163- * @param list<int|string> $tokenKinds
163+ * @param list<int|string> $expressionTokenKinds
164164 * @param list<int|string> $expectedKinds
165165 */
166- private static function hasExclusivelyKinds (array $ tokenKinds , array $ expectedKinds ): bool
166+ private static function isOfTypeBasedOnKinds (array $ expressionTokenKinds , array $ expectedKinds, ? string $ instantWinner = null ): bool
167167 {
168- foreach ($ tokenKinds as $ index => $ tokenKind ) {
169- if (\in_array ($ tokenKind , $ expectedKinds , true )) {
170- unset($ tokenKinds [$ index ]);
168+ foreach ($ expressionTokenKinds as $ index => $ expressionTokenKind ) {
169+ if ($ expressionTokenKind === $ instantWinner ) {
170+ return true ;
171+ }
172+ if (\in_array ($ expressionTokenKind , $ expectedKinds , true )) {
173+ unset($ expressionTokenKinds [$ index ]);
171174 }
172175 }
173176
174- return $ tokenKinds === [];
177+ return $ expressionTokenKinds === [];
175178 }
176179}
0 commit comments