langtools/src/share/classes/com/sun/tools/javac/code/Flags.java
changeset 939 38e24969c7e9
parent 10 06bc494ca11e
child 1264 076a3cde30d5
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Flags.java	Thu Jul 24 11:12:41 2008 +0100
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Flags.java	Thu Jul 24 19:06:57 2008 +0100
@@ -25,6 +25,7 @@
 
 package com.sun.tools.javac.code;
 
+import java.util.EnumSet;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
@@ -43,38 +44,49 @@
 
     public static String toString(long flags) {
         StringBuffer buf = new StringBuffer();
-        if ((flags&PUBLIC) != 0) buf.append("public ");
-        if ((flags&PRIVATE) != 0) buf.append("private ");
-        if ((flags&PROTECTED) != 0) buf.append("protected ");
-        if ((flags&STATIC) != 0) buf.append("static ");
-        if ((flags&FINAL) != 0) buf.append("final ");
-        if ((flags&SYNCHRONIZED) != 0) buf.append("synchronized ");
-        if ((flags&VOLATILE) != 0) buf.append("volatile ");
-        if ((flags&TRANSIENT) != 0) buf.append("transient ");
-        if ((flags&NATIVE) != 0) buf.append("native ");
-        if ((flags&INTERFACE) != 0) buf.append("interface ");
-        if ((flags&ABSTRACT) != 0) buf.append("abstract ");
-        if ((flags&STRICTFP) != 0) buf.append("strictfp ");
-        if ((flags&BRIDGE) != 0) buf.append("bridge ");
-        if ((flags&SYNTHETIC) != 0) buf.append("synthetic ");
-        if ((flags&DEPRECATED) != 0) buf.append("deprecated ");
-        if ((flags&HASINIT) != 0) buf.append("hasinit ");
-        if ((flags&ENUM) != 0) buf.append("enum ");
-        if ((flags&IPROXY) != 0) buf.append("iproxy ");
-        if ((flags&NOOUTERTHIS) != 0) buf.append("noouterthis ");
-        if ((flags&EXISTS) != 0) buf.append("exists ");
-        if ((flags&COMPOUND) != 0) buf.append("compound ");
-        if ((flags&CLASS_SEEN) != 0) buf.append("class_seen ");
-        if ((flags&SOURCE_SEEN) != 0) buf.append("source_seen ");
-        if ((flags&LOCKED) != 0) buf.append("locked ");
-        if ((flags&UNATTRIBUTED) != 0) buf.append("unattributed ");
-        if ((flags&ANONCONSTR) != 0) buf.append("anonconstr ");
-        if ((flags&ACYCLIC) != 0) buf.append("acyclic ");
-        if ((flags&PARAMETER) != 0) buf.append("parameter ");
-        if ((flags&VARARGS) != 0) buf.append("varargs ");
+        String sep = "";
+        for (Flag s : asFlagSet(flags)) {
+            buf.append(sep);
+            buf.append(s);
+            sep = " ";
+        }
         return buf.toString();
     }
 
+    public static EnumSet<Flag> asFlagSet(long mask) {
+        EnumSet<Flag> flags = EnumSet.noneOf(Flag.class);
+        if ((mask&PUBLIC) != 0) flags.add(Flag.PUBLIC);
+        if ((mask&PRIVATE) != 0) flags.add(Flag.PRIVATE);
+        if ((mask&PROTECTED) != 0) flags.add(Flag.PROTECTED);
+        if ((mask&STATIC) != 0) flags.add(Flag.STATIC);
+        if ((mask&FINAL) != 0) flags.add(Flag.FINAL);
+        if ((mask&SYNCHRONIZED) != 0) flags.add(Flag.SYNCHRONIZED);
+        if ((mask&VOLATILE) != 0) flags.add(Flag.VOLATILE);
+        if ((mask&TRANSIENT) != 0) flags.add(Flag.TRANSIENT);
+        if ((mask&NATIVE) != 0) flags.add(Flag.NATIVE);
+        if ((mask&INTERFACE) != 0) flags.add(Flag.INTERFACE);
+        if ((mask&ABSTRACT) != 0) flags.add(Flag.ABSTRACT);
+        if ((mask&STRICTFP) != 0) flags.add(Flag.STRICTFP);
+        if ((mask&BRIDGE) != 0) flags.add(Flag.BRIDGE);
+        if ((mask&SYNTHETIC) != 0) flags.add(Flag.SYNTHETIC);
+        if ((mask&DEPRECATED) != 0) flags.add(Flag.DEPRECATED);
+        if ((mask&HASINIT) != 0) flags.add(Flag.HASINIT);
+        if ((mask&ENUM) != 0) flags.add(Flag.ENUM);
+        if ((mask&IPROXY) != 0) flags.add(Flag.IPROXY);
+        if ((mask&NOOUTERTHIS) != 0) flags.add(Flag.NOOUTERTHIS);
+        if ((mask&EXISTS) != 0) flags.add(Flag.EXISTS);
+        if ((mask&COMPOUND) != 0) flags.add(Flag.COMPOUND);
+        if ((mask&CLASS_SEEN) != 0) flags.add(Flag.CLASS_SEEN);
+        if ((mask&SOURCE_SEEN) != 0) flags.add(Flag.SOURCE_SEEN);
+        if ((mask&LOCKED) != 0) flags.add(Flag.LOCKED);
+        if ((mask&UNATTRIBUTED) != 0) flags.add(Flag.UNATTRIBUTED);
+        if ((mask&ANONCONSTR) != 0) flags.add(Flag.ANONCONSTR);
+        if ((mask&ACYCLIC) != 0) flags.add(Flag.ACYCLIC);
+        if ((mask&PARAMETER) != 0) flags.add(Flag.PARAMETER);
+        if ((mask&VARARGS) != 0) flags.add(Flag.VARARGS);
+        return flags;
+    }
+
     /* Standard Java flags.
      */
     public static final int PUBLIC       = 1<<0;
@@ -271,4 +283,48 @@
     public static boolean isConstant(Symbol.VarSymbol symbol) {
         return symbol.getConstValue() != null;
     }
+
+    public enum Flag {
+
+        PUBLIC("public"),
+        PRIVATE("private"),
+        PROTECTED("protected"),
+        STATIC("static"),
+        FINAL("final"),
+        SYNCHRONIZED("synchronized"),
+        VOLATILE("volatile"),
+        TRANSIENT("transient"),
+        NATIVE("native"),
+        INTERFACE("interface"),
+        ABSTRACT("abstract"),
+        STRICTFP("strictfp"),
+        BRIDGE("bridge"),
+        SYNTHETIC("synthetic"),
+        DEPRECATED("deprecated"),
+        HASINIT("hasinit"),
+        ENUM("enum"),
+        IPROXY("iproxy"),
+        NOOUTERTHIS("noouterthis"),
+        EXISTS("exists"),
+        COMPOUND("compound"),
+        CLASS_SEEN("class_seen"),
+        SOURCE_SEEN("source_seen"),
+        LOCKED("locked"),
+        UNATTRIBUTED("unattributed"),
+        ANONCONSTR("anonconstr"),
+        ACYCLIC("acyclic"),
+        PARAMETER("parameter"),
+        VARARGS("varargs"),
+        PACKAGE("package");
+
+        String name;
+
+        Flag(String name) {
+            this.name = name;
+        }
+
+        public String toString() {
+            return name;
+        }
+    }
 }