@@ -1241,6 +1241,38 @@ protected function tokenize($string)
12411241 }//end if
12421242 }//end if
12431243
1244+ /*
1245+ "readonly" keyword for PHP < 8.1
1246+ */
1247+
1248+ if (PHP_VERSION_ID < 80100
1249+ && $ tokenIsArray === true
1250+ && strtolower ($ token [1 ]) === 'readonly '
1251+ && isset ($ this ->tstringContexts [$ finalTokens [$ lastNotEmptyToken ]['code ' ]]) === false
1252+ ) {
1253+ // Get the next non-whitespace token.
1254+ for ($ i = ($ stackPtr + 1 ); $ i < $ numTokens ; $ i ++) {
1255+ if (is_array ($ tokens [$ i ]) === false
1256+ || $ tokens [$ i ][0 ] !== T_WHITESPACE
1257+ ) {
1258+ break ;
1259+ }
1260+ }
1261+
1262+ if (isset ($ tokens [$ i ]) === false
1263+ || $ tokens [$ i ] !== '( '
1264+ ) {
1265+ $ finalTokens [$ newStackPtr ] = [
1266+ 'code ' => T_READONLY ,
1267+ 'type ' => 'T_READONLY ' ,
1268+ 'content ' => $ token [1 ],
1269+ ];
1270+ $ newStackPtr ++;
1271+
1272+ continue ;
1273+ }
1274+ }//end if
1275+
12441276 /*
12451277 Before PHP 7.0, the "yield from" was tokenized as
12461278 T_YIELD, T_WHITESPACE and T_STRING. So look for
@@ -2924,65 +2956,6 @@ protected function processAdditional()
29242956 $ this ->tokens [$ i ]['code ' ] = T_STRING ;
29252957 $ this ->tokens [$ i ]['type ' ] = 'T_STRING ' ;
29262958 }
2927- } else if ($ this ->tokens [$ i ]['code ' ] === T_STRING
2928- && strtolower ($ this ->tokens [$ i ]['content ' ]) === 'readonly '
2929- ) {
2930- /*
2931- Adds "readonly" keyword support for PHP < 8.1.
2932- */
2933-
2934- $ allowedAfter = [
2935- T_STRING => T_STRING ,
2936- T_NS_SEPARATOR => T_NS_SEPARATOR ,
2937- T_NAME_FULLY_QUALIFIED => T_NAME_FULLY_QUALIFIED ,
2938- T_NAME_RELATIVE => T_NAME_RELATIVE ,
2939- T_NAME_QUALIFIED => T_NAME_QUALIFIED ,
2940- T_TYPE_UNION => T_TYPE_UNION ,
2941- T_BITWISE_OR => T_BITWISE_OR ,
2942- T_BITWISE_AND => T_BITWISE_AND ,
2943- T_ARRAY => T_ARRAY ,
2944- T_CALLABLE => T_CALLABLE ,
2945- T_SELF => T_SELF ,
2946- T_PARENT => T_PARENT ,
2947- T_NULL => T_FALSE ,
2948- T_NULLABLE => T_NULLABLE ,
2949- T_STATIC => T_STATIC ,
2950- T_PUBLIC => T_PUBLIC ,
2951- T_PROTECTED => T_PROTECTED ,
2952- T_PRIVATE => T_PRIVATE ,
2953- T_VAR => T_VAR ,
2954- ];
2955-
2956- $ shouldBeReadonly = true ;
2957-
2958- for ($ x = ($ i + 1 ); $ x < $ numTokens ; $ x ++) {
2959- if (isset (Util \Tokens::$ emptyTokens [$ this ->tokens [$ x ]['code ' ]]) === true ) {
2960- continue ;
2961- }
2962-
2963- if ($ this ->tokens [$ x ]['code ' ] === T_VARIABLE
2964- || $ this ->tokens [$ x ]['code ' ] === T_CONST
2965- ) {
2966- break ;
2967- }
2968-
2969- if (isset ($ allowedAfter [$ this ->tokens [$ x ]['code ' ]]) === false ) {
2970- $ shouldBeReadonly = false ;
2971- break ;
2972- }
2973- }
2974-
2975- if ($ shouldBeReadonly === true ) {
2976- if (PHP_CODESNIFFER_VERBOSITY > 1 ) {
2977- $ line = $ this ->tokens [$ i ]['line ' ];
2978- echo "\t* token $ i on line $ line changed from T_STRING to T_READONLY " .PHP_EOL ;
2979- }
2980-
2981- $ this ->tokens [$ i ]['code ' ] = T_READONLY ;
2982- $ this ->tokens [$ i ]['type ' ] = 'T_READONLY ' ;
2983- }
2984-
2985- continue ;
29862959 }//end if
29872960
29882961 if (($ this ->tokens [$ i ]['code ' ] !== T_CASE
0 commit comments