duke@1: /** duke@1: * @test /nodynamiccopyright/ duke@1: * @bug 4216683 4346296 4656556 4785453 duke@1: * @summary New rules for when deprecation messages are suppressed duke@1: * @author gafter duke@1: * duke@1: * @compile/ref=SuppressDeprecation.out -XDstdout -Xlint:deprecation -XDrawDiagnostics SuppressDeprecation.java duke@1: */ duke@1: duke@1: /* Test for the contexts in which deprecations warnings should duke@1: * (and should not) be given. They should be given when duke@1: * o invoking a deprecated method from a non-deprecated one. duke@1: * o new X() using a deprecated constructor duke@1: * o super() to a deprecated constructor duke@1: * o extending a deprecated class. duke@1: * But deprecation messages are suppressed as follows: duke@1: * o Never complain about code in the same outermost class as duke@1: * the deprecated entity. duke@1: * o Extending a deprecated class with a deprecated one is OK. duke@1: * o Overriding a deprecated method with a deprecated one is OK. duke@1: * o Code appearing in a deprecated class is OK. duke@1: * duke@1: */ duke@1: duke@1: class T { duke@1: /** var. duke@1: * @deprecated . */ duke@1: int var; duke@1: duke@1: /** f. duke@1: * @deprecated . */ duke@1: void f() { duke@1: } duke@1: duke@1: /** g. duke@1: * @deprecated . */ duke@1: void g() { duke@1: f(); duke@1: } duke@1: duke@1: void h() { duke@1: f(); duke@1: } duke@1: duke@1: /** T. duke@1: * @deprecated . */ duke@1: T() { duke@1: } duke@1: duke@1: /** T. duke@1: * @deprecated . */ duke@1: T(int i) { duke@1: this(); duke@1: } duke@1: duke@1: T(float f) { duke@1: this(); duke@1: } duke@1: duke@1: void xyzzy() { duke@1: new T(); duke@1: new T(1.4f); duke@1: } duke@1: /** plugh. duke@1: * @deprecated . */ duke@1: void plugh() { duke@1: new T(); duke@1: new T(1.45f); duke@1: } duke@1: duke@1: /** calcx.. duke@1: * @deprecated . */ duke@1: int calcx() { return 0; } duke@1: } duke@1: duke@1: class U extends T { duke@1: /** f. duke@1: * @deprecated . */ duke@1: void f() { duke@1: } duke@1: duke@1: void g() { // error (1) duke@1: super.g(); // error (2) duke@1: var = 12; // error (3) duke@1: } duke@1: duke@1: U() {} // error (4) duke@1: duke@1: U(int i) { duke@1: super(i); // error (5) duke@1: } duke@1: duke@1: U(float f) { duke@1: super(1.3f); duke@1: } duke@1: } duke@1: duke@1: class V extends T {} // error (6) duke@1: duke@1: /** W. duke@1: * @deprecated . */ duke@1: class W extends T { // ok - inside deprecated class duke@1: /** W. duke@1: * @deprecated . */ duke@1: static { duke@1: new T(1.3f).g(); // ok - called from deprecated static block duke@1: } duke@1: duke@1: /** W. duke@1: * @deprecated . */ duke@1: { duke@1: new T(1.3f).g(); // ok - called from deprecated block duke@1: } duke@1: duke@1: { duke@1: new T(1.3f).g(); // ok - inside deprecated class duke@1: } duke@1: duke@1: int x = calcx(); // ok - inside deprecated class duke@1: duke@1: /** y. duke@1: * @deprecated . */ duke@1: int y = calcx(); duke@1: } duke@1: duke@1: /** X. duke@1: * @deprecated . */ duke@1: class X {} duke@1: duke@1: class Y extends X {} // ok - not overriding anything duke@1: duke@1: /** Z. duke@1: * @deprecated . */ duke@1: class Z extends X {}