File tree 2 files changed +27
-1
lines changed
2 files changed +27
-1
lines changed Original file line number Diff line number Diff line change
1
+ <?php
2
+ namespace RecursiveTest ;
3
+
4
+ class A extends A {}
5
+
6
+ class B extends C {}
7
+ class C extends B {}
8
+
9
+ class D extends E {}
10
+ class E extends F {}
11
+ class F extends D {}
12
+
13
+ $ a = new A ;
14
+ $ a ->undef_prop = 1 ;
15
+
16
+ $ b = new B ;
17
+ $ b ->undef_prop = 1 ;
18
+
19
+ $ d = new D ;
20
+ $ d ->undef_prop = 1 ;
Original file line number Diff line number Diff line change @@ -438,6 +438,7 @@ private function resolveMemberAccessExpressionNodeToFqn(Node\Expression\MemberAc
438
438
439
439
// Find the right class that implements the member
440
440
$ implementorFqns = [$ classFqn ];
441
+ $ visitedFqns = [];
441
442
442
443
while ($ implementorFqn = array_shift ($ implementorFqns )) {
443
444
// If the member FQN exists, return it
@@ -450,10 +451,15 @@ private function resolveMemberAccessExpressionNodeToFqn(Node\Expression\MemberAc
450
451
if ($ implementorDef === null ) {
451
452
break ;
452
453
}
454
+ // Note the FQN as visited
455
+ $ visitedFqns [] = $ implementorFqn ;
453
456
// Repeat for parent class
454
457
if ($ implementorDef ->extends ) {
455
458
foreach ($ implementorDef ->extends as $ extends ) {
456
- $ implementorFqns [] = $ extends ;
459
+ // Don't add the parent FQN if it's already been visited
460
+ if (!\in_array ($ extends , $ visitedFqns )) {
461
+ $ implementorFqns [] = $ extends ;
462
+ }
457
463
}
458
464
}
459
465
}
You can’t perform that action at this time.
0 commit comments