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

changeset 1198
84b61130cbed
parent 1157
3809292620c9
child 1216
6aafebe9a394
     1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Check.java	Mon Feb 13 16:01:43 2012 -0800
     1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java	Tue Feb 14 15:43:52 2012 -0800
     1.3 @@ -1,5 +1,5 @@
     1.4  /*
     1.5 - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
     1.6 + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
     1.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8   *
     1.9   * This code is free software; you can redistribute it and/or modify it
    1.10 @@ -2114,25 +2114,26 @@
    1.11       */
    1.12      void checkOverrideClashes(DiagnosticPosition pos, Type site, MethodSymbol sym) {
    1.13           ClashFilter cf = new ClashFilter(site);
    1.14 -         //for each method m1 that is a member of 'site'...
    1.15 -         for (Symbol s1 : types.membersClosure(site, false).getElementsByName(sym.name, cf)) {
    1.16 -            //...find another method m2 that is overridden (directly or indirectly)
    1.17 -            //by method 'sym' in 'site'
    1.18 -            for (Symbol s2 : types.membersClosure(site, false).getElementsByName(sym.name, cf)) {
    1.19 -                if (s1 == s2 || !sym.overrides(s2, site.tsym, types, false)) continue;
    1.20 +        //for each method m1 that is overridden (directly or indirectly)
    1.21 +        //by method 'sym' in 'site'...
    1.22 +        for (Symbol m1 : types.membersClosure(site, false).getElementsByName(sym.name, cf)) {
    1.23 +            if (!sym.overrides(m1, site.tsym, types, false)) continue;
    1.24 +             //...check each method m2 that is a member of 'site'
    1.25 +             for (Symbol m2 : types.membersClosure(site, false).getElementsByName(sym.name, cf)) {
    1.26 +                if (m2 == m1) continue;
    1.27                  //if (i) the signature of 'sym' is not a subsignature of m1 (seen as
    1.28                  //a member of 'site') and (ii) m1 has the same erasure as m2, issue an error
    1.29 -                if (!types.isSubSignature(sym.type, types.memberType(site, s1), false) &&
    1.30 -                        types.hasSameArgs(s1.erasure(types), s2.erasure(types))) {
    1.31 +                if (!types.isSubSignature(sym.type, types.memberType(site, m2), false) &&
    1.32 +                        types.hasSameArgs(m2.erasure(types), m1.erasure(types))) {
    1.33                      sym.flags_field |= CLASH;
    1.34 -                    String key = s2 == sym ?
    1.35 +                    String key = m1 == sym ?
    1.36                              "name.clash.same.erasure.no.override" :
    1.37                              "name.clash.same.erasure.no.override.1";
    1.38                      log.error(pos,
    1.39                              key,
    1.40                              sym, sym.location(),
    1.41 -                            s1, s1.location(),
    1.42 -                            s2, s2.location());
    1.43 +                            m2, m2.location(),
    1.44 +                            m1, m1.location());
    1.45                      return;
    1.46                  }
    1.47              }

mercurial