import java.lang.annotation.*; @interface A { } @Target(ElementType.TYPE_USE) @interface TA { } class C { @Override public String toString(@TA C this) { return ""; } @Override public boolean equals(@TA C this, @TA Object other) { return false; } @interface Anno { String f(Anno this); } void m0() { Runnable r = (C C.this) -> { }; } void m1a(final C this) { } void m1b(@A C this) { } void m2(@TA Object other, @TA C this) { } void m3a(@TA Object this) { } void m3b(@TA int this) { } void m4a(C C.this) { } void m4b(C C.X.this) { } void m5() { class L { L(C C.this) { } } } static void sm1(@TA Object this) { } C(C this) { } static class X { X(X this) { } } class B { B(C C.this) { } B(B C.this, int p) { } B(C B.this, long p) { } B(C this, float p) { } } }