import org.checkerframework.checker.nullness.qual.*; // @skip-test // This test is broken as it uses multiple classes. Javac halts // when seeing the first error class RawSuper { class A { @NonNull Object afield; A() { super(); mRA(this); //:: error: (type.incompatible) mA(this); afield = new Object(); mRA(this); mA(this); } A(int ignore) { this.raw(); afield = new Object(); } void raw(@Raw A this) {} void nonRaw() {} } class B extends A { @NonNull Object bfield; B() { mRA(this); mA(this); mRB(this); //:: error: (type.incompatible) mB(this); bfield = new Object(); mRA(this); mA(this); mRB(this); mB(this); } // "@Raw" means "@Raw B @NonRaw A", but method overrides take precedence. void raw(@Raw B this) { //:: error: (type.incompatible) super.nonRaw(); } } // This test may be extraneous class C extends B { @NonNull Object cfield; C() { mRA(this); mA(this); mRB(this); mB(this); mRC(this); //:: error: (type.incompatible) mC(this); cfield = new Object(); mRA(this); mA(this); mRB(this); mB(this); mRC(this); mC(this); } } void mA(@NonRaw A a) {} void mRA(@Raw A a) {} void mB(@NonRaw B b) {} void mRB(@Raw B b) {} void mC(@NonRaw C c) {} void mRC(@Raw C c) {} }