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