|
Lines 22-27
Link Here
|
| 22 |
import org.eclipse.jdt.core.util.ClassFileBytesDisassembler; |
22 |
import org.eclipse.jdt.core.util.ClassFileBytesDisassembler; |
| 23 |
import org.eclipse.jdt.core.util.IClassFileReader; |
23 |
import org.eclipse.jdt.core.util.IClassFileReader; |
| 24 |
import org.eclipse.jdt.core.util.IMethodInfo; |
24 |
import org.eclipse.jdt.core.util.IMethodInfo; |
|
|
25 |
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; |
| 25 |
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; |
26 |
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; |
| 26 |
|
27 |
|
| 27 |
public class MethodVerifyTest extends AbstractComparableTest { |
28 |
public class MethodVerifyTest extends AbstractComparableTest { |
|
Lines 4381-4413
Link Here
|
| 4381 |
|
4382 |
|
| 4382 |
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=99106 |
4383 |
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=99106 |
| 4383 |
public void test062() { |
4384 |
public void test062() { |
| 4384 |
this.runNegativeTest( |
4385 |
String expectedOutput = new CompilerOptions(getCompilerOptions()).sourceLevel < ClassFileConstants.JDK1_6 |
| 4385 |
new String[] { |
4386 |
? "----------\n" + |
| 4386 |
"Errors.java", |
|
|
| 4387 |
"public class Errors {\n" + |
| 4388 |
" void foo() {\n" + |
| 4389 |
" Ex<String> ex = new Ex<String>();\n" + |
| 4390 |
" ex.proof(\"eclipse\");\n" + |
| 4391 |
" ex.five(\"eclipse\");\n" + |
| 4392 |
" ex.six(\"eclipse\");\n" + |
| 4393 |
" Ex ex2 = ex;\n" + |
| 4394 |
" ex2.proof(\"eclipse\");\n" + |
| 4395 |
" ex2.five(\"eclipse\");\n" + |
| 4396 |
" ex2.six(\"eclipse\");\n" + |
| 4397 |
" }\n" + |
| 4398 |
"}\n" + |
| 4399 |
"class Top<TC> {\n" + |
| 4400 |
" <TM> void proof(Object cTop) {}\n" + |
| 4401 |
" <TM> void five(TC cTop) {}\n" + |
| 4402 |
" void six(TC cTop) {}\n" + |
| 4403 |
"}\n" + |
| 4404 |
"class Ex<C> extends Top<C> {\n" + |
| 4405 |
" @Override void proof(Object cTop) {}\n" + |
| 4406 |
" @Override void five(C cEx) {}\n" + |
| 4407 |
" @Override <M> void six(C cEx) {}\n" + |
| 4408 |
"}" |
| 4409 |
}, |
| 4410 |
"----------\n" + |
| 4411 |
"1. ERROR in Errors.java (at line 6)\n" + |
4387 |
"1. ERROR in Errors.java (at line 6)\n" + |
| 4412 |
" ex.six(\"eclipse\");\n" + |
4388 |
" ex.six(\"eclipse\");\n" + |
| 4413 |
" ^^^\n" + |
4389 |
" ^^^\n" + |
|
Lines 4438-4443
Link Here
|
| 4438 |
" ^^^^^^^^^^\n" + |
4414 |
" ^^^^^^^^^^\n" + |
| 4439 |
"The method six(C) of type Ex<C> must override a superclass method\n" + |
4415 |
"The method six(C) of type Ex<C> must override a superclass method\n" + |
| 4440 |
"----------\n" |
4416 |
"----------\n" |
|
|
4417 |
: "----------\n" + |
| 4418 |
"1. ERROR in Errors.java (at line 6)\n" + |
| 4419 |
" ex.six(\"eclipse\");\n" + |
| 4420 |
" ^^^\n" + |
| 4421 |
"The method six(String) is ambiguous for the type Ex<String>\n" + |
| 4422 |
"----------\n" + |
| 4423 |
"2. WARNING in Errors.java (at line 7)\n" + |
| 4424 |
" Ex ex2 = ex;\n" + |
| 4425 |
" ^^\n" + |
| 4426 |
"Ex is a raw type. References to generic type Ex<C> should be parameterized\n" + |
| 4427 |
"----------\n" + |
| 4428 |
"3. WARNING in Errors.java (at line 9)\n" + |
| 4429 |
" ex2.five(\"eclipse\");\n" + |
| 4430 |
" ^^^^^^^^^^^^^^^^^^^\n" + |
| 4431 |
"Type safety: The method five(Object) belongs to the raw type Ex. References to generic type Ex<C> should be parameterized\n" + |
| 4432 |
"----------\n" + |
| 4433 |
"4. ERROR in Errors.java (at line 10)\n" + |
| 4434 |
" ex2.six(\"eclipse\");\n" + |
| 4435 |
" ^^^\n" + |
| 4436 |
"The method six(Object) is ambiguous for the type Ex\n" + |
| 4437 |
"----------\n" + |
| 4438 |
"5. ERROR in Errors.java (at line 21)\n" + |
| 4439 |
" @Override <M> void six(C cEx) {}\n" + |
| 4440 |
" ^^^^^^^^^^\n" + |
| 4441 |
"Name clash: The method six(C) of type Ex<C> has the same erasure as six(TC) of type Top<TC> but does not override it\n" + |
| 4442 |
"----------\n" + |
| 4443 |
"6. ERROR in Errors.java (at line 21)\n" + |
| 4444 |
" @Override <M> void six(C cEx) {}\n" + |
| 4445 |
" ^^^^^^^^^^\n" + |
| 4446 |
"The method six(C) of type Ex<C> must override or implement a supertype method\n" + |
| 4447 |
"----------\n"; |
| 4448 |
this.runNegativeTest( |
| 4449 |
new String[] { |
| 4450 |
"Errors.java", |
| 4451 |
"public class Errors {\n" + |
| 4452 |
" void foo() {\n" + |
| 4453 |
" Ex<String> ex = new Ex<String>();\n" + |
| 4454 |
" ex.proof(\"eclipse\");\n" + |
| 4455 |
" ex.five(\"eclipse\");\n" + |
| 4456 |
" ex.six(\"eclipse\");\n" + |
| 4457 |
" Ex ex2 = ex;\n" + |
| 4458 |
" ex2.proof(\"eclipse\");\n" + |
| 4459 |
" ex2.five(\"eclipse\");\n" + |
| 4460 |
" ex2.six(\"eclipse\");\n" + |
| 4461 |
" }\n" + |
| 4462 |
"}\n" + |
| 4463 |
"class Top<TC> {\n" + |
| 4464 |
" <TM> void proof(Object cTop) {}\n" + |
| 4465 |
" <TM> void five(TC cTop) {}\n" + |
| 4466 |
" void six(TC cTop) {}\n" + |
| 4467 |
"}\n" + |
| 4468 |
"class Ex<C> extends Top<C> {\n" + |
| 4469 |
" @Override void proof(Object cTop) {}\n" + |
| 4470 |
" @Override void five(C cEx) {}\n" + |
| 4471 |
" @Override <M> void six(C cEx) {}\n" + |
| 4472 |
"}" |
| 4473 |
}, |
| 4474 |
expectedOutput |
| 4441 |
// we disagree about the ambiguous errors on lines 5, 9 & 20, see the message sends to proof() |
4475 |
// we disagree about the ambiguous errors on lines 5, 9 & 20, see the message sends to proof() |
| 4442 |
// 5: reference to five is ambiguous, both method <TM>five(TC) in Top<java.lang.String> and method five(C) in Ex<java.lang.String> match |
4476 |
// 5: reference to five is ambiguous, both method <TM>five(TC) in Top<java.lang.String> and method five(C) in Ex<java.lang.String> match |
| 4443 |
// 6: reference to six is ambiguous, both method six(TC) in Top<java.lang.String> and method <M>six(C) in Ex<java.lang.String> match |
4477 |
// 6: reference to six is ambiguous, both method six(TC) in Top<java.lang.String> and method <M>six(C) in Ex<java.lang.String> match |
|
Lines 4665-4681
Link Here
|
| 4665 |
} |
4699 |
} |
| 4666 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=107045 |
4700 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=107045 |
| 4667 |
public void test071() { |
4701 |
public void test071() { |
| 4668 |
this.runNegativeTest( |
4702 |
String expectedOutput = new CompilerOptions(getCompilerOptions()).sourceLevel < ClassFileConstants.JDK1_6 |
| 4669 |
new String[] { |
4703 |
? "----------\n" + |
| 4670 |
"D.java", |
|
|
| 4671 |
"class D extends B<Integer> {\n" + |
| 4672 |
" @Override void m(Number t) {}\n" + |
| 4673 |
" @Override void m(Integer t) {}\n" + |
| 4674 |
"}\n" + |
| 4675 |
"class A<T extends Number> { void m(T t) {} }\n" + |
| 4676 |
"class B<S extends Integer> extends A<S> { @Override void m(S t) {} }" |
| 4677 |
}, |
| 4678 |
"----------\n" + |
| 4679 |
"1. ERROR in D.java (at line 2)\r\n" + |
4704 |
"1. ERROR in D.java (at line 2)\r\n" + |
| 4680 |
" @Override void m(Number t) {}\r\n" + |
4705 |
" @Override void m(Number t) {}\r\n" + |
| 4681 |
" ^^^^^^^^^^^\n" + |
4706 |
" ^^^^^^^^^^^\n" + |
|
Lines 4691-4697
Link Here
|
| 4691 |
" ^^^^^^^\n" + |
4716 |
" ^^^^^^^\n" + |
| 4692 |
"The type parameter S should not be bounded by the final type Integer. Final types cannot be further extended\n" + |
4717 |
"The type parameter S should not be bounded by the final type Integer. Final types cannot be further extended\n" + |
| 4693 |
"----------\n" |
4718 |
"----------\n" |
| 4694 |
); |
4719 |
: "----------\n" + |
|
|
4720 |
"1. ERROR in D.java (at line 2)\n" + |
| 4721 |
" @Override void m(Number t) {}\n" + |
| 4722 |
" ^^^^^^^^^^^\n" + |
| 4723 |
"Name clash: The method m(Number) of type D has the same erasure as m(T) of type A<T> but does not override it\n" + |
| 4724 |
"----------\n" + |
| 4725 |
"2. ERROR in D.java (at line 2)\n" + |
| 4726 |
" @Override void m(Number t) {}\n" + |
| 4727 |
" ^^^^^^^^^^^\n" + |
| 4728 |
"The method m(Number) of type D must override or implement a supertype method\n" + |
| 4729 |
"----------\n" + |
| 4730 |
"3. WARNING in D.java (at line 6)\n" + |
| 4731 |
" class B<S extends Integer> extends A<S> { @Override void m(S t) {} }\n" + |
| 4732 |
" ^^^^^^^\n" + |
| 4733 |
"The type parameter S should not be bounded by the final type Integer. Final types cannot be further extended\n" + |
| 4734 |
"----------\n"; |
| 4735 |
this.runNegativeTest( |
| 4736 |
new String[] { |
| 4737 |
"D.java", |
| 4738 |
"class D extends B<Integer> {\n" + |
| 4739 |
" @Override void m(Number t) {}\n" + |
| 4740 |
" @Override void m(Integer t) {}\n" + |
| 4741 |
"}\n" + |
| 4742 |
"class A<T extends Number> { void m(T t) {} }\n" + |
| 4743 |
"class B<S extends Integer> extends A<S> { @Override void m(S t) {} }" |
| 4744 |
}, |
| 4745 |
expectedOutput); |
| 4695 |
} |
4746 |
} |
| 4696 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=108780 |
4747 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=108780 |
| 4697 |
public void test072() { |
4748 |
public void test072() { |
|
Lines 4756-4761
Link Here
|
| 4756 |
} |
4807 |
} |
| 4757 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=111350 |
4808 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=111350 |
| 4758 |
public void test073c() { |
4809 |
public void test073c() { |
|
|
4810 |
String expectedOutput = new CompilerOptions(getCompilerOptions()).sourceLevel < ClassFileConstants.JDK1_6 |
| 4811 |
? "----------\n" + |
| 4812 |
"1. ERROR in NumericArray4.java (at line 5)\r\n" + |
| 4813 |
" @Override public <U> void add(Number n) {}\r\n" + |
| 4814 |
" ^^^^^^^^^^^^^\n" + |
| 4815 |
"The method add(Number) of type NumericArray4<T> must override a superclass method\n" + |
| 4816 |
"----------\n" |
| 4817 |
: "----------\n" + |
| 4818 |
"1. ERROR in NumericArray4.java (at line 5)\n" + |
| 4819 |
" @Override public <U> void add(Number n) {}\n" + |
| 4820 |
" ^^^^^^^^^^^^^\n" + |
| 4821 |
"The method add(Number) of type NumericArray4<T> must override or implement a supertype method\n" + |
| 4822 |
"----------\n"; |
| 4759 |
this.runNegativeTest( |
4823 |
this.runNegativeTest( |
| 4760 |
new String[] { |
4824 |
new String[] { |
| 4761 |
"NumericArray4.java", |
4825 |
"NumericArray4.java", |
|
Lines 4766-4781
Link Here
|
| 4766 |
" @Override public <U> void add(Number n) {}\n" + |
4830 |
" @Override public <U> void add(Number n) {}\n" + |
| 4767 |
"}" |
4831 |
"}" |
| 4768 |
}, |
4832 |
}, |
| 4769 |
"----------\n" + |
4833 |
expectedOutput); |
| 4770 |
"1. ERROR in NumericArray4.java (at line 5)\r\n" + |
|
|
| 4771 |
" @Override public <U> void add(Number n) {}\r\n" + |
| 4772 |
" ^^^^^^^^^^^^^\n" + |
| 4773 |
"The method add(Number) of type NumericArray4<T> must override a superclass method\n" + |
| 4774 |
"----------\n" |
| 4775 |
); |
| 4776 |
} |
4834 |
} |
| 4777 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=111350 |
4835 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=111350 |
| 4778 |
public void test073d() { |
4836 |
public void test073d() { |
|
|
4837 |
String expectedOutput = new CompilerOptions(getCompilerOptions()).sourceLevel < ClassFileConstants.JDK1_6 |
| 4838 |
? "----------\n" + |
| 4839 |
"1. ERROR in NumericArray5.java (at line 5)\r\n" + |
| 4840 |
" @Override public void add(Number n, Integer i) {}\r\n" + |
| 4841 |
" ^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| 4842 |
"The method add(Number, Integer) of type NumericArray5<T> must override a superclass method\n" + |
| 4843 |
"----------\n" |
| 4844 |
: "----------\n" + |
| 4845 |
"1. ERROR in NumericArray5.java (at line 5)\n" + |
| 4846 |
" @Override public void add(Number n, Integer i) {}\n" + |
| 4847 |
" ^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| 4848 |
"The method add(Number, Integer) of type NumericArray5<T> must override or implement a supertype method\n" + |
| 4849 |
"----------\n"; |
| 4779 |
this.runNegativeTest( |
4850 |
this.runNegativeTest( |
| 4780 |
new String[] { |
4851 |
new String[] { |
| 4781 |
"NumericArray5.java", |
4852 |
"NumericArray5.java", |
|
Lines 4786-4808
Link Here
|
| 4786 |
" @Override public void add(Number n, Integer i) {}\n" + |
4857 |
" @Override public void add(Number n, Integer i) {}\n" + |
| 4787 |
"}" |
4858 |
"}" |
| 4788 |
}, |
4859 |
}, |
| 4789 |
"----------\n" + |
4860 |
expectedOutput); |
| 4790 |
"1. ERROR in NumericArray5.java (at line 5)\r\n" + |
|
|
| 4791 |
" @Override public void add(Number n, Integer i) {}\r\n" + |
| 4792 |
" ^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| 4793 |
"The method add(Number, Integer) of type NumericArray5<T> must override a superclass method\n" + |
| 4794 |
"----------\n" |
| 4795 |
); |
| 4796 |
} |
4861 |
} |
| 4797 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=100970 |
4862 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=100970 |
| 4798 |
public void test074() { |
4863 |
public void test074() { |
| 4799 |
this.runNegativeTest( |
4864 |
String expectedOutput = new CompilerOptions(getCompilerOptions()).sourceLevel < ClassFileConstants.JDK1_6 |
| 4800 |
new String[] { |
4865 |
? "----------\n" + |
| 4801 |
"I.java", |
|
|
| 4802 |
"interface I {}\n" + |
| 4803 |
"interface J extends I { @Override void clone(); }" |
| 4804 |
}, |
| 4805 |
"----------\n" + |
| 4806 |
"1. WARNING in I.java (at line 2)\n" + |
4866 |
"1. WARNING in I.java (at line 2)\n" + |
| 4807 |
" interface J extends I { @Override void clone(); }\n" + |
4867 |
" interface J extends I { @Override void clone(); }\n" + |
| 4808 |
" ^^^^^^^\n" + |
4868 |
" ^^^^^^^\n" + |
|
Lines 4813-4829
Link Here
|
| 4813 |
" ^^^^^^^\n" + |
4873 |
" ^^^^^^^\n" + |
| 4814 |
"The method clone() of type J must override a superclass method\n" + |
4874 |
"The method clone() of type J must override a superclass method\n" + |
| 4815 |
"----------\n" |
4875 |
"----------\n" |
| 4816 |
); |
4876 |
: "----------\n" + |
| 4817 |
} |
4877 |
"1. WARNING in I.java (at line 2)\n" + |
| 4818 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=100970 |
4878 |
" interface J extends I { @Override void clone(); }\n" + |
| 4819 |
public void test074a() { |
4879 |
" ^^^^^^^\n" + |
|
|
4880 |
"The return type is incompatible with Object.clone(), thus this interface cannot be implemented\n" + |
| 4881 |
"----------\n" + |
| 4882 |
"2. ERROR in I.java (at line 2)\n" + |
| 4883 |
" interface J extends I { @Override void clone(); }\n" + |
| 4884 |
" ^^^^^^^\n" + |
| 4885 |
"The method clone() of type J must override or implement a supertype method\n" + |
| 4886 |
"----------\n"; |
| 4820 |
this.runNegativeTest( |
4887 |
this.runNegativeTest( |
| 4821 |
new String[] { |
4888 |
new String[] { |
| 4822 |
"I.java", |
4889 |
"I.java", |
| 4823 |
"interface I { @Override void clone(); }\n" + |
4890 |
"interface I {}\n" + |
| 4824 |
"interface J extends I {}" |
4891 |
"interface J extends I { @Override void clone(); }" |
| 4825 |
}, |
4892 |
}, |
| 4826 |
"----------\n" + |
4893 |
expectedOutput); |
|
|
4894 |
} |
| 4895 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=100970 |
| 4896 |
public void test074a() { |
| 4897 |
String expectedOutput = new CompilerOptions(getCompilerOptions()).sourceLevel < ClassFileConstants.JDK1_6 |
| 4898 |
? "----------\n" + |
| 4827 |
"1. WARNING in I.java (at line 1)\n" + |
4899 |
"1. WARNING in I.java (at line 1)\n" + |
| 4828 |
" interface I { @Override void clone(); }\n" + |
4900 |
" interface I { @Override void clone(); }\n" + |
| 4829 |
" ^^^^^^^\n" + |
4901 |
" ^^^^^^^\n" + |
|
Lines 4834-4840
Link Here
|
| 4834 |
" ^^^^^^^\n" + |
4906 |
" ^^^^^^^\n" + |
| 4835 |
"The method clone() of type I must override a superclass method\n" + |
4907 |
"The method clone() of type I must override a superclass method\n" + |
| 4836 |
"----------\n" |
4908 |
"----------\n" |
| 4837 |
); |
4909 |
: "----------\n" + |
|
|
4910 |
"1. WARNING in I.java (at line 1)\n" + |
| 4911 |
" interface I { @Override void clone(); }\n" + |
| 4912 |
" ^^^^^^^\n" + |
| 4913 |
"The return type is incompatible with Object.clone(), thus this interface cannot be implemented\n" + |
| 4914 |
"----------\n" + |
| 4915 |
"2. ERROR in I.java (at line 1)\n" + |
| 4916 |
" interface I { @Override void clone(); }\n" + |
| 4917 |
" ^^^^^^^\n" + |
| 4918 |
"The method clone() of type I must override or implement a supertype method\n" + |
| 4919 |
"----------\n"; |
| 4920 |
this.runNegativeTest( |
| 4921 |
new String[] { |
| 4922 |
"I.java", |
| 4923 |
"interface I { @Override void clone(); }\n" + |
| 4924 |
"interface J extends I {}" |
| 4925 |
}, |
| 4926 |
expectedOutput); |
| 4838 |
} |
4927 |
} |
| 4839 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=100970 |
4928 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=100970 |
| 4840 |
public void test074b() { |
4929 |
public void test074b() { |
|
Lines 4873-4878
Link Here
|
| 4873 |
} |
4962 |
} |
| 4874 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=107105 |
4963 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=107105 |
| 4875 |
public void test075() { |
4964 |
public void test075() { |
|
|
4965 |
String expectedOutput = new CompilerOptions(getCompilerOptions()).sourceLevel < ClassFileConstants.JDK1_6 |
| 4966 |
? "----------\n" + |
| 4967 |
"1. ERROR in A.java (at line 2)\n" + |
| 4968 |
" class B extends A { @Override <T1, S1 extends J & I<S1>> void foo() { } }\n" + |
| 4969 |
" ^^^^^\n" + |
| 4970 |
"Name clash: The method foo() of type B has the same erasure as foo() of type A but does not override it\n" + |
| 4971 |
"----------\n" + |
| 4972 |
"2. ERROR in A.java (at line 2)\n" + |
| 4973 |
" class B extends A { @Override <T1, S1 extends J & I<S1>> void foo() { } }\n" + |
| 4974 |
" ^^^^^\n" + |
| 4975 |
"The method foo() of type B must override a superclass method\n" + |
| 4976 |
"----------\n" + |
| 4977 |
"3. WARNING in A.java (at line 3)\n" + |
| 4978 |
" class C extends A { @Override <T2, S2 extends J & I> void foo() { } }\n" + |
| 4979 |
" ^\n" + |
| 4980 |
"I is a raw type. References to generic type I<TT> should be parameterized\n" + |
| 4981 |
"----------\n" + |
| 4982 |
"4. ERROR in A.java (at line 3)\n" + |
| 4983 |
" class C extends A { @Override <T2, S2 extends J & I> void foo() { } }\n" + |
| 4984 |
" ^^^^^\n" + |
| 4985 |
"Name clash: The method foo() of type C has the same erasure as foo() of type A but does not override it\n" + |
| 4986 |
"----------\n" + |
| 4987 |
"5. ERROR in A.java (at line 3)\n" + |
| 4988 |
" class C extends A { @Override <T2, S2 extends J & I> void foo() { } }\n" + |
| 4989 |
" ^^^^^\n" + |
| 4990 |
"The method foo() of type C must override a superclass method\n" + |
| 4991 |
"----------\n" |
| 4992 |
: "----------\n" + |
| 4993 |
"1. ERROR in A.java (at line 2)\n" + |
| 4994 |
" class B extends A { @Override <T1, S1 extends J & I<S1>> void foo() { } }\n" + |
| 4995 |
" ^^^^^\n" + |
| 4996 |
"Name clash: The method foo() of type B has the same erasure as foo() of type A but does not override it\n" + |
| 4997 |
"----------\n" + |
| 4998 |
"2. ERROR in A.java (at line 2)\n" + |
| 4999 |
" class B extends A { @Override <T1, S1 extends J & I<S1>> void foo() { } }\n" + |
| 5000 |
" ^^^^^\n" + |
| 5001 |
"The method foo() of type B must override or implement a supertype method\n" + |
| 5002 |
"----------\n" + |
| 5003 |
"3. WARNING in A.java (at line 3)\n" + |
| 5004 |
" class C extends A { @Override <T2, S2 extends J & I> void foo() { } }\n" + |
| 5005 |
" ^\n" + |
| 5006 |
"I is a raw type. References to generic type I<TT> should be parameterized\n" + |
| 5007 |
"----------\n" + |
| 5008 |
"4. ERROR in A.java (at line 3)\n" + |
| 5009 |
" class C extends A { @Override <T2, S2 extends J & I> void foo() { } }\n" + |
| 5010 |
" ^^^^^\n" + |
| 5011 |
"Name clash: The method foo() of type C has the same erasure as foo() of type A but does not override it\n" + |
| 5012 |
"----------\n" + |
| 5013 |
"5. ERROR in A.java (at line 3)\n" + |
| 5014 |
" class C extends A { @Override <T2, S2 extends J & I> void foo() { } }\n" + |
| 5015 |
" ^^^^^\n" + |
| 5016 |
"The method foo() of type C must override or implement a supertype method\n" + |
| 5017 |
"----------\n"; |
| 4876 |
this.runNegativeTest( |
5018 |
this.runNegativeTest( |
| 4877 |
new String[] { |
5019 |
new String[] { |
| 4878 |
"A.java", |
5020 |
"A.java", |
|
Lines 4884-4915
Link Here
|
| 4884 |
"interface I<TT> {}\n" + |
5026 |
"interface I<TT> {}\n" + |
| 4885 |
"interface J {}" |
5027 |
"interface J {}" |
| 4886 |
}, |
5028 |
}, |
| 4887 |
"----------\n" + |
5029 |
expectedOutput |
| 4888 |
"1. ERROR in A.java (at line 2)\n" + |
|
|
| 4889 |
" class B extends A { @Override <T1, S1 extends J & I<S1>> void foo() { } }\n" + |
| 4890 |
" ^^^^^\n" + |
| 4891 |
"Name clash: The method foo() of type B has the same erasure as foo() of type A but does not override it\n" + |
| 4892 |
"----------\n" + |
| 4893 |
"2. ERROR in A.java (at line 2)\n" + |
| 4894 |
" class B extends A { @Override <T1, S1 extends J & I<S1>> void foo() { } }\n" + |
| 4895 |
" ^^^^^\n" + |
| 4896 |
"The method foo() of type B must override a superclass method\n" + |
| 4897 |
"----------\n" + |
| 4898 |
"3. WARNING in A.java (at line 3)\n" + |
| 4899 |
" class C extends A { @Override <T2, S2 extends J & I> void foo() { } }\n" + |
| 4900 |
" ^\n" + |
| 4901 |
"I is a raw type. References to generic type I<TT> should be parameterized\n" + |
| 4902 |
"----------\n" + |
| 4903 |
"4. ERROR in A.java (at line 3)\n" + |
| 4904 |
" class C extends A { @Override <T2, S2 extends J & I> void foo() { } }\n" + |
| 4905 |
" ^^^^^\n" + |
| 4906 |
"Name clash: The method foo() of type C has the same erasure as foo() of type A but does not override it\n" + |
| 4907 |
"----------\n" + |
| 4908 |
"5. ERROR in A.java (at line 3)\n" + |
| 4909 |
" class C extends A { @Override <T2, S2 extends J & I> void foo() { } }\n" + |
| 4910 |
" ^^^^^\n" + |
| 4911 |
"The method foo() of type C must override a superclass method\n" + |
| 4912 |
"----------\n" |
| 4913 |
// A.java:2: method does not override a method from its superclass |
5030 |
// A.java:2: method does not override a method from its superclass |
| 4914 |
// A.java:3: method does not override a method from its superclass |
5031 |
// A.java:3: method does not override a method from its superclass |
| 4915 |
); |
5032 |
); |
|
Lines 4930-4935
Link Here
|
| 4930 |
} |
5047 |
} |
| 4931 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=107105 |
5048 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=107105 |
| 4932 |
public void test075b() { |
5049 |
public void test075b() { |
|
|
5050 |
String expectedOutput = new CompilerOptions(getCompilerOptions()).sourceLevel < ClassFileConstants.JDK1_6 |
| 5051 |
? "----------\n" + |
| 5052 |
"1. ERROR in A.java (at line 2)\r\n" + |
| 5053 |
" class B<V> extends A<V> { @Override <T1, S1 extends K & I<T1>> void foo(V v, T1 t, S1 s) { } }\r\n" + |
| 5054 |
" ^^^^^^^^^^^^^^^^^^^^\n" + |
| 5055 |
"The method foo(V, T1, S1) of type B<V> must override a superclass method\n" + |
| 5056 |
"----------\n" |
| 5057 |
: "----------\n" + |
| 5058 |
"1. ERROR in A.java (at line 2)\n" + |
| 5059 |
" class B<V> extends A<V> { @Override <T1, S1 extends K & I<T1>> void foo(V v, T1 t, S1 s) { } }\n" + |
| 5060 |
" ^^^^^^^^^^^^^^^^^^^^\n" + |
| 5061 |
"The method foo(V, T1, S1) of type B<V> must override or implement a supertype method\n" + |
| 5062 |
"----------\n"; |
| 4933 |
this.runNegativeTest( |
5063 |
this.runNegativeTest( |
| 4934 |
new String[] { |
5064 |
new String[] { |
| 4935 |
"A.java", |
5065 |
"A.java", |
|
Lines 4939-4950
Link Here
|
| 4939 |
"interface J {}\n" + |
5069 |
"interface J {}\n" + |
| 4940 |
"interface K extends J {}" |
5070 |
"interface K extends J {}" |
| 4941 |
}, |
5071 |
}, |
| 4942 |
"----------\n" + |
5072 |
expectedOutput |
| 4943 |
"1. ERROR in A.java (at line 2)\r\n" + |
|
|
| 4944 |
" class B<V> extends A<V> { @Override <T1, S1 extends K & I<T1>> void foo(V v, T1 t, S1 s) { } }\r\n" + |
| 4945 |
" ^^^^^^^^^^^^^^^^^^^^\n" + |
| 4946 |
"The method foo(V, T1, S1) of type B<V> must override a superclass method\n" + |
| 4947 |
"----------\n" |
| 4948 |
// A.java:2: method does not override a method from its superclass |
5073 |
// A.java:2: method does not override a method from its superclass |
| 4949 |
); |
5074 |
); |
| 4950 |
} |
5075 |
} |
|
Lines 7069-7110
Link Here
|
| 7069 |
} |
7194 |
} |
| 7070 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=156736 |
7195 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=156736 |
| 7071 |
public void test116() { |
7196 |
public void test116() { |
| 7072 |
if (this.complianceLevel.compareTo(COMPLIANCE_1_5) >= 0) { |
7197 |
Map options = this.getCompilerOptions(); |
| 7073 |
Map options = this.getCompilerOptions(); |
7198 |
options.put(CompilerOptions.OPTION_ReportOverridingMethodWithoutSuperInvocation, CompilerOptions.ERROR); |
| 7074 |
options.put(CompilerOptions.OPTION_ReportOverridingMethodWithoutSuperInvocation, CompilerOptions.ERROR); |
7199 |
String expectedOutput = new CompilerOptions(options).sourceLevel < ClassFileConstants.JDK1_6 |
| 7075 |
this.runNegativeTest( |
7200 |
? "----------\n" + |
| 7076 |
new String[] { |
7201 |
"1. ERROR in X.java (at line 2)\n" + |
| 7077 |
"X.java", |
7202 |
" Zork foo() {}\n" + |
| 7078 |
"class Y {\n" + |
7203 |
" ^^^^\n" + |
| 7079 |
" Zork foo() {}\n" + |
7204 |
"Zork cannot be resolved to a type\n" + |
| 7080 |
"}\n" + |
7205 |
"----------\n" + |
| 7081 |
"public class X extends Y {\n" + |
7206 |
"2. ERROR in X.java (at line 6)\n" + |
| 7082 |
" @Override\n" + |
7207 |
" Object foo() {\n" + |
| 7083 |
" Object foo() {\n" + |
7208 |
" ^^^^^\n" + |
| 7084 |
" return new Y() {\n" + |
7209 |
"The method foo() of type X must override a superclass method\n" + |
| 7085 |
" Object foo() {\n" + |
7210 |
"----------\n" |
| 7086 |
" return null;\n" + |
7211 |
: "----------\n" + |
| 7087 |
" }\n" + |
7212 |
"1. ERROR in X.java (at line 2)\n" + |
| 7088 |
" };" + |
7213 |
" Zork foo() {}\n" + |
| 7089 |
" }\n" + |
7214 |
" ^^^^\n" + |
| 7090 |
"}" |
7215 |
"Zork cannot be resolved to a type\n" + |
| 7091 |
}, |
7216 |
"----------\n" + |
| 7092 |
"----------\n" + |
7217 |
"2. ERROR in X.java (at line 6)\n" + |
| 7093 |
"1. ERROR in X.java (at line 2)\n" + |
7218 |
" Object foo() {\n" + |
| 7094 |
" Zork foo() {}\n" + |
7219 |
" ^^^^^\n" + |
| 7095 |
" ^^^^\n" + |
7220 |
"The method foo() of type X must override or implement a supertype method\n" + |
| 7096 |
"Zork cannot be resolved to a type\n" + |
7221 |
"----------\n"; |
| 7097 |
"----------\n" + |
7222 |
this.runNegativeTest( |
| 7098 |
"2. ERROR in X.java (at line 6)\n" + |
7223 |
new String[] { |
| 7099 |
" Object foo() {\n" + |
7224 |
"X.java", |
| 7100 |
" ^^^^^\n" + |
7225 |
"class Y {\n" + |
| 7101 |
"The method foo() of type X must override a superclass method\n" + |
7226 |
" Zork foo() {}\n" + |
| 7102 |
"----------\n", |
7227 |
"}\n" + |
| 7103 |
null, |
7228 |
"public class X extends Y {\n" + |
| 7104 |
true, |
7229 |
" @Override\n" + |
| 7105 |
options |
7230 |
" Object foo() {\n" + |
| 7106 |
); |
7231 |
" return new Y() {\n" + |
| 7107 |
} |
7232 |
" Object foo() {\n" + |
|
|
7233 |
" return null;\n" + |
| 7234 |
" }\n" + |
| 7235 |
" };" + |
| 7236 |
" }\n" + |
| 7237 |
"}" |
| 7238 |
}, |
| 7239 |
expectedOutput, |
| 7240 |
null, |
| 7241 |
true, |
| 7242 |
options ); |
| 7108 |
} |
7243 |
} |
| 7109 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=156736 |
7244 |
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=156736 |
| 7110 |
public void test117() { |
7245 |
public void test117() { |