View | Details | Raw Unified | Return to bug 175987 | Differences between
and this patch

Collapse All | Expand All

(-)compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier15.java (-7 / +35 lines)
Lines 31-43 Link Here
31
	int length = oneArgs.length;
31
	int length = oneArgs.length;
32
	if (length != twoArgs.length) return false;
32
	if (length != twoArgs.length) return false;
33
33
34
	for (int i = 0; i < length; i++) {
34
	if (one.declaringClass.isInterface()) {
35
		if (!areTypesEqual(oneArgs[i], twoArgs[i])) {
35
		for (int i = 0; i < length; i++) {
36
			// methods with raw parameters are considered equal to inherited methods with parameterized parameters for backwards compatibility
36
			if (!areTypesEqual(oneArgs[i], twoArgs[i])) {
37
			if (!one.declaringClass.isInterface() && oneArgs[i].leafComponentType().isRawType())
37
				return false;
38
				if (oneArgs[i].dimensions() == twoArgs[i].dimensions() && oneArgs[i].leafComponentType().isEquivalentTo(twoArgs[i].leafComponentType()))
38
			}
39
					continue;
39
		}
40
			return false;
40
	} else {
41
		// methods with raw parameters are considered equal to inherited methods
42
		// with parameterized parameters for backwards compatibility, need a more complex check
43
		int i;
44
		norawyet: for (i = 0; i < length; i++) {
45
			if (!areTypesEqual(oneArgs[i], twoArgs[i])) {
46
				if (oneArgs[i].leafComponentType().isRawType()) {
47
					if (oneArgs[i].dimensions() == twoArgs[i].dimensions() && oneArgs[i].leafComponentType().isEquivalentTo(twoArgs[i].leafComponentType())) {
48
						// one parameter type is raw, hence all parameters types must be raw
49
						// or non generic or else we have a mismatch check backwards
50
						for (int j = 0; j < i; j++)
51
							if (oneArgs[j].leafComponentType().isParameterizedType())
52
								return false;
53
						// continue in all raw mode
54
						break norawyet;
55
					}
56
				}
57
				return false;
58
			}
59
		}
60
		// all raw mode for remaining parameters (if any)
61
		for (i++; i < length; i++) {
62
			if (oneArgs[i].leafComponentType().isParameterizedType() ||
63
				!areTypesEqual(oneArgs[i], twoArgs[i]) &&
64
					(!oneArgs[i].leafComponentType().isRawType() ||
65
						oneArgs[i].dimensions() != twoArgs[i].dimensions() ||
66
						!oneArgs[i].leafComponentType().isEquivalentTo(twoArgs[i].leafComponentType()))) {
67
				return false;
68
			}
41
		}
69
		}
42
	}
70
	}
43
	return true;
71
	return true;

Return to bug 175987