blob: 7968487f129f3ed5c4ac31d72eefcbbfac023994 [file] [log] [blame]
/**
* @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 {}