001 /* Copyright 2000, 2001, Compaq Computer Corporation */
002
003 package javafe.ast;
004
005 import javafe.parser.ParseUtil;
006
007 /**
008 * This class defines the constants used to identify the different
009 * kinds of modifiers, and static methods to test for modifiers.
010 */
011
012 public class Modifiers {
013
014 public static final int NONE = 0X000;
015 public static final int ACC_PUBLIC = 0X001;
016 public static final int ACC_PRIVATE = 0X002;
017 public static final int ACC_PROTECTED = 0X004;
018 public static final int ACC_STATIC = 0X008;
019 public static final int ACC_FINAL = 0X010;
020 public static final int ACC_SYNCHRONIZED = 0X020;
021 public static final int ACC_VOLATILE = 0X040;
022 public static final int ACC_TRANSIENT = 0X080;
023 public static final int ACC_NATIVE = 0X100;
024 public static final int ACC_ABSTRACT = 0X400;
025 public static final int ACC_STRICT = 0X800;
026
027 public static final int SIZE_MODIFIER_BITSET = 16;
028
029 public static final int ACCESS_MODIFIERS
030 = ACC_PUBLIC | ACC_PROTECTED | ACC_PRIVATE;
031
032 // ----------------------------------------------------------------------
033
034 //@ ensures \result != null;
035 public static /*@non_null*/String toString(int modifiers) {
036 String s = "";
037
038 for (int i = 0; i < ParseUtil.modifierKeywords.length; i++) {
039 if ((modifiers & (1<<i)) != 0) {
040 s += name(i) + " ";
041 }
042 }
043
044 return s;
045 }
046
047 /** Takes a modifier index (that is, the index of the bit that
048 * the "modifiers" field represents) and returns the corresponding
049 * Java keyword as a String.
050 */
051
052 //@ requires 0 <= modifierIndex;
053 //@ requires modifierIndex < ParseUtil.modifierKeywords.length;
054 //@ ensures \result != null;
055 public static String name(int modifierIndex) {
056 int tag = ParseUtil.modifierKeywords[modifierIndex];
057 // Note: The following "TagConstants" is not the one in this package
058 // (javafe.ast), but the one in javafe.parser.
059 return javafe.parser.TagConstants.toString(tag);
060 }
061
062 public static boolean isStrictFP(int modifiers) {
063 return (modifiers & ACC_STRICT) != 0;
064 }
065
066 public static boolean isAbstract(int modifiers) {
067 return (modifiers & ACC_ABSTRACT) != 0;
068 }
069
070 public static boolean isNative(int modifiers) {
071 return (modifiers & ACC_NATIVE) != 0;
072 }
073
074 public static boolean isFinal(int modifiers) {
075 return (modifiers & ACC_FINAL) != 0;
076 }
077
078 public static boolean isPrivate(int modifiers) {
079 return (modifiers & ACC_PRIVATE) != 0;
080 }
081
082 public static boolean isProtected(int modifiers) {
083 return (modifiers & ACC_PROTECTED) != 0;
084 }
085
086 public static boolean isPublic(int modifiers) {
087 return (modifiers & ACC_PUBLIC) != 0;
088 }
089
090 public static boolean isPackage(int modifiers) {
091 return (modifiers & (ACC_PRIVATE | ACC_PROTECTED | ACC_PUBLIC)) == 0;
092 }
093
094 public static boolean isVolatile(int modifiers) {
095 return (modifiers & ACC_VOLATILE) != 0;
096 }
097
098 public static boolean isStatic(int modifiers) {
099 return (modifiers & ACC_STATIC) != 0;
100 }
101
102 public static boolean isSynchronized(int modifiers) {
103 return (modifiers & ACC_SYNCHRONIZED) != 0;
104 }
105
106 }