Home | History | Annotate | Download | only in javassist
      1 /*
      2  * Javassist, a Java-bytecode translator toolkit.
      3  * Copyright (C) 1999-2007 Shigeru Chiba. All Rights Reserved.
      4  *
      5  * The contents of this file are subject to the Mozilla Public License Version
      6  * 1.1 (the "License"); you may not use this file except in compliance with
      7  * the License.  Alternatively, the contents of this file may be used under
      8  * the terms of the GNU Lesser General Public License Version 2.1 or later.
      9  *
     10  * Software distributed under the License is distributed on an "AS IS" basis,
     11  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
     12  * for the specific language governing rights and limitations under the
     13  * License.
     14  */
     15 
     16 package javassist;
     17 
     18 import javassist.bytecode.AccessFlag;
     19 
     20 /**
     21  * The Modifier class provides static methods and constants to decode
     22  * class and member access modifiers.  The constant values are equivalent
     23  * to the corresponding values in <code>javassist.bytecode.AccessFlag</code>.
     24  *
     25  * <p>All the methods/constants in this class are compatible with
     26  * ones in <code>java.lang.reflect.Modifier</code>.
     27  *
     28  * @see CtClass#getModifiers()
     29  */
     30 public class Modifier {
     31     public static final int PUBLIC    = AccessFlag.PUBLIC;
     32     public static final int PRIVATE   = AccessFlag.PRIVATE;
     33     public static final int PROTECTED = AccessFlag.PROTECTED;
     34     public static final int STATIC    = AccessFlag.STATIC;
     35     public static final int FINAL     = AccessFlag.FINAL;
     36     public static final int SYNCHRONIZED = AccessFlag.SYNCHRONIZED;
     37     public static final int VOLATILE  = AccessFlag.VOLATILE;
     38     public static final int VARARGS = AccessFlag.VARARGS;
     39     public static final int TRANSIENT = AccessFlag.TRANSIENT;
     40     public static final int NATIVE    = AccessFlag.NATIVE;
     41     public static final int INTERFACE = AccessFlag.INTERFACE;
     42     public static final int ABSTRACT  = AccessFlag.ABSTRACT;
     43     public static final int STRICT    = AccessFlag.STRICT;
     44     public static final int ANNOTATION = AccessFlag.ANNOTATION;
     45     public static final int ENUM      = AccessFlag.ENUM;
     46 
     47     /**
     48      * Returns true if the modifiers include the <tt>public</tt>
     49      * modifier.
     50      */
     51     public static boolean isPublic(int mod) {
     52         return (mod & PUBLIC) != 0;
     53     }
     54 
     55     /**
     56      * Returns true if the modifiers include the <tt>private</tt>
     57      * modifier.
     58      */
     59     public static boolean isPrivate(int mod) {
     60         return (mod & PRIVATE) != 0;
     61     }
     62 
     63     /**
     64      * Returns true if the modifiers include the <tt>protected</tt>
     65      * modifier.
     66      */
     67     public static boolean isProtected(int mod) {
     68         return (mod & PROTECTED) != 0;
     69     }
     70 
     71     /**
     72      * Returns true if the modifiers do not include either
     73      * <tt>public</tt>, <tt>protected</tt>, or <tt>private</tt>.
     74      */
     75     public static boolean isPackage(int mod) {
     76         return (mod & (PUBLIC | PRIVATE | PROTECTED)) == 0;
     77     }
     78 
     79     /**
     80      * Returns true if the modifiers include the <tt>static</tt>
     81      * modifier.
     82      */
     83     public static boolean isStatic(int mod) {
     84         return (mod & STATIC) != 0;
     85     }
     86 
     87     /**
     88      * Returns true if the modifiers include the <tt>final</tt>
     89      * modifier.
     90      */
     91     public static boolean isFinal(int mod) {
     92         return (mod & FINAL) != 0;
     93     }
     94 
     95     /**
     96      * Returns true if the modifiers include the <tt>synchronized</tt>
     97      * modifier.
     98      */
     99     public static boolean isSynchronized(int mod) {
    100         return (mod & SYNCHRONIZED) != 0;
    101     }
    102 
    103     /**
    104      * Returns true if the modifiers include the <tt>volatile</tt>
    105      * modifier.
    106      */
    107     public static boolean isVolatile(int mod) {
    108         return (mod & VOLATILE) != 0;
    109     }
    110 
    111     /**
    112      * Returns true if the modifiers include the <tt>transient</tt>
    113      * modifier.
    114      */
    115     public static boolean isTransient(int mod) {
    116         return (mod & TRANSIENT) != 0;
    117     }
    118 
    119     /**
    120      * Returns true if the modifiers include the <tt>native</tt>
    121      * modifier.
    122      */
    123     public static boolean isNative(int mod) {
    124         return (mod & NATIVE) != 0;
    125     }
    126 
    127     /**
    128      * Returns true if the modifiers include the <tt>interface</tt>
    129      * modifier.
    130      */
    131     public static boolean isInterface(int mod) {
    132         return (mod & INTERFACE) != 0;
    133     }
    134 
    135     /**
    136      * Returns true if the modifiers include the <tt>annotation</tt>
    137      * modifier.
    138      *
    139      * @since 3.2
    140      */
    141     public static boolean isAnnotation(int mod) {
    142         return (mod & ANNOTATION) != 0;
    143     }
    144 
    145     /**
    146      * Returns true if the modifiers include the <tt>enum</tt>
    147      * modifier.
    148      *
    149      * @since 3.2
    150      */
    151     public static boolean isEnum(int mod) {
    152         return (mod & ENUM) != 0;
    153     }
    154 
    155     /**
    156      * Returns true if the modifiers include the <tt>abstract</tt>
    157      * modifier.
    158      */
    159     public static boolean isAbstract(int mod) {
    160         return (mod & ABSTRACT) != 0;
    161     }
    162 
    163     /**
    164      * Returns true if the modifiers include the <tt>strictfp</tt>
    165      * modifier.
    166      */
    167     public static boolean isStrict(int mod) {
    168         return (mod & STRICT) != 0;
    169     }
    170 
    171     /**
    172      * Truns the public bit on.  The protected and private bits are
    173      * cleared.
    174      */
    175     public static int setPublic(int mod) {
    176         return (mod & ~(PRIVATE | PROTECTED)) | PUBLIC;
    177     }
    178 
    179     /**
    180      * Truns the protected bit on.  The protected and public bits are
    181      * cleared.
    182      */
    183     public static int setProtected(int mod) {
    184         return (mod & ~(PRIVATE | PUBLIC)) | PROTECTED;
    185     }
    186 
    187     /**
    188      * Truns the private bit on.  The protected and private bits are
    189      * cleared.
    190      */
    191     public static int setPrivate(int mod) {
    192         return (mod & ~(PROTECTED | PUBLIC)) | PRIVATE;
    193     }
    194 
    195     /**
    196      * Clears the public, protected, and private bits.
    197      */
    198     public static int setPackage(int mod) {
    199         return (mod & ~(PROTECTED | PUBLIC | PRIVATE));
    200     }
    201 
    202     /**
    203      * Clears a specified bit in <code>mod</code>.
    204      */
    205     public static int clear(int mod, int clearBit) {
    206         return mod & ~clearBit;
    207     }
    208 
    209     /**
    210      * Return a string describing the access modifier flags in
    211      * the specified modifier.
    212      *
    213      * @param mod   modifier flags.
    214      */
    215     public static String toString(int mod) {
    216         return java.lang.reflect.Modifier.toString(mod);
    217     }
    218 }
    219