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