1 // This test case once showed that `f[0].execute(x)' woudln't be 2 // expanded properly, attempting to retrieve this$0 to be used in 3 // place of `f[0]'. 4 5 abstract class A { execute(C x)6 abstract public void execute(C x); 7 } 8 9 class C {} 10 11 class Z extends A { execute(C x)12 public void execute (C x) { 13 System.out.println ("Z.execute"); 14 } 15 } 16 17 public class invoke_from_inner extends A { 18 19 Z f[] = new Z[1]; 20 class D extends C { D(C x)21 D (C x) { 22 f[0].execute (x); 23 execute (x); 24 } 25 } execute(C x)26 public void execute (C x) { 27 System.out.println ("invoke_from_inner.execute"); 28 } 29 main(String a[])30 public static void main (String a[]) { 31 new invoke_from_inner().foo(); 32 } foo()33 void foo () { 34 f[0] = new Z(); 35 new D(new C()); 36 } 37 } 38