src/share/classes/com/sun/tools/javac/comp/Check.java

changeset 252
5caa6c45936a
parent 240
8c55d5b0ed71
child 267
e2722bd43f3a
     1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Check.java	Sat Mar 21 13:53:11 2009 -0700
     1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java	Wed Mar 25 10:28:36 2009 +0000
     1.3 @@ -1458,10 +1458,14 @@
     1.4              while (e.scope != null) {
     1.5                  if (m.overrides(e.sym, origin, types, false))
     1.6                      checkOverride(tree, m, (MethodSymbol)e.sym, origin);
     1.7 -                else if (e.sym.isInheritedIn(origin, types) && !m.isConstructor()) {
     1.8 +                else if (e.sym.kind == MTH &&
     1.9 +                        e.sym.isInheritedIn(origin, types) &&
    1.10 +                        (e.sym.flags() & SYNTHETIC) == 0 &&
    1.11 +                        !m.isConstructor()) {
    1.12                      Type er1 = m.erasure(types);
    1.13                      Type er2 = e.sym.erasure(types);
    1.14 -                    if (types.isSameType(er1,er2)) {
    1.15 +                    if (types.isSameTypes(er1.getParameterTypes(),
    1.16 +                            er2.getParameterTypes())) {
    1.17                              log.error(TreeInfo.diagnosticPositionFor(m, tree),
    1.18                                      "name.clash.same.erasure.no.override",
    1.19                                      m, m.location(),
    1.20 @@ -2088,9 +2092,11 @@
    1.21              if (sym != e.sym &&
    1.22                  sym.kind == e.sym.kind &&
    1.23                  sym.name != names.error &&
    1.24 -                (sym.kind != MTH || types.overrideEquivalent(sym.type, e.sym.type))) {
    1.25 +                (sym.kind != MTH || types.hasSameArgs(types.erasure(sym.type), types.erasure(e.sym.type)))) {
    1.26                  if ((sym.flags() & VARARGS) != (e.sym.flags() & VARARGS))
    1.27                      varargsDuplicateError(pos, sym, e.sym);
    1.28 +                else if (sym.kind == MTH && !types.overrideEquivalent(sym.type, e.sym.type))
    1.29 +                    duplicateErasureError(pos, sym, e.sym);
    1.30                  else
    1.31                      duplicateError(pos, e.sym);
    1.32                  return false;
    1.33 @@ -2098,6 +2104,14 @@
    1.34          }
    1.35          return true;
    1.36      }
    1.37 +    //where
    1.38 +    /** Report duplicate declaration error.
    1.39 +     */
    1.40 +    void duplicateErasureError(DiagnosticPosition pos, Symbol sym1, Symbol sym2) {
    1.41 +        if (!sym1.type.isErroneous() && !sym2.type.isErroneous()) {
    1.42 +            log.error(pos, "name.clash.same.erasure", sym1, sym2);
    1.43 +        }
    1.44 +    }
    1.45  
    1.46      /** Check that single-type import is not already imported or top-level defined,
    1.47       *  but make an exception for two single-type imports which denote the same type.

mercurial