View | Details | Raw Unified | Return to bug 204624
Collapse All | Expand All

(-)compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java (+3 lines)
Lines 43-48 Link Here
43
			if (!areTypesEqual(oneArgs[i], twoArgs[i])) {
43
			if (!areTypesEqual(oneArgs[i], twoArgs[i])) {
44
				if (oneArgs[i].leafComponentType().isRawType()) {
44
				if (oneArgs[i].leafComponentType().isRawType()) {
45
					if (oneArgs[i].dimensions() == twoArgs[i].dimensions() && oneArgs[i].leafComponentType().isEquivalentTo(twoArgs[i].leafComponentType())) {
45
					if (oneArgs[i].dimensions() == twoArgs[i].dimensions() && oneArgs[i].leafComponentType().isEquivalentTo(twoArgs[i].leafComponentType())) {
46
						// raw mode does not apply if the method defines its own type variables
47
						if (one.typeVariables != Binding.NO_TYPE_VARIABLES)
48
							return false;
46
						// one parameter type is raw, hence all parameters types must be raw or non generic
49
						// one parameter type is raw, hence all parameters types must be raw or non generic
47
						// otherwise we have a mismatch check backwards
50
						// otherwise we have a mismatch check backwards
48
						for (int j = 0; j < i; j++)
51
						for (int j = 0; j < i; j++)
(-)src/org/eclipse/jdt/core/tests/compiler/regression/MethodVerifyTest.java (+34 lines)
Lines 7987-7990 Link Here
7987
		"----------\n"
7987
		"----------\n"
7988
	);
7988
	);
7989
}
7989
}
7990
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=204624
7991
public void test148() {
7992
	this.runNegativeTest(
7993
		new String[] {
7994
			"Y.java",
7995
			"abstract class X { abstract <T extends Object> T go(A<T> a); }\n" +
7996
			"class Y extends X {\n" +
7997
			"	@Override <T extends Object> T go(A a) { return null; }\n" +
7998
			"}\n" + 
7999
			"class A<T> {}"
8000
		},
8001
		"----------\n" + 
8002
		"1. ERROR in Y.java (at line 2)\n" + 
8003
		"	class Y extends X {\n" + 
8004
		"	      ^\n" + 
8005
		"The type Y must implement the inherited abstract method X.go(A<T>)\n" + 
8006
		"----------\n" + 
8007
		"2. ERROR in Y.java (at line 3)\n" + 
8008
		"	@Override <T extends Object> T go(A a) { return null; }\n" + 
8009
		"	                               ^^^^^^^\n" + 
8010
		"Name clash: The method go(A) of type Y has the same erasure as go(A<T>) of type X but does not override it\n" + 
8011
		"----------\n" + 
8012
		"3. ERROR in Y.java (at line 3)\n" + 
8013
		"	@Override <T extends Object> T go(A a) { return null; }\n" + 
8014
		"	                               ^^^^^^^\n" + 
8015
		"The method go(A) of type Y must override a superclass method\n" + 
8016
		"----------\n" + 
8017
		"4. WARNING in Y.java (at line 3)\n" + 
8018
		"	@Override <T extends Object> T go(A a) { return null; }\n" + 
8019
		"	                                  ^\n" + 
8020
		"A is a raw type. References to generic type A<T> should be parameterized\n" + 
8021
		"----------\n"
8022
	);
8023
}
7990
}
8024
}

Return to bug 204624