package spoon.test.targeted.testclasses; import static spoon.test.targeted.testclasses.Bar.FIELD; import static spoon.test.targeted.testclasses.Bar.staticMethodBar; public class Foo<T> extends SuperClass { private int i; private int j; static int k; Foo foo; Bar bar; Fii.Fuu fuu; final static int p; static { p = 0; } public void m() { int x; // checking that this is correct Java and is correctly parsed x= spoon.test.targeted.testclasses.Foo.this.k; x= Foo.k; x= k; this.k = x; k=x; Foo.k=x; x = Bar.FIELD; x = FIELD; Bar.FIELD = x; FIELD = x; } public void field() { int x = this.i; x = i; x = this.bar.i; x = bar.i; x = this.o; x = o; x = fuu.p; } public void inv() { new Foo(0, 0).method(); foo.method(); this.method(); method(); bar.methodBar(); fuu.method(); superMethod(); } public void invStatic() { new Foo(0, 0).staticMethod(); foo.staticMethod(); this.staticMethod(); Foo.staticMethod(); staticMethod(); Bar.staticMethodBar(); staticMethodBar(); Fii.Fuu.m(); } private Foo method() { class NestedTypeScanner { Foo type; public void checkType(Foo type) { this.checkType(type); } public void checkField() { Foo inner = this.type; inner = type; } } return new Foo(0, 0) { int i; @Override public void m() { Foo.this.invStatic(); this.invStatic(); } public void invStatic() { int inner = Foo.this.i; inner = this.i; inner = i; } }; } private static void staticMethod() { } public Foo(int i, int k) { this.i = i; j = k; } class InnerClass { int i; public void innerInv() { inv(); Foo.this.inv(); staticMethod(); Foo.staticMethod(); superMethod(); Foo.this.superMethod(); method(); this.method(); } public void innerField() { int x = this.i; x = i; x = Foo.this.i; x = Foo.k; x = Foo.this.o; x = o; } void method() { } } public static class Fii { public static class Fuu { int p; static void m() { } void method() { } } } }