src/share/classes/com/sun/tools/javac/jvm/ClassReader.java

changeset 992
dc3d9ef880a1
parent 957
46d720734db3
child 1136
ae361e7f435a
     1.1 --- a/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java	Fri Apr 29 16:05:56 2011 +0100
     1.2 +++ b/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java	Fri Apr 29 16:06:28 2011 +0100
     1.3 @@ -1609,18 +1609,31 @@
     1.4              // type.tsym.flatName() should == proxy.enumFlatName
     1.5              TypeSymbol enumTypeSym = proxy.enumType.tsym;
     1.6              VarSymbol enumerator = null;
     1.7 -            for (Scope.Entry e = enumTypeSym.members().lookup(proxy.enumerator);
     1.8 -                 e.scope != null;
     1.9 -                 e = e.next()) {
    1.10 -                if (e.sym.kind == VAR) {
    1.11 -                    enumerator = (VarSymbol)e.sym;
    1.12 -                    break;
    1.13 +            CompletionFailure failure = null;
    1.14 +            try {
    1.15 +                for (Scope.Entry e = enumTypeSym.members().lookup(proxy.enumerator);
    1.16 +                     e.scope != null;
    1.17 +                     e = e.next()) {
    1.18 +                    if (e.sym.kind == VAR) {
    1.19 +                        enumerator = (VarSymbol)e.sym;
    1.20 +                        break;
    1.21 +                    }
    1.22                  }
    1.23              }
    1.24 +            catch (CompletionFailure ex) {
    1.25 +                failure = ex;
    1.26 +            }
    1.27              if (enumerator == null) {
    1.28 -                log.error("unknown.enum.constant",
    1.29 -                          currentClassFile, enumTypeSym, proxy.enumerator);
    1.30 -                result = new Attribute.Error(enumTypeSym.type);
    1.31 +                if (failure != null) {
    1.32 +                    log.warning("unknown.enum.constant.reason",
    1.33 +                              currentClassFile, enumTypeSym, proxy.enumerator,
    1.34 +                              failure.getDiagnostic());
    1.35 +                } else {
    1.36 +                    log.warning("unknown.enum.constant",
    1.37 +                              currentClassFile, enumTypeSym, proxy.enumerator);
    1.38 +                }
    1.39 +                result = new Attribute.Enum(enumTypeSym.type,
    1.40 +                        new VarSymbol(0, proxy.enumerator, syms.botType, enumTypeSym));
    1.41              } else {
    1.42                  result = new Attribute.Enum(enumTypeSym.type, enumerator);
    1.43              }

mercurial