import org.checkerframework.framework.testchecker.util.*;

// TODO: the output have a "missing return statement"?
public class DeepOverrideBug {

  public static interface I {
    @Odd String interfaceMethod();

    String abstractMethod();
  }

  public abstract static class A {
    public abstract @Odd String abstractMethod();

    public abstract String interfaceMethod();
  }

  public abstract static class B extends A implements I {}

  public static class C extends B {
    // :: error: (override.return)
    public String interfaceMethod() { // should emit error
      return null;
    }
    // :: error: (override.return)
    public String abstractMethod() { // should emit error
      return null;
    }
  }
}
