import org.jetbrains.annotations.NotNull;
class Foo {
interface I {
// Warning: "Overriding method parameters are not annotated", expected
void m(@NotNull String s);
}
static class S implements I {
@Override
// Warning: "Not annotated parameter overrides @NotNull parameter", expected
public void m(String s) {
System.out.println(s);
}
}
static class C extends S {
@Override
// Warning: "Parameter annotated @NotNull should not override non-annotated parameter"
// undesired if we have no control over the S superclass.
// Having annotation is still preferred here
public void m(@NotNull String s) {
super.m(s);
}
}
}