1.1 --- a/src/share/classes/com/sun/tools/javac/code/Flags.java Thu Jul 24 11:12:41 2008 +0100 1.2 +++ b/src/share/classes/com/sun/tools/javac/code/Flags.java Thu Jul 24 19:06:57 2008 +0100 1.3 @@ -25,6 +25,7 @@ 1.4 1.5 package com.sun.tools.javac.code; 1.6 1.7 +import java.util.EnumSet; 1.8 import java.util.Collections; 1.9 import java.util.Map; 1.10 import java.util.Set; 1.11 @@ -43,38 +44,49 @@ 1.12 1.13 public static String toString(long flags) { 1.14 StringBuffer buf = new StringBuffer(); 1.15 - if ((flags&PUBLIC) != 0) buf.append("public "); 1.16 - if ((flags&PRIVATE) != 0) buf.append("private "); 1.17 - if ((flags&PROTECTED) != 0) buf.append("protected "); 1.18 - if ((flags&STATIC) != 0) buf.append("static "); 1.19 - if ((flags&FINAL) != 0) buf.append("final "); 1.20 - if ((flags&SYNCHRONIZED) != 0) buf.append("synchronized "); 1.21 - if ((flags&VOLATILE) != 0) buf.append("volatile "); 1.22 - if ((flags&TRANSIENT) != 0) buf.append("transient "); 1.23 - if ((flags&NATIVE) != 0) buf.append("native "); 1.24 - if ((flags&INTERFACE) != 0) buf.append("interface "); 1.25 - if ((flags&ABSTRACT) != 0) buf.append("abstract "); 1.26 - if ((flags&STRICTFP) != 0) buf.append("strictfp "); 1.27 - if ((flags&BRIDGE) != 0) buf.append("bridge "); 1.28 - if ((flags&SYNTHETIC) != 0) buf.append("synthetic "); 1.29 - if ((flags&DEPRECATED) != 0) buf.append("deprecated "); 1.30 - if ((flags&HASINIT) != 0) buf.append("hasinit "); 1.31 - if ((flags&ENUM) != 0) buf.append("enum "); 1.32 - if ((flags&IPROXY) != 0) buf.append("iproxy "); 1.33 - if ((flags&NOOUTERTHIS) != 0) buf.append("noouterthis "); 1.34 - if ((flags&EXISTS) != 0) buf.append("exists "); 1.35 - if ((flags&COMPOUND) != 0) buf.append("compound "); 1.36 - if ((flags&CLASS_SEEN) != 0) buf.append("class_seen "); 1.37 - if ((flags&SOURCE_SEEN) != 0) buf.append("source_seen "); 1.38 - if ((flags&LOCKED) != 0) buf.append("locked "); 1.39 - if ((flags&UNATTRIBUTED) != 0) buf.append("unattributed "); 1.40 - if ((flags&ANONCONSTR) != 0) buf.append("anonconstr "); 1.41 - if ((flags&ACYCLIC) != 0) buf.append("acyclic "); 1.42 - if ((flags&PARAMETER) != 0) buf.append("parameter "); 1.43 - if ((flags&VARARGS) != 0) buf.append("varargs "); 1.44 + String sep = ""; 1.45 + for (Flag s : asFlagSet(flags)) { 1.46 + buf.append(sep); 1.47 + buf.append(s); 1.48 + sep = " "; 1.49 + } 1.50 return buf.toString(); 1.51 } 1.52 1.53 + public static EnumSet<Flag> asFlagSet(long mask) { 1.54 + EnumSet<Flag> flags = EnumSet.noneOf(Flag.class); 1.55 + if ((mask&PUBLIC) != 0) flags.add(Flag.PUBLIC); 1.56 + if ((mask&PRIVATE) != 0) flags.add(Flag.PRIVATE); 1.57 + if ((mask&PROTECTED) != 0) flags.add(Flag.PROTECTED); 1.58 + if ((mask&STATIC) != 0) flags.add(Flag.STATIC); 1.59 + if ((mask&FINAL) != 0) flags.add(Flag.FINAL); 1.60 + if ((mask&SYNCHRONIZED) != 0) flags.add(Flag.SYNCHRONIZED); 1.61 + if ((mask&VOLATILE) != 0) flags.add(Flag.VOLATILE); 1.62 + if ((mask&TRANSIENT) != 0) flags.add(Flag.TRANSIENT); 1.63 + if ((mask&NATIVE) != 0) flags.add(Flag.NATIVE); 1.64 + if ((mask&INTERFACE) != 0) flags.add(Flag.INTERFACE); 1.65 + if ((mask&ABSTRACT) != 0) flags.add(Flag.ABSTRACT); 1.66 + if ((mask&STRICTFP) != 0) flags.add(Flag.STRICTFP); 1.67 + if ((mask&BRIDGE) != 0) flags.add(Flag.BRIDGE); 1.68 + if ((mask&SYNTHETIC) != 0) flags.add(Flag.SYNTHETIC); 1.69 + if ((mask&DEPRECATED) != 0) flags.add(Flag.DEPRECATED); 1.70 + if ((mask&HASINIT) != 0) flags.add(Flag.HASINIT); 1.71 + if ((mask&ENUM) != 0) flags.add(Flag.ENUM); 1.72 + if ((mask&IPROXY) != 0) flags.add(Flag.IPROXY); 1.73 + if ((mask&NOOUTERTHIS) != 0) flags.add(Flag.NOOUTERTHIS); 1.74 + if ((mask&EXISTS) != 0) flags.add(Flag.EXISTS); 1.75 + if ((mask&COMPOUND) != 0) flags.add(Flag.COMPOUND); 1.76 + if ((mask&CLASS_SEEN) != 0) flags.add(Flag.CLASS_SEEN); 1.77 + if ((mask&SOURCE_SEEN) != 0) flags.add(Flag.SOURCE_SEEN); 1.78 + if ((mask&LOCKED) != 0) flags.add(Flag.LOCKED); 1.79 + if ((mask&UNATTRIBUTED) != 0) flags.add(Flag.UNATTRIBUTED); 1.80 + if ((mask&ANONCONSTR) != 0) flags.add(Flag.ANONCONSTR); 1.81 + if ((mask&ACYCLIC) != 0) flags.add(Flag.ACYCLIC); 1.82 + if ((mask&PARAMETER) != 0) flags.add(Flag.PARAMETER); 1.83 + if ((mask&VARARGS) != 0) flags.add(Flag.VARARGS); 1.84 + return flags; 1.85 + } 1.86 + 1.87 /* Standard Java flags. 1.88 */ 1.89 public static final int PUBLIC = 1<<0; 1.90 @@ -271,4 +283,48 @@ 1.91 public static boolean isConstant(Symbol.VarSymbol symbol) { 1.92 return symbol.getConstValue() != null; 1.93 } 1.94 + 1.95 + public enum Flag { 1.96 + 1.97 + PUBLIC("public"), 1.98 + PRIVATE("private"), 1.99 + PROTECTED("protected"), 1.100 + STATIC("static"), 1.101 + FINAL("final"), 1.102 + SYNCHRONIZED("synchronized"), 1.103 + VOLATILE("volatile"), 1.104 + TRANSIENT("transient"), 1.105 + NATIVE("native"), 1.106 + INTERFACE("interface"), 1.107 + ABSTRACT("abstract"), 1.108 + STRICTFP("strictfp"), 1.109 + BRIDGE("bridge"), 1.110 + SYNTHETIC("synthetic"), 1.111 + DEPRECATED("deprecated"), 1.112 + HASINIT("hasinit"), 1.113 + ENUM("enum"), 1.114 + IPROXY("iproxy"), 1.115 + NOOUTERTHIS("noouterthis"), 1.116 + EXISTS("exists"), 1.117 + COMPOUND("compound"), 1.118 + CLASS_SEEN("class_seen"), 1.119 + SOURCE_SEEN("source_seen"), 1.120 + LOCKED("locked"), 1.121 + UNATTRIBUTED("unattributed"), 1.122 + ANONCONSTR("anonconstr"), 1.123 + ACYCLIC("acyclic"), 1.124 + PARAMETER("parameter"), 1.125 + VARARGS("varargs"), 1.126 + PACKAGE("package"); 1.127 + 1.128 + String name; 1.129 + 1.130 + Flag(String name) { 1.131 + this.name = name; 1.132 + } 1.133 + 1.134 + public String toString() { 1.135 + return name; 1.136 + } 1.137 + } 1.138 }