import org.checkerframework.checker.initialization.qual.UnderInitialization;
import org.checkerframework.checker.nullness.qual.NonNull;

public class TypeFrames2 {

    class A {
        @NonNull String a;

        public A() {
            // :: error: (method.invocation.invalid)
            this.foo();
            a = "";
            this.foo();
        }

        public void foo(@UnderInitialization(A.class) A this) {}
    }

    class B extends A {
        @NonNull String b;

        public B() {
            super();
            this.foo();
            // :: error: (method.invocation.invalid)
            this.bar();
            b = "";
            this.bar();
        }

        public void bar(@UnderInitialization(B.class) B this) {}
    }
}
