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; |