bug fixes
[IRC.git] / Robust / src / IR / Tree / Modifiers.java
1 package IR.Tree;
2
3 import java.util.Vector;
4
5 import IR.AnnotationDescriptor;
6
7 public class Modifiers {
8   public static final int PUBLIC=1;
9   public static final int PROTECTED=2;
10   public static final int PRIVATE=4;
11   public static final int STATIC=8;
12   public static final int ABSTRACT=16;
13   public static final int FINAL=32;
14   public static final int NATIVE=64;
15   public static final int SYNCHRONIZED=128;
16   public static final int TRANSIENT=256;
17   public static final int VOLATILE=512;
18 //      STRICTFP=1024
19   public static final int ATOMIC=2048;
20
21   // java annotation can be intermixed freely with modifiers
22   // so Modifiers  maintains the list of annotations for later usage
23   Vector<AnnotationDescriptor> annotations;
24   private int value;
25
26   public Modifiers() {
27     value=0;
28     annotations=new Vector<AnnotationDescriptor>();
29   }
30
31   public Modifiers(int v) {
32     value=v;
33   }
34
35   public void addAnnotation(AnnotationDescriptor an) {
36     annotations.add(an);
37   }
38
39   public Vector<AnnotationDescriptor> getAnnotations() {
40     return annotations;
41   }
42
43   public void addModifier(int mod) {
44     value|=mod;
45     if (isSynchronized()&&isNative())
46       throw new Error("Synchronized native methods are not supported");
47   }
48
49   public boolean isAtomic() {
50     return ((value&ATOMIC)!=0);
51   }
52
53   public boolean isAbstract() {
54     return ((value&ABSTRACT)!=0);
55   }
56
57   public boolean isSynchronized() {
58     return ((value&SYNCHRONIZED)!=0);
59   }
60
61   public boolean isStatic() {
62     return ((value&STATIC)!=0);
63   }
64
65   public boolean isNative() {
66     return ((value&NATIVE)!=0);
67   }
68
69   public boolean isFinal() {
70     return ((value&FINAL)!=0);
71   }
72
73   public boolean isVolatile() {
74     return ((value&VOLATILE)!= 0);
75   }
76
77   public boolean isTransient() {
78     return ((value & TRANSIENT) != 0);
79   }
80
81   public String toString() {
82     String st="";
83     if ((value&PUBLIC)!=0)
84       st+="public ";
85     if ((value&PROTECTED)!=0)
86       st+="protected ";
87     if ((value&PRIVATE)!=0)
88       st+="private ";
89     if ((value&STATIC)!=0)
90       st+="static ";
91     if ((value&FINAL)!=0)
92       st+="final ";
93     if ((value&NATIVE)!=0)
94       st+="native ";
95     if ((value&SYNCHRONIZED)!=0)
96       st+="synchronized ";
97     if ((value&ATOMIC)!=0)
98       st+="atomic ";
99     if ((value&ABSTRACT)!=0)
100       st+="abstract ";
101     if((value&VOLATILE)!=0)
102       st += "volatile ";
103     if((value&TRANSIENT)!=0)
104       st += "transient ";
105     return st;
106   }
107 }