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