langtools/src/share/classes/com/sun/tools/javac/comp/Check.java
changeset 2509 c8a1744c87fd
parent 2223 95e3c21b2919
child 2723 b659ca23d5f5
equal deleted inserted replaced
2322:5250b269afaa 2509:c8a1744c87fd
  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.