import org.checkerframework.common.util.count.report.qual.*;

public class CallOverrides {
  class A {
    void m() {}
  }

  class B extends A {
    @ReportCall
    void m() {}
  }

  class C extends B {}

  void test() {
    C c = new C();

    // :: error: (methodcall)
    c.m();

    B b = c;

    // :: error: (methodcall)
    b.m();

    A a = c;

    // This call is not reported, because we statically
    // don't know that one of the subtypes has the ReportCall
    // annotation.
    a.m();
  }
}
