blob: 44a09da145254831e69e72f15196d7f6291fa94c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.tests.compiler.regression;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import junit.framework.Test;
public class DeprecatedTest extends AbstractRegressionTest {
public DeprecatedTest(String name) {
super(name);
}
public static Test suite() {
return buildAllCompliancesTestSuite(testClass());
}
public void test001() {
this.runNegativeTest(new String[] {
"p/B.java",
"package p;\n" +
"class B extends A {\n" +
" float x = super.x;\n" +
"}\n",
"p/A.java",
"package p;\n" +
"class A {\n" +
" /** @deprecated */\n" +
" int x = 1;\n" +
"}\n",
},
"----------\n" +
"1. WARNING in p\\B.java (at line 3)\n" +
" float x = super.x;\n" +
" ^\n" +
"The field B.x is hiding a field from type A\n" +
"----------\n" +
"2. WARNING in p\\B.java (at line 3)\n" +
" float x = super.x;\n" +
" ^\n" +
"The field A.x is deprecated\n" +
"----------\n"
);
}
public void test002() {
this.runNegativeTest(new String[] {
"p/C.java",
"package p;\n" +
"class C {\n" +
" static int x = new A().x;\n" +
"}\n",
"p/A.java",
"package p;\n" +
"class A {\n" +
" /** @deprecated */\n" +
" int x = 1;\n" +
"}\n",
},
"----------\n" +
"1. WARNING in p\\C.java (at line 3)\n" +
" static int x = new A().x;\n" +
" ^\n" +
"The field A.x is deprecated\n" +
"----------\n"
);
}
public void test003() {
this.runNegativeTest(new String[] {
"p/Top.java",
"package p;\n" +
"public class Top {\n" +
" \n" +
" class M1 {\n" +
" class M2 {}\n" +
" };\n" +
" \n" +
" static class StaticM1 {\n" +
" static class StaticM2 {\n" +
" class NonStaticM3{}};\n" +
" };\n" +
" \n" +
"public static void main(String argv[]){\n" +
" Top tip = new Top();\n" +
" System.out.println(\"Still alive 0\");\n" +
" tip.testStaticMember();\n" +
" System.out.println(\"Still alive 1\");\n" +
" tip.testStaticMember1();\n" +
" System.out.println(\"Still alive 2\");\n" +
" tip.testStaticMember2();\n" +
" System.out.println(\"Still alive 3\");\n" +
" tip.testStaticMember3();\n" +
" System.out.println(\"Still alive 4\");\n" +
" tip.testStaticMember4();\n" +
" System.out.println(\"Completed\");\n" +
"}\n" +
" void testMember(){\n" +
" new M1().new M2();}\n" +
" void testStaticMember(){\n" +
" new StaticM1().new StaticM2();}\n" +
" void testStaticMember1(){\n" +
" new StaticM1.StaticM2();}\n" +
" void testStaticMember2(){\n" +
" new StaticM1.StaticM2().new NonStaticM3();}\n" +
" void testStaticMember3(){\n" +
" // define an anonymous subclass of the non-static M3\n" +
" new StaticM1.StaticM2().new NonStaticM3(){};\n" +
" } \n" +
" void testStaticMember4(){\n" +
" // define an anonymous subclass of the non-static M3\n" +
" new StaticM1.StaticM2().new NonStaticM3(){\n" +
" Object hello(){\n" +
" return new StaticM1.StaticM2().new NonStaticM3();\n" +
" }};\n" +
" \n" +
" } \n" +
"}\n",
},
"----------\n" +
"1. ERROR in p\\Top.java (at line 30)\n" +
" new StaticM1().new StaticM2();}\n" +
" ^^^^^^^^^^^^^^\n" +
"Illegal enclosing instance specification for type Top.StaticM1.StaticM2\n" +
"----------\n" +
"2. WARNING in p\\Top.java (at line 42)\n" +
" Object hello(){\n" +
" ^^^^^^^\n" +
"The method hello() from the type new Top.StaticM1.StaticM2.NonStaticM3(){} is never used locally\n" +
"----------\n");
}
/**
* Regression test for PR #1G9ES9B
*/
public void test004() {
this.runNegativeTest(new String[] {
"p/Warning.java",
"package p;\n" +
"import java.util.Date;\n" +
"public class Warning {\n" +
"public Warning() {\n" +
" super();\n" +
" Date dateObj = new Date();\n" +
" dateObj.UTC(1,2,3,4,5,6);\n" +
"}\n" +
"}\n",
},
"----------\n" +
"1. WARNING in p\\Warning.java (at line 7)\n" +
" dateObj.UTC(1,2,3,4,5,6);\n" +
" ^^^^^^^^^^^^^^^^^^^^^^^^\n" +
"The static method UTC(int, int, int, int, int, int) from the type Date should be accessed in a static way\n" +
"----------\n" +
"2. WARNING in p\\Warning.java (at line 7)\n" +
" dateObj.UTC(1,2,3,4,5,6);\n" +
" ^^^^^^^^^^^^^^^^\n" +
"The method UTC(int, int, int, int, int, int) from the type Date is deprecated\n" +
"----------\n");
}
public void test005() {
this.runConformTest(
new String[] {
"X.java",
"public class X {\n"
+ "/**\n"
+ " * @deprecated\n"
+ " */\n"
+ " public static class Y {\n"
+ " }\n" +
" public static void main(String[] args) { \n" +
" System.out.print(\"SUCCESS\"); \n" +
" } \n"
+ "}"
},
"SUCCESS", // expected output
null,
true, // flush previous output dir content
null, // special vm args
null, // custom options
null); // custom requestor
this.runNegativeTest(
new String[] {
"A.java",
"public class A extends X.Y {}"
},
"----------\n" +
"1. WARNING in A.java (at line 1)\n" +
" public class A extends X.Y {}\n" +
" ^\n" +
"The type X.Y is deprecated\n" +
"----------\n",// expected output
null,
false, // flush previous output dir content
null); // custom options
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=40839
public void test006() {
this.runConformTest(
new String[] {
"X.java",
"public class X {\n" +
" /**\n" +
" @deprecated\n" +
" */\n" +
" ; // line comment\n" +
" static int i;\n" +
" public static void main(String[] args) { \n" +
" System.out.print(\"SUCCESS\"); \n" +
" } \n" +
"}"
},
"SUCCESS", // expected output
null,
true, // flush previous output dir content
null, // special vm args
null, // custom options
null); // custom requestor
runConformTest(
// test directory preparation
false /* do not flush output directory */,
new String[] { /* test files */
"A.java",
"public class A {\n" +
" public static void main(String[] args) { \n" +
" System.out.print(X.i); \n" +
" } \n" +
"}"
},
// compiler results
"" /* expected compiler log */,
// runtime results
"0" /* expected output string */,
"" /* expected error string */,
// javac options
JavacTestOptions.EclipseJustification.EclipseBug40839 /* javac test options */);
}
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=88124
public void test007() {
this.runNegativeTest(
new String[] {
"X.java",
"/**\n" +
" * @deprecated\n" +
" */\n" +
"public class X {\n" +
"}\n",
"Y.java",
"/**\n" +
" * @deprecated\n" +
" */\n" +
"public class Y {\n" +
" Zork z;\n" +
" X x;\n" +
" X foo() {\n" +
" X x; // unexpected deprecated warning here\n" +
" }\n" +
"}\n",
},
"----------\n" +
"1. ERROR in Y.java (at line 5)\n" +
" Zork z;\n" +
" ^^^^\n" +
"Zork cannot be resolved to a type\n" +
"----------\n" +
"2. WARNING in Y.java (at line 8)\n" +
" X x; // unexpected deprecated warning here\n" +
" ^\n" +
"The local variable x is hiding a field from type Y\n" +
"----------\n");
}
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=88124 - variation
public void test008() {
this.runConformTest(
new String[] {
"X.java",
"/**\n" +
" * @deprecated\n" +
" */\n" +
"public class X {\n" +
"}\n",
},
"");
this.runNegativeTest(
new String[] {
"Y.java",
"/**\n" +
" * @deprecated\n" +
" */\n" +
"public class Y {\n" +
" Zork z;\n" +
" void foo() {\n" +
" X x; // unexpected deprecated warning here\n" +
" }\n" +
"}\n",
},
"----------\n" +
"1. ERROR in Y.java (at line 5)\n" +
" Zork z;\n" +
" ^^^^\n" +
"Zork cannot be resolved to a type\n" +
"----------\n",// expected output
null,
false, // flush previous output dir content
null); // custom options
}
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=88124 - variation
public void test009() {
this.runNegativeTest(
new String[] {
"X.java",
"/**\n" +
" * @deprecated\n" +
" */\n" +
"public class X {\n" +
"}\n",
"Y.java",
"/**\n" +
" * @deprecated\n" +
" */\n" +
"public class Y {\n" +
" Zork z;\n" +
" void foo() {\n" +
" X x; // unexpected deprecated warning here\n" +
" }\n" +
"}\n",
},
"----------\n" +
"1. ERROR in Y.java (at line 5)\n" +
" Zork z;\n" +
" ^^^^\n" +
"Zork cannot be resolved to a type\n" +
"----------\n");
}
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=88187
public void test010() {
Map customOptions = getCompilerOptions();
customOptions.put(CompilerOptions.OPTION_DocCommentSupport, CompilerOptions.ENABLED);
customOptions.put(CompilerOptions.OPTION_ReportInvalidAnnotation, CompilerOptions.WARNING);
this.runNegativeTest(
new String[] {
"X.java",
"/**\n" +
" * @deprecated\n" +
" */\n" +
"public class X {\n" +
" /**\n" +
" * @see I2#foo()\n" +
" */\n" +
" I1 foo() {\n" +
" return null;\n" +
" }\n" +
" Zork z;\n" +
"}\n",
"I1.java",
"/**\n" +
" * @deprecated\n" +
" */\n" +
"public interface I1 {\n" +
" // empty block\n" +
"}\n",
"I2.java",
"/**\n" +
" * @deprecated\n" +
" */\n" +
"public interface I2 {\n" +
" I1 foo(); // unexpected warning here\n" +
"}\n",
},
"----------\n" +
"1. ERROR in X.java (at line 11)\n" +
" Zork z;\n" +
" ^^^^\n" +
"Zork cannot be resolved to a type\n" +
"----------\n",
null,
true,
customOptions);
}
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=123522
public void test011() {
this.runNegativeTest(
new String[] {
"p1/X.java", // =================
"package p1;\n" +
"import p2.I;\n" +
"/** @deprecated */\n" +
"public class X {\n" +
" Zork z;\n" +
"}\n", // =================
"p2/I.java", // =================
"package p2;\n" +
"/** @deprecated */\n" +
"public interface I {\n" +
"}\n", // =================
},
"----------\n" +
"1. ERROR in p1\\X.java (at line 5)\n" +
" Zork z;\n" +
" ^^^^\n" +
"Zork cannot be resolved to a type\n" +
"----------\n");
}
// @deprecated upon locals do not influence the deprecation diagnostic
// JLS3 9.6
public void test012() {
Map customOptions = getCompilerOptions();
customOptions.put(CompilerOptions.OPTION_ReportDeprecation,
CompilerOptions.ERROR);
customOptions.put(CompilerOptions.OPTION_ReportDeprecationInDeprecatedCode,
CompilerOptions.IGNORE);
runNegativeTest(
// test directory preparation
true /* flush output directory */,
new String[] { /* test files */
"X.java",
"public class X {\n" +
" void foo() {\n" +
" /** @deprecated */\n" +
" int i1 = Y.m;\n" +
" }\n" +
" /** @deprecated */\n" +
" void bar() {\n" +
" int i1 = Y.m;\n" +
" }\n" +
"}\n",
"Y.java",
"public class Y {\n" +
" /** @deprecated */\n" +
" static int m;\n" +
"}\n", },
// compiler options
null /* no class libraries */,
customOptions /* custom options */,
// compiler results
"----------\n" + /* expected compiler log */
"1. ERROR in X.java (at line 4)\n" +
" int i1 = Y.m;\n" +
" ^\n" +
"The field Y.m is deprecated\n" +
"----------\n",
// javac options
JavacTestOptions.Excuse.EclipseWarningConfiguredAsError /* javac test options */);
}
// @deprecated upon locals do not influence the deprecation diagnostic
// JLS3 9.6
// @Deprecated variant
public void test013() {
if (this.complianceLevel >= ClassFileConstants.JDK1_5) {
Map customOptions = getCompilerOptions();
customOptions.put(CompilerOptions.OPTION_ReportDeprecation,
CompilerOptions.ERROR);
customOptions.put(CompilerOptions.OPTION_ReportDeprecationInDeprecatedCode,
CompilerOptions.IGNORE);
runNegativeTest(
// test directory preparation
true /* flush output directory */,
new String[] { /* test files */
"X.java",
"public class X {\n" +
" void foo() {\n" +
" @Deprecated\n" +
" int i1 = Y.m;\n" +
" }\n" +
" @Deprecated\n" +
" void bar() {\n" +
" int i1 = Y.m;\n" +
" }\n" +
"}\n",
"Y.java",
"public class Y {\n" +
" @Deprecated\n" +
" static int m;\n" +
"}\n",
},
// compiler options
null /* no class libraries */,
customOptions /* custom options */,
// compiler results
"----------\n" + /* expected compiler log */
"1. ERROR in X.java (at line 4)\n" +
" int i1 = Y.m;\n" +
" ^\n" +
"The field Y.m is deprecated\n" +
"----------\n",
// javac options
JavacTestOptions.Excuse.EclipseWarningConfiguredAsError /* javac test options */);
}
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=159243
public void test014() {
this.runNegativeTest(
new String[] {
"p/X.java",
"package p;\n" +
"/**\n" +
" * @deprecated\n" +
" */\n" +
"public class X {\n" +
"}\n",
"Y.java",
"import p.X;\n" +
"public class Y {\n" +
" Zork z;\n" +
" void foo() {\n" +
" X x;\n" +
" X[] xs = { x };\n" +
" }\n" +
" void bar() {\n" +
" p.X x;\n" +
" p.X[] xs = { x };\n" +
" }\n" +
"}\n",
},
"----------\n" +
"1. WARNING in Y.java (at line 1)\n" +
" import p.X;\n" +
" ^^^\n" +
"The type X is deprecated\n" +
"----------\n" +
"2. ERROR in Y.java (at line 3)\n" +
" Zork z;\n" +
" ^^^^\n" +
"Zork cannot be resolved to a type\n" +
"----------\n" +
"3. WARNING in Y.java (at line 5)\n" +
" X x;\n" +
" ^\n" +
"The type X is deprecated\n" +
"----------\n" +
"4. WARNING in Y.java (at line 6)\n" +
" X[] xs = { x };\n" +
" ^\n" +
"The type X is deprecated\n" +
"----------\n" +
"5. WARNING in Y.java (at line 9)\n" +
" p.X x;\n" +
" ^\n" +
"The type X is deprecated\n" +
"----------\n" +
"6. WARNING in Y.java (at line 10)\n" +
" p.X[] xs = { x };\n" +
" ^\n" +
"The type X is deprecated\n" +
"----------\n");
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=159709
// the order of the CUs must not modify the behavior, see also test016
public void test015() {
Map customOptions = new HashMap();
customOptions.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.ERROR);
customOptions.put(CompilerOptions.OPTION_ReportNullReference, CompilerOptions.IGNORE);
runNegativeTest(
// test directory preparation
true /* flush output directory */,
new String[] { /* test files */
"p/M1.java",
"package p;\n" +
"public class M1 {\n" +
" void bar() {\n" +
" a.N1.N2.N3 m = null;\n" +
" m.foo();\n" +
" }\n" +
"}\n",
"a/N1.java",
"package a;\n" +
"public class N1 {\n" +
" /** @deprecated */\n" +
" public class N2 {" +
" public class N3 {" +
" public void foo() {}" +
" }" +
" }" +
"}\n",
},
// compiler options
null /* no class libraries */,
customOptions /* custom options */,
// compiler results
"----------\n" + /* expected compiler log */
"1. ERROR in p\\M1.java (at line 4)\n" +
" a.N1.N2.N3 m = null;\n" +
" ^^\n" +
"The type N1.N2 is deprecated\n" +
"----------\n" +
"2. ERROR in p\\M1.java (at line 4)\n" +
" a.N1.N2.N3 m = null;\n" +
" ^^\n" +
"The type N1.N2.N3 is deprecated\n" +
"----------\n" +
"3. ERROR in p\\M1.java (at line 5)\n" +
" m.foo();\n" +
" ^^^^^\n" +
"The method foo() from the type N1.N2.N3 is deprecated\n" +
"----------\n",
// javac options
JavacTestOptions.Excuse.EclipseWarningConfiguredAsError /* javac test options */);
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=159709
public void test016() {
Map customOptions = new HashMap();
customOptions.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.ERROR);
customOptions.put(CompilerOptions.OPTION_ReportNullReference, CompilerOptions.IGNORE);
runNegativeTest(
// test directory preparation
true /* flush output directory */,
new String[] { /* test files */
"a/N1.java",
"package a;\n" +
"public class N1 {\n" +
" /** @deprecated */\n" +
" public class N2 {" +
" public class N3 {" +
" public void foo() {}" +
" }" +
" }" +
"}\n",
"p/M1.java",
"package p;\n" +
"public class M1 {\n" +
" void bar() {\n" +
" a.N1.N2.N3 m = null;\n" +
" m.foo();\n" +
" }\n" +
"}\n",
},
// compiler options
null /* no class libraries */,
customOptions /* custom options */,
// compiler results
"----------\n" + /* expected compiler log */
"1. ERROR in p\\M1.java (at line 4)\n" +
" a.N1.N2.N3 m = null;\n" +
" ^^\n" +
"The type N1.N2 is deprecated\n" +
"----------\n" +
"2. ERROR in p\\M1.java (at line 4)\n" +
" a.N1.N2.N3 m = null;\n" +
" ^^\n" +
"The type N1.N2.N3 is deprecated\n" +
"----------\n" +
"3. ERROR in p\\M1.java (at line 5)\n" +
" m.foo();\n" +
" ^^^^^\n" +
"The method foo() from the type N1.N2.N3 is deprecated\n" +
"----------\n",
// javac options
JavacTestOptions.Excuse.EclipseWarningConfiguredAsError /* javac test options */);
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=159709
// variant: self-contained case, hence no report
public void test017() {
Map customOptions = new HashMap();
customOptions.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.ERROR);
customOptions.put(CompilerOptions.OPTION_ReportDeprecationInDeprecatedCode, CompilerOptions.ERROR);
this.runConformTest(
new String[] {
"a/N1.java",
"package a;\n" +
"public class N1 {\n" +
" /** @deprecated */\n" +
" public class N2 {" +
" public class N3 {" +
" public void foo() {}" +
" }" +
" }" +
" void bar() {\n" +
" a.N1.N2.N3 m = null;\n" +
" m.foo();\n" +
" }\n" +
"}\n"
},
"",
null,
true,
null,
customOptions,
null,
false);
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=159709
// variant: using a binary class
// **
public void test018() {
Map customOptions = new HashMap();
customOptions.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.ERROR);
customOptions.put(CompilerOptions.OPTION_ReportDeprecationInDeprecatedCode, CompilerOptions.ERROR);
customOptions.put(CompilerOptions.OPTION_ReportNullReference, CompilerOptions.IGNORE);
this.runConformTest(
new String[] {
"a/N1.java",
"package a;\n" +
"public class N1 {\n" +
" /** @deprecated */\n" +
" public class N2 {" +
" public class N3 {" +
" public void foo() {}" +
" }" +
" }" +
"}\n"
},
"",
null,
true,
null,
customOptions,
null,
false);
runNegativeTest(
// test directory preparation
false /* do not flush output directory */,
new String[] { /* test files */
"p/M1.java",
"package p;\n" +
"public class M1 {\n" +
" void bar() {\n" +
" a.N1.N2.N3 m = null;\n" +
" m.foo();\n" +
" }\n" +
"}\n"
},
// compiler options
null /* no class libraries */,
customOptions /* custom options */,
// compiler results
"----------\n" + /* expected compiler log */
"1. ERROR in p\\M1.java (at line 4)\n" +
" a.N1.N2.N3 m = null;\n" +
" ^^\n" +
"The type N1.N2 is deprecated\n" +
"----------\n" +
"2. ERROR in p\\M1.java (at line 4)\n" +
" a.N1.N2.N3 m = null;\n" +
" ^^\n" +
"The type N1.N2.N3 is deprecated\n" +
"----------\n" +
"3. ERROR in p\\M1.java (at line 5)\n" +
" m.foo();\n" +
" ^^^^^\n" +
"The method foo() from the type N1.N2.N3 is deprecated\n" +
"----------\n",
// javac options
JavacTestOptions.Excuse.EclipseWarningConfiguredAsError /* javac test options */);
}
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=191909 (1.4 variant)
public void test019() {
Map customOptions = new HashMap();
customOptions.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.ERROR);
runNegativeTest(
// test directory preparation
true /* flush output directory */,
new String[] { /* test files */
"test1/E01.java",
"package test1;\n" +
"public class E01 {\n" +
" /** @deprecated */\n" +
" public static int x = 5, y= 10;\n" +
"}",
"test1/E02.java",
"package test1;\n" +
"public class E02 {\n" +
" public void foo() {\n" +
" System.out.println(E01.x);\n" +
" System.out.println(E01.y);\n" +
" }\n" +
"}"
},
// compiler options
null /* no class libraries */,
customOptions /* custom options */,
// compiler results
"----------\n" + /* expected compiler log */
"1. ERROR in test1\\E02.java (at line 4)\n" +
" System.out.println(E01.x);\n" +
" ^\n" +
"The field E01.x is deprecated\n" +
"----------\n" +
"2. ERROR in test1\\E02.java (at line 5)\n" +
" System.out.println(E01.y);\n" +
" ^\n" +
"The field E01.y is deprecated\n" +
"----------\n",
// javac options
JavacTestOptions.Excuse.EclipseWarningConfiguredAsError /* javac test options */);
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=300031
public void test020() {
Map customOptions = new HashMap();
customOptions.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.ERROR);
runNegativeTest(
// test directory preparation
true /* flush output directory */,
new String[] { /* test files */
"a.b.c.d/Deprecated.java",
"package a.b.c.d;\n" +
"public class Deprecated {\n" +
" /** @deprecated */\n" +
" public class Inner {\n" +
" /** @deprecated */\n" +
" public class Inn {\n" +
" }\n" +
" }\n" +
" /** @deprecated */\n" +
" public Deprecated foo(){ return null;}\n" +
" /** @deprecated */\n" +
" public Deprecated goo(){ return null;}\n" +
" /** @deprecated */\n" +
" public static Deprecated bar(){ return null;}\n" +
"}\n",
"a.b.c.d.e/T.java",
"package a.b.c.d.e;\n" +
"import a.b.c.d.Deprecated;\n" +
"public class T {\n" +
" a.b.c.d.Deprecated f;\n" +
" a.b.c.d.Deprecated.Inner.Inn g;\n" +
" Deprecated.Inner i;\n" +
" public void m() {\n" +
" f.foo().goo();\n" +
" a.b.c.d.Deprecated.bar();\n" +
" }\n" +
"}"
},
// compiler options
null /* no class libraries */,
customOptions /* custom options */,
// compiler results
"----------\n" + /* expected compiler log */
"1. ERROR in a.b.c.d.e\\T.java (at line 5)\n" +
" a.b.c.d.Deprecated.Inner.Inn g;\n" +
" ^^^^^\n" +
"The type Deprecated.Inner is deprecated\n" +
"----------\n" +
"2. ERROR in a.b.c.d.e\\T.java (at line 5)\n" +
" a.b.c.d.Deprecated.Inner.Inn g;\n" +
" ^^^\n" +
"The type Deprecated.Inner.Inn is deprecated\n" +
"----------\n" +
"3. ERROR in a.b.c.d.e\\T.java (at line 6)\n" +
" Deprecated.Inner i;\n" +
" ^^^^^\n" +
"The type Deprecated.Inner is deprecated\n" +
"----------\n" +
"4. ERROR in a.b.c.d.e\\T.java (at line 8)\n" +
" f.foo().goo();\n" +
" ^^^^^\n" +
"The method foo() from the type Deprecated is deprecated\n" +
"----------\n" +
"5. ERROR in a.b.c.d.e\\T.java (at line 8)\n" +
" f.foo().goo();\n" +
" ^^^^^\n" +
"The method goo() from the type Deprecated is deprecated\n" +
"----------\n" +
"6. ERROR in a.b.c.d.e\\T.java (at line 9)\n" +
" a.b.c.d.Deprecated.bar();\n" +
" ^^^^^\n" +
"The method bar() from the type Deprecated is deprecated\n" +
"----------\n",
// javac options
JavacTestOptions.Excuse.EclipseWarningConfiguredAsError /* javac test options */);
}
public static Class testClass() {
return DeprecatedTest.class;
}
}