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    }