54 public static final int ACC_ABSTRACT = 0x0400; // class, inner, method |
54 public static final int ACC_ABSTRACT = 0x0400; // class, inner, method |
55 public static final int ACC_STRICT = 0x0800; // method |
55 public static final int ACC_STRICT = 0x0800; // method |
56 public static final int ACC_SYNTHETIC = 0x1000; // class, inner, field, method |
56 public static final int ACC_SYNTHETIC = 0x1000; // class, inner, field, method |
57 public static final int ACC_ANNOTATION = 0x2000; // class, inner |
57 public static final int ACC_ANNOTATION = 0x2000; // class, inner |
58 public static final int ACC_ENUM = 0x4000; // class, inner, field |
58 public static final int ACC_ENUM = 0x4000; // class, inner, field |
59 public static final int ACC_MODULE = 0x8000; // class, inner, field, method |
59 public static final int ACC_MANDATED = 0x8000; // class, inner, field, method |
60 |
60 |
61 public static enum Kind { Class, InnerClass, Field, Method}; |
61 public static enum Kind { Class, InnerClass, Field, Method}; |
62 |
62 |
63 AccessFlags(ClassReader cr) throws IOException { |
63 AccessFlags(ClassReader cr) throws IOException { |
64 this(cr.readUnsignedShort()); |
64 this(cr.readUnsignedShort()); |
79 public int byteLength() { |
79 public int byteLength() { |
80 return 2; |
80 return 2; |
81 } |
81 } |
82 |
82 |
83 private static final int[] classModifiers = { |
83 private static final int[] classModifiers = { |
84 ACC_PUBLIC, ACC_FINAL, ACC_ABSTRACT, ACC_MODULE |
84 ACC_PUBLIC, ACC_FINAL, ACC_ABSTRACT |
85 }; |
85 }; |
86 |
86 |
87 private static final int[] classFlags = { |
87 private static final int[] classFlags = { |
88 ACC_PUBLIC, ACC_FINAL, ACC_SUPER, ACC_INTERFACE, ACC_ABSTRACT, |
88 ACC_PUBLIC, ACC_FINAL, ACC_SUPER, ACC_INTERFACE, ACC_ABSTRACT, |
89 ACC_SYNTHETIC, ACC_ANNOTATION, ACC_ENUM, ACC_MODULE |
89 ACC_SYNTHETIC, ACC_ANNOTATION, ACC_ENUM |
90 }; |
90 }; |
91 |
91 |
92 public Set<String> getClassModifiers() { |
92 public Set<String> getClassModifiers() { |
93 int f = ((flags & ACC_INTERFACE) != 0 ? flags & ~ACC_ABSTRACT : flags); |
93 int f = ((flags & ACC_INTERFACE) != 0 ? flags & ~ACC_ABSTRACT : flags); |
94 return getModifiers(f, classModifiers, Kind.Class); |
94 return getModifiers(f, classModifiers, Kind.Class); |
98 return getFlags(classFlags, Kind.Class); |
98 return getFlags(classFlags, Kind.Class); |
99 } |
99 } |
100 |
100 |
101 private static final int[] innerClassModifiers = { |
101 private static final int[] innerClassModifiers = { |
102 ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, |
102 ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, |
103 ACC_ABSTRACT, ACC_MODULE |
103 ACC_ABSTRACT |
104 }; |
104 }; |
105 |
105 |
106 private static final int[] innerClassFlags = { |
106 private static final int[] innerClassFlags = { |
107 ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, ACC_SUPER, |
107 ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, ACC_SUPER, |
108 ACC_INTERFACE, ACC_ABSTRACT, ACC_SYNTHETIC, ACC_ANNOTATION, ACC_ENUM, ACC_MODULE |
108 ACC_INTERFACE, ACC_ABSTRACT, ACC_SYNTHETIC, ACC_ANNOTATION, ACC_ENUM |
109 }; |
109 }; |
110 |
110 |
111 public Set<String> getInnerClassModifiers() { |
111 public Set<String> getInnerClassModifiers() { |
112 int f = ((flags & ACC_INTERFACE) != 0 ? flags & ~ACC_ABSTRACT : flags); |
112 int f = ((flags & ACC_INTERFACE) != 0 ? flags & ~ACC_ABSTRACT : flags); |
113 return getModifiers(f, innerClassModifiers, Kind.InnerClass); |
113 return getModifiers(f, innerClassModifiers, Kind.InnerClass); |
117 return getFlags(innerClassFlags, Kind.InnerClass); |
117 return getFlags(innerClassFlags, Kind.InnerClass); |
118 } |
118 } |
119 |
119 |
120 private static final int[] fieldModifiers = { |
120 private static final int[] fieldModifiers = { |
121 ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, |
121 ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, |
122 ACC_VOLATILE, ACC_TRANSIENT, ACC_MODULE |
122 ACC_VOLATILE, ACC_TRANSIENT |
123 }; |
123 }; |
124 |
124 |
125 private static final int[] fieldFlags = { |
125 private static final int[] fieldFlags = { |
126 ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, |
126 ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, |
127 ACC_VOLATILE, ACC_TRANSIENT, ACC_SYNTHETIC, ACC_ENUM, ACC_MODULE |
127 ACC_VOLATILE, ACC_TRANSIENT, ACC_SYNTHETIC, ACC_ENUM |
128 }; |
128 }; |
129 |
129 |
130 public Set<String> getFieldModifiers() { |
130 public Set<String> getFieldModifiers() { |
131 return getModifiers(fieldModifiers, Kind.Field); |
131 return getModifiers(fieldModifiers, Kind.Field); |
132 } |
132 } |
135 return getFlags(fieldFlags, Kind.Field); |
135 return getFlags(fieldFlags, Kind.Field); |
136 } |
136 } |
137 |
137 |
138 private static final int[] methodModifiers = { |
138 private static final int[] methodModifiers = { |
139 ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, |
139 ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, |
140 ACC_SYNCHRONIZED, ACC_NATIVE, ACC_ABSTRACT, ACC_STRICT, ACC_MODULE |
140 ACC_SYNCHRONIZED, ACC_NATIVE, ACC_ABSTRACT, ACC_STRICT |
141 }; |
141 }; |
142 |
142 |
143 private static final int[] methodFlags = { |
143 private static final int[] methodFlags = { |
144 ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, |
144 ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL, |
145 ACC_SYNCHRONIZED, ACC_BRIDGE, ACC_VARARGS, ACC_NATIVE, ACC_ABSTRACT, |
145 ACC_SYNCHRONIZED, ACC_BRIDGE, ACC_VARARGS, ACC_NATIVE, ACC_ABSTRACT, |
146 ACC_STRICT, ACC_SYNTHETIC, ACC_MODULE |
146 ACC_STRICT, ACC_SYNTHETIC |
147 }; |
147 }; |
148 |
148 |
149 public Set<String> getMethodModifiers() { |
149 public Set<String> getMethodModifiers() { |
150 return getModifiers(methodModifiers, Kind.Method); |
150 return getModifiers(methodModifiers, Kind.Method); |
151 } |
151 } |