SuppressDeprecation.java revision 3638:192d58e5d899
1/**
2 * @test  /nodynamiccopyright/
3 * @bug 4216683 4346296 4656556 4785453 8164073
4 * @summary New rules for when deprecation messages are suppressed
5 * @author gafter
6 *
7 * @compile/ref=SuppressDeprecation.out -Xlint:deprecation -XDrawDiagnostics SuppressDeprecation.java
8 * @compile/ref=SuppressDeprecation8.out -source 8 -Xlint:deprecation -XDrawDiagnostics SuppressDeprecation.java
9 */
10
11/* Test for the contexts in which deprecations warnings should
12 * (and should not) be given.  They should be given when
13 * o  invoking a deprecated method from a non-deprecated one.
14 * o  new X() using a deprecated constructor
15 * o  super() to a deprecated constructor
16 * o  extending a deprecated class.
17 * But deprecation messages are suppressed as follows:
18 * o  Never complain about code in the same outermost class as
19 *    the deprecated entity.
20 * o  Extending a deprecated class with a deprecated one is OK.
21 * o  Overriding a deprecated method with a deprecated one is OK.
22 * o  Code appearing in a deprecated class is OK.
23 *
24 */
25
26class T {
27    /** var.
28     *  @deprecated . */
29    int var;
30
31    /** f.
32     *  @deprecated . */
33    void f() {
34    }
35
36    /** g.
37     *  @deprecated . */
38    void g() {
39        f();
40    }
41
42    void h() {
43        f();
44    }
45
46    /** T.
47     *  @deprecated . */
48    T() {
49    }
50
51    /** T.
52     *  @deprecated . */
53    T(int i) {
54        this();
55    }
56
57    T(float f) {
58        this();
59    }
60
61    void xyzzy() {
62        new T();
63        new T(1.4f);
64    }
65    /** plugh.
66     *  @deprecated . */
67    void plugh() {
68        new T();
69        new T(1.45f);
70    }
71
72    /** calcx..
73     *  @deprecated . */
74    int calcx() { return 0; }
75}
76
77class U extends T {
78    /** f.
79     * @deprecated . */
80    void f() {
81    }
82
83    void g() { // error (1)
84        super.g(); // error (2)
85        var = 12; // error (3)
86    }
87
88    U() {} // error (4)
89
90    U(int i) {
91        super(i); // error (5)
92    }
93
94    U(float f) {
95        super(1.3f);
96    }
97}
98
99class V extends T {} // error (6)
100
101/** W.
102 * @deprecated . */
103class W extends T { // ok - inside deprecated class
104    /** W.
105     * @deprecated . */
106    static {
107        new T(1.3f).g(); // ok - called from deprecated static block
108    }
109
110    /** W.
111     * @deprecated . */
112    {
113        new T(1.3f).g(); // ok - called from deprecated block
114    }
115
116    {
117        new T(1.3f).g(); // ok - inside deprecated class
118    }
119
120    int x = calcx(); // ok - inside deprecated class
121
122    /** y.
123     * @deprecated . */
124    int y = calcx();
125}
126
127/** X.
128 * @deprecated . */
129class X {}
130
131class Y extends X {} // ok - not overriding anything
132
133/** Z.
134 * @deprecated . */
135class Z extends X {}
136