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 / +34 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
	} else {
39
					continue;
39
		// methods with raw parameters are considered equal to inherited methods
40
			return false;
40
		// with parameterized parameters for backwards compatibility, need a more complex check
41
		int i;
42
		foundRAW: for (i = 0; i < length; i++) {
43
			if (!areTypesEqual(oneArgs[i], twoArgs[i])) {
44
				if (oneArgs[i].leafComponentType().isRawType()) {
45
					if (oneArgs[i].dimensions() == twoArgs[i].dimensions() && oneArgs[i].leafComponentType().isEquivalentTo(twoArgs[i].leafComponentType())) {
46
						// one parameter type is raw, hence all parameters types must be raw or non generic
47
						// otherwise we have a mismatch check backwards
48
						for (int j = 0; j < i; j++)
49
							if (oneArgs[j].leafComponentType().isParameterizedType())
50
								return false;
51
						// switch to all raw mode
52
						break foundRAW;
53
					}
54
				}
55
				return false;
56
			}
57
		}
58
		// all raw mode for remaining parameters (if any)
59
		for (i++; i < length; i++) {
60
			if (!areTypesEqual(oneArgs[i], twoArgs[i])) {
61
				if (oneArgs[i].leafComponentType().isRawType())
62
					if (oneArgs[i].dimensions() == twoArgs[i].dimensions() && oneArgs[i].leafComponentType().isEquivalentTo(twoArgs[i].leafComponentType()))
63
						continue;
64
				return false;
65
			} else if (oneArgs[i].leafComponentType().isParameterizedType()) {
66
				return false; // no remaining parameter can be a Parameterized type (if one has been converted then all RAW types must be converted)
67
			}
41
		}
68
		}
42
	}
69
	}
43
	return true;
70
	return true;

Return to bug 175987