8006981: javac, method toString() of class ...javac.code.Flags doesn't print all the flag bits

Wed, 19 Jun 2013 11:09:13 +0100

author
vromero
date
Wed, 19 Jun 2013 11:09:13 +0100
changeset 1842
6d3b33aea370
parent 1841
792c40d5185a
child 1844
29dcd6715b04

8006981: javac, method toString() of class ...javac.code.Flags doesn't print all the flag bits
Reviewed-by: jjg

src/share/classes/com/sun/tools/javac/code/Flags.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/comp/Check.java file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/classes/com/sun/tools/javac/code/Flags.java	Tue Jun 18 20:56:04 2013 -0700
     1.2 +++ b/src/share/classes/com/sun/tools/javac/code/Flags.java	Wed Jun 19 11:09:13 2013 +0100
     1.3 @@ -32,6 +32,8 @@
     1.4  
     1.5  import javax.lang.model.element.Modifier;
     1.6  
     1.7 +import com.sun.tools.javac.util.Assert;
     1.8 +
     1.9  /** Access flags and other modifiers for Java classes and members.
    1.10   *
    1.11   *  <p><b>This is NOT part of any supported API.
    1.12 @@ -46,53 +48,29 @@
    1.13      public static String toString(long flags) {
    1.14          StringBuilder buf = new StringBuilder();
    1.15          String sep = "";
    1.16 -        for (Flag s : asFlagSet(flags)) {
    1.17 +        for (Flag flag : asFlagSet(flags)) {
    1.18              buf.append(sep);
    1.19 -            buf.append(s);
    1.20 +            buf.append(flag);
    1.21              sep = " ";
    1.22          }
    1.23          return buf.toString();
    1.24      }
    1.25  
    1.26 -    public static EnumSet<Flag> asFlagSet(long mask) {
    1.27 -        EnumSet<Flag> flags = EnumSet.noneOf(Flag.class);
    1.28 -        if ((mask&PUBLIC) != 0) flags.add(Flag.PUBLIC);
    1.29 -        if ((mask&PRIVATE) != 0) flags.add(Flag.PRIVATE);
    1.30 -        if ((mask&PROTECTED) != 0) flags.add(Flag.PROTECTED);
    1.31 -        if ((mask&STATIC) != 0) flags.add(Flag.STATIC);
    1.32 -        if ((mask&FINAL) != 0) flags.add(Flag.FINAL);
    1.33 -        if ((mask&SYNCHRONIZED) != 0) flags.add(Flag.SYNCHRONIZED);
    1.34 -        if ((mask&VOLATILE) != 0) flags.add(Flag.VOLATILE);
    1.35 -        if ((mask&TRANSIENT) != 0) flags.add(Flag.TRANSIENT);
    1.36 -        if ((mask&NATIVE) != 0) flags.add(Flag.NATIVE);
    1.37 -        if ((mask&INTERFACE) != 0) flags.add(Flag.INTERFACE);
    1.38 -        if ((mask&ABSTRACT) != 0) flags.add(Flag.ABSTRACT);
    1.39 -        if ((mask&DEFAULT) != 0) flags.add(Flag.DEFAULT);
    1.40 -        if ((mask&STRICTFP) != 0) flags.add(Flag.STRICTFP);
    1.41 -        if ((mask&BRIDGE) != 0) flags.add(Flag.BRIDGE);
    1.42 -        if ((mask&SYNTHETIC) != 0) flags.add(Flag.SYNTHETIC);
    1.43 -        if ((mask&DEPRECATED) != 0) flags.add(Flag.DEPRECATED);
    1.44 -        if ((mask&HASINIT) != 0) flags.add(Flag.HASINIT);
    1.45 -        if ((mask&ENUM) != 0) flags.add(Flag.ENUM);
    1.46 -        if ((mask&MANDATED) != 0) flags.add(Flag.MANDATED);
    1.47 -        if ((mask&IPROXY) != 0) flags.add(Flag.IPROXY);
    1.48 -        if ((mask&NOOUTERTHIS) != 0) flags.add(Flag.NOOUTERTHIS);
    1.49 -        if ((mask&EXISTS) != 0) flags.add(Flag.EXISTS);
    1.50 -        if ((mask&COMPOUND) != 0) flags.add(Flag.COMPOUND);
    1.51 -        if ((mask&CLASS_SEEN) != 0) flags.add(Flag.CLASS_SEEN);
    1.52 -        if ((mask&SOURCE_SEEN) != 0) flags.add(Flag.SOURCE_SEEN);
    1.53 -        if ((mask&LOCKED) != 0) flags.add(Flag.LOCKED);
    1.54 -        if ((mask&UNATTRIBUTED) != 0) flags.add(Flag.UNATTRIBUTED);
    1.55 -        if ((mask&ANONCONSTR) != 0) flags.add(Flag.ANONCONSTR);
    1.56 -        if ((mask&ACYCLIC) != 0) flags.add(Flag.ACYCLIC);
    1.57 -        if ((mask&PARAMETER) != 0) flags.add(Flag.PARAMETER);
    1.58 -        if ((mask&VARARGS) != 0) flags.add(Flag.VARARGS);
    1.59 -        return flags;
    1.60 +    public static EnumSet<Flag> asFlagSet(long flags) {
    1.61 +        EnumSet<Flag> flagSet = EnumSet.noneOf(Flag.class);
    1.62 +        for (Flag flag : Flag.values()) {
    1.63 +            if ((flags & flag.value) != 0) {
    1.64 +                flagSet.add(flag);
    1.65 +                flags &= ~flag.value;
    1.66 +            }
    1.67 +        }
    1.68 +        Assert.check(flags == 0, "Flags parameter contains unknown flags " + flags);
    1.69 +        return flagSet;
    1.70      }
    1.71  
    1.72      /* Standard Java flags.
    1.73       */
    1.74 -    public static final int PUBLIC       = 1<<0;
    1.75 +    public static final int PUBLIC       = 1;
    1.76      public static final int PRIVATE      = 1<<1;
    1.77      public static final int PROTECTED    = 1<<2;
    1.78      public static final int STATIC       = 1<<3;
    1.79 @@ -154,9 +132,9 @@
    1.80  
    1.81      /** Flag is set for nested classes that do not access instance members
    1.82       *  or `this' of an outer class and therefore don't need to be passed
    1.83 -     *  a this$n reference.  This flag is currently set only for anonymous
    1.84 +     *  a this$n reference.  This value is currently set only for anonymous
    1.85       *  classes in superclass constructor calls and only for pre 1.4 targets.
    1.86 -     *  todo: use this flag for optimizing away this$n parameters in
    1.87 +     *  todo: use this value for optimizing away this$n parameters in
    1.88       *  other cases.
    1.89       */
    1.90      public static final int NOOUTERTHIS  = 1<<22;
    1.91 @@ -342,49 +320,65 @@
    1.92          return symbol.getConstValue() != null;
    1.93      }
    1.94  
    1.95 +
    1.96      public enum Flag {
    1.97 +        PUBLIC(Flags.PUBLIC),
    1.98 +        PRIVATE(Flags.PRIVATE),
    1.99 +        PROTECTED(Flags.PROTECTED),
   1.100 +        STATIC(Flags.STATIC),
   1.101 +        FINAL(Flags.FINAL),
   1.102 +        SYNCHRONIZED(Flags.SYNCHRONIZED),
   1.103 +        VOLATILE(Flags.VOLATILE),
   1.104 +        TRANSIENT(Flags.TRANSIENT),
   1.105 +        NATIVE(Flags.NATIVE),
   1.106 +        INTERFACE(Flags.INTERFACE),
   1.107 +        ABSTRACT(Flags.ABSTRACT),
   1.108 +        DEFAULT(Flags.DEFAULT),
   1.109 +        STRICTFP(Flags.STRICTFP),
   1.110 +        BRIDGE(Flags.BRIDGE),
   1.111 +        SYNTHETIC(Flags.SYNTHETIC),
   1.112 +        ANNOTATION(Flags.ANNOTATION),
   1.113 +        DEPRECATED(Flags.DEPRECATED),
   1.114 +        HASINIT(Flags.HASINIT),
   1.115 +        BLOCK(Flags.BLOCK),
   1.116 +        ENUM(Flags.ENUM),
   1.117 +        MANDATED(Flags.MANDATED),
   1.118 +        IPROXY(Flags.IPROXY),
   1.119 +        NOOUTERTHIS(Flags.NOOUTERTHIS),
   1.120 +        EXISTS(Flags.EXISTS),
   1.121 +        COMPOUND(Flags.COMPOUND),
   1.122 +        CLASS_SEEN(Flags.CLASS_SEEN),
   1.123 +        SOURCE_SEEN(Flags.SOURCE_SEEN),
   1.124 +        LOCKED(Flags.LOCKED),
   1.125 +        UNATTRIBUTED(Flags.UNATTRIBUTED),
   1.126 +        ANONCONSTR(Flags.ANONCONSTR),
   1.127 +        ACYCLIC(Flags.ACYCLIC),
   1.128 +        PARAMETER(Flags.PARAMETER),
   1.129 +        VARARGS(Flags.VARARGS),
   1.130 +        ACYCLIC_ANN(Flags.ACYCLIC_ANN),
   1.131 +        GENERATEDCONSTR(Flags.GENERATEDCONSTR),
   1.132 +        HYPOTHETICAL(Flags.HYPOTHETICAL),
   1.133 +        PROPRIETARY(Flags.PROPRIETARY),
   1.134 +        UNION(Flags.UNION),
   1.135 +        OVERRIDE_BRIDGE(Flags.OVERRIDE_BRIDGE),
   1.136 +        EFFECTIVELY_FINAL(Flags.EFFECTIVELY_FINAL),
   1.137 +        CLASH(Flags.CLASH),
   1.138 +        AUXILIARY(Flags.AUXILIARY),
   1.139 +        NOT_IN_PROFILE(Flags.NOT_IN_PROFILE),
   1.140 +        BAD_OVERRIDE(Flags.BAD_OVERRIDE);
   1.141  
   1.142 -        PUBLIC("public"),
   1.143 -        PRIVATE("private"),
   1.144 -        PROTECTED("protected"),
   1.145 -        STATIC("static"),
   1.146 -        FINAL("final"),
   1.147 -        SYNCHRONIZED("synchronized"),
   1.148 -        VOLATILE("volatile"),
   1.149 -        TRANSIENT("transient"),
   1.150 -        NATIVE("native"),
   1.151 -        INTERFACE("interface"),
   1.152 -        ABSTRACT("abstract"),
   1.153 -        DEFAULT("default"),
   1.154 -        STRICTFP("strictfp"),
   1.155 -        BRIDGE("bridge"),
   1.156 -        SYNTHETIC("synthetic"),
   1.157 -        DEPRECATED("deprecated"),
   1.158 -        HASINIT("hasinit"),
   1.159 -        ENUM("enum"),
   1.160 -        MANDATED("mandated"),
   1.161 -        IPROXY("iproxy"),
   1.162 -        NOOUTERTHIS("noouterthis"),
   1.163 -        EXISTS("exists"),
   1.164 -        COMPOUND("compound"),
   1.165 -        CLASS_SEEN("class_seen"),
   1.166 -        SOURCE_SEEN("source_seen"),
   1.167 -        LOCKED("locked"),
   1.168 -        UNATTRIBUTED("unattributed"),
   1.169 -        ANONCONSTR("anonconstr"),
   1.170 -        ACYCLIC("acyclic"),
   1.171 -        PARAMETER("parameter"),
   1.172 -        VARARGS("varargs"),
   1.173 -        PACKAGE("package");
   1.174 -
   1.175 -        private final String name;
   1.176 -
   1.177 -        Flag(String name) {
   1.178 -            this.name = name;
   1.179 +        Flag(long flag) {
   1.180 +            this.value = flag;
   1.181 +            this.lowercaseName = name().toLowerCase();
   1.182          }
   1.183  
   1.184 +        @Override
   1.185          public String toString() {
   1.186 -            return name;
   1.187 +            return lowercaseName;
   1.188          }
   1.189 +
   1.190 +        final long value;
   1.191 +        final String lowercaseName;
   1.192      }
   1.193 +
   1.194  }
     2.1 --- a/src/share/classes/com/sun/tools/javac/comp/Check.java	Tue Jun 18 20:56:04 2013 -0700
     2.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java	Wed Jun 19 11:09:13 2013 +0100
     2.3 @@ -1619,7 +1619,7 @@
     2.4              log.error(TreeInfo.diagnosticPositionFor(m, tree), "override.weaker.access",
     2.5                        cannotOverride(m, other),
     2.6                        other.flags() == 0 ?
     2.7 -                          Flag.PACKAGE :
     2.8 +                          "package" :
     2.9                            asFlagSet(other.flags() & AccessFlags));
    2.10              m.flags_field |= BAD_OVERRIDE;
    2.11              return;

mercurial