@@ -369,6 +369,37 @@ public function rememberConstructorScope(): self
369
369
);
370
370
}
371
371
372
+ private function isReadonlyPropertyFetchOnThis (PropertyFetch $ expr ): bool
373
+ {
374
+ while ($ expr instanceof PropertyFetch) {
375
+ if ($ expr ->var instanceof Variable) {
376
+ if (
377
+ ! $ expr ->name instanceof Node \Identifier
378
+ || !is_string ($ expr ->var ->name )
379
+ || $ expr ->var ->name !== 'this '
380
+ ) {
381
+ return false ;
382
+ }
383
+ } elseif (!$ expr ->var instanceof PropertyFetch) {
384
+ return false ;
385
+ }
386
+
387
+ $ propertyReflection = $ this ->propertyReflectionFinder ->findPropertyReflectionFromNode ($ expr , $ this );
388
+ if ($ propertyReflection === null ) {
389
+ return false ;
390
+ }
391
+
392
+ $ nativePropertyReflection = $ propertyReflection ->getNativeReflection ();
393
+ if ($ nativePropertyReflection === null || !$ nativePropertyReflection ->isReadOnly ()) {
394
+ return false ;
395
+ }
396
+
397
+ $ expr = $ expr ->var ;
398
+ }
399
+
400
+ return true ;
401
+ }
402
+
372
403
/** @api */
373
404
public function isInClass (): bool
374
405
{
@@ -3739,36 +3770,12 @@ private function enterAnonymousFunctionWithoutReflection(
3739
3770
foreach ($ nonStaticExpressions as $ exprString => $ typeHolder ) {
3740
3771
$ expr = $ typeHolder ->getExpr ();
3741
3772
3742
- if (
3743
- !$ expr instanceof PropertyFetch
3744
- ) {
3773
+ if (!$ expr instanceof PropertyFetch) {
3745
3774
continue ;
3746
3775
}
3747
3776
3748
- while ($ expr instanceof PropertyFetch) {
3749
- if ($ expr ->var instanceof Variable) {
3750
- if (
3751
- ! $ expr ->name instanceof Node \Identifier
3752
- || !is_string ($ expr ->var ->name )
3753
- || $ expr ->var ->name !== 'this '
3754
- ) {
3755
- continue 2 ;
3756
- }
3757
- } elseif (!$ expr ->var instanceof PropertyFetch) {
3758
- continue 2 ;
3759
- }
3760
-
3761
- $ propertyReflection = $ this ->propertyReflectionFinder ->findPropertyReflectionFromNode ($ expr , $ this );
3762
- if ($ propertyReflection === null ) {
3763
- continue 2 ;
3764
- }
3765
-
3766
- $ nativePropertyReflection = $ propertyReflection ->getNativeReflection ();
3767
- if ($ nativePropertyReflection === null || !$ nativePropertyReflection ->isReadOnly ()) {
3768
- continue 2 ;
3769
- }
3770
-
3771
- $ expr = $ expr ->var ;
3777
+ if (!$ this ->isReadonlyPropertyFetchOnThis ($ expr )) {
3778
+ continue ;
3772
3779
}
3773
3780
3774
3781
$ expressionTypes [$ exprString ] = $ typeHolder ;
0 commit comments