1456 TypeSymbol c = t.tsym; |
1456 TypeSymbol c = t.tsym; |
1457 Scope.Entry e = c.members().lookup(m.name); |
1457 Scope.Entry e = c.members().lookup(m.name); |
1458 while (e.scope != null) { |
1458 while (e.scope != null) { |
1459 if (m.overrides(e.sym, origin, types, false)) |
1459 if (m.overrides(e.sym, origin, types, false)) |
1460 checkOverride(tree, m, (MethodSymbol)e.sym, origin); |
1460 checkOverride(tree, m, (MethodSymbol)e.sym, origin); |
1461 else if (e.sym.isInheritedIn(origin, types) && !m.isConstructor()) { |
1461 else if (e.sym.kind == MTH && |
|
1462 e.sym.isInheritedIn(origin, types) && |
|
1463 (e.sym.flags() & SYNTHETIC) == 0 && |
|
1464 !m.isConstructor()) { |
1462 Type er1 = m.erasure(types); |
1465 Type er1 = m.erasure(types); |
1463 Type er2 = e.sym.erasure(types); |
1466 Type er2 = e.sym.erasure(types); |
1464 if (types.isSameType(er1,er2)) { |
1467 if (types.isSameTypes(er1.getParameterTypes(), |
|
1468 er2.getParameterTypes())) { |
1465 log.error(TreeInfo.diagnosticPositionFor(m, tree), |
1469 log.error(TreeInfo.diagnosticPositionFor(m, tree), |
1466 "name.clash.same.erasure.no.override", |
1470 "name.clash.same.erasure.no.override", |
1467 m, m.location(), |
1471 m, m.location(), |
1468 e.sym, e.sym.location()); |
1472 e.sym, e.sym.location()); |
1469 } |
1473 } |
2086 if (sym.owner.name == names.any) return false; |
2090 if (sym.owner.name == names.any) return false; |
2087 for (Scope.Entry e = s.lookup(sym.name); e.scope == s; e = e.next()) { |
2091 for (Scope.Entry e = s.lookup(sym.name); e.scope == s; e = e.next()) { |
2088 if (sym != e.sym && |
2092 if (sym != e.sym && |
2089 sym.kind == e.sym.kind && |
2093 sym.kind == e.sym.kind && |
2090 sym.name != names.error && |
2094 sym.name != names.error && |
2091 (sym.kind != MTH || types.overrideEquivalent(sym.type, e.sym.type))) { |
2095 (sym.kind != MTH || types.hasSameArgs(types.erasure(sym.type), types.erasure(e.sym.type)))) { |
2092 if ((sym.flags() & VARARGS) != (e.sym.flags() & VARARGS)) |
2096 if ((sym.flags() & VARARGS) != (e.sym.flags() & VARARGS)) |
2093 varargsDuplicateError(pos, sym, e.sym); |
2097 varargsDuplicateError(pos, sym, e.sym); |
|
2098 else if (sym.kind == MTH && !types.overrideEquivalent(sym.type, e.sym.type)) |
|
2099 duplicateErasureError(pos, sym, e.sym); |
2094 else |
2100 else |
2095 duplicateError(pos, e.sym); |
2101 duplicateError(pos, e.sym); |
2096 return false; |
2102 return false; |
2097 } |
2103 } |
2098 } |
2104 } |
2099 return true; |
2105 return true; |
|
2106 } |
|
2107 //where |
|
2108 /** Report duplicate declaration error. |
|
2109 */ |
|
2110 void duplicateErasureError(DiagnosticPosition pos, Symbol sym1, Symbol sym2) { |
|
2111 if (!sym1.type.isErroneous() && !sym2.type.isErroneous()) { |
|
2112 log.error(pos, "name.clash.same.erasure", sym1, sym2); |
|
2113 } |
2100 } |
2114 } |
2101 |
2115 |
2102 /** Check that single-type import is not already imported or top-level defined, |
2116 /** Check that single-type import is not already imported or top-level defined, |
2103 * but make an exception for two single-type imports which denote the same type. |
2117 * but make an exception for two single-type imports which denote the same type. |
2104 * @param pos Position for error reporting. |
2118 * @param pos Position for error reporting. |