1/*
2 * ProGuard -- shrinking, optimization, obfuscation, and preverification
3 *             of Java bytecode.
4 *
5 * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu)
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the Free
9 * Software Foundation; either version 2 of the License, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 * more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21package proguard.classfile;
22
23/**
24 * Constants used in representing a Java class file (*.class).
25 *
26 * @author Eric Lafortune
27 */
28public class ClassConstants
29{
30    public static final String CLASS_FILE_EXTENSION = ".class";
31
32    public static final int MAGIC = 0xCAFEBABE;
33
34    public static final int CLASS_VERSION_1_0_MAJOR = 45;
35    public static final int CLASS_VERSION_1_0_MINOR = 3;
36    public static final int CLASS_VERSION_1_2_MAJOR = 46;
37    public static final int CLASS_VERSION_1_2_MINOR = 0;
38    public static final int CLASS_VERSION_1_3_MAJOR = 47;
39    public static final int CLASS_VERSION_1_3_MINOR = 0;
40    public static final int CLASS_VERSION_1_4_MAJOR = 48;
41    public static final int CLASS_VERSION_1_4_MINOR = 0;
42    public static final int CLASS_VERSION_1_5_MAJOR = 49;
43    public static final int CLASS_VERSION_1_5_MINOR = 0;
44    public static final int CLASS_VERSION_1_6_MAJOR = 50;
45    public static final int CLASS_VERSION_1_6_MINOR = 0;
46    public static final int CLASS_VERSION_1_7_MAJOR = 51;
47    public static final int CLASS_VERSION_1_7_MINOR = 0;
48    public static final int CLASS_VERSION_1_8_MAJOR = 52;
49    public static final int CLASS_VERSION_1_8_MINOR = 0;
50
51    public static final int CLASS_VERSION_1_0 = (CLASS_VERSION_1_0_MAJOR << 16) | CLASS_VERSION_1_0_MINOR;
52    public static final int CLASS_VERSION_1_2 = (CLASS_VERSION_1_2_MAJOR << 16) | CLASS_VERSION_1_2_MINOR;
53    public static final int CLASS_VERSION_1_3 = (CLASS_VERSION_1_3_MAJOR << 16) | CLASS_VERSION_1_3_MINOR;
54    public static final int CLASS_VERSION_1_4 = (CLASS_VERSION_1_4_MAJOR << 16) | CLASS_VERSION_1_4_MINOR;
55    public static final int CLASS_VERSION_1_5 = (CLASS_VERSION_1_5_MAJOR << 16) | CLASS_VERSION_1_5_MINOR;
56    public static final int CLASS_VERSION_1_6 = (CLASS_VERSION_1_6_MAJOR << 16) | CLASS_VERSION_1_6_MINOR;
57    public static final int CLASS_VERSION_1_7 = (CLASS_VERSION_1_7_MAJOR << 16) | CLASS_VERSION_1_7_MINOR;
58    public static final int CLASS_VERSION_1_8 = (CLASS_VERSION_1_8_MAJOR << 16) | CLASS_VERSION_1_8_MINOR;
59
60    public static final int ACC_PUBLIC       = 0x0001;
61    public static final int ACC_PRIVATE      = 0x0002;
62    public static final int ACC_PROTECTED    = 0x0004;
63    public static final int ACC_STATIC       = 0x0008;
64    public static final int ACC_FINAL        = 0x0010;
65    public static final int ACC_SUPER        = 0x0020;
66    public static final int ACC_SYNCHRONIZED = 0x0020;
67    public static final int ACC_VOLATILE     = 0x0040;
68    public static final int ACC_TRANSIENT    = 0x0080;
69    public static final int ACC_BRIDGE       = 0x0040;
70    public static final int ACC_VARARGS      = 0x0080;
71    public static final int ACC_NATIVE       = 0x0100;
72    public static final int ACC_INTERFACE    = 0x0200;
73    public static final int ACC_ABSTRACT     = 0x0400;
74    public static final int ACC_STRICT       = 0x0800;
75    public static final int ACC_SYNTHETIC    = 0x1000;
76    public static final int ACC_ANNOTATTION  = 0x2000;
77    public static final int ACC_ENUM         = 0x4000;
78    public static final int ACC_MANDATED     = 0x8000;
79
80    public static final int VALID_ACC_CLASS     = ACC_PUBLIC       |
81                                                  ACC_FINAL        |
82                                                  ACC_SUPER        |
83                                                  ACC_INTERFACE    |
84                                                  ACC_ABSTRACT     |
85                                                  ACC_SYNTHETIC    |
86                                                  ACC_ANNOTATTION  |
87                                                  ACC_ENUM;
88    public static final int VALID_ACC_FIELD     = ACC_PUBLIC       |
89                                                  ACC_PRIVATE      |
90                                                  ACC_PROTECTED    |
91                                                  ACC_STATIC       |
92                                                  ACC_FINAL        |
93                                                  ACC_VOLATILE     |
94                                                  ACC_TRANSIENT    |
95                                                  ACC_SYNTHETIC    |
96                                                  ACC_ENUM;
97    public static final int VALID_ACC_METHOD    = ACC_PUBLIC       |
98                                                  ACC_PRIVATE      |
99                                                  ACC_PROTECTED    |
100                                                  ACC_STATIC       |
101                                                  ACC_FINAL        |
102                                                  ACC_SYNCHRONIZED |
103                                                  ACC_BRIDGE       |
104                                                  ACC_VARARGS      |
105                                                  ACC_NATIVE       |
106                                                  ACC_ABSTRACT     |
107                                                  ACC_STRICT       |
108                                                  ACC_SYNTHETIC;
109    public static final int VALID_ACC_PARAMETER = ACC_FINAL        |
110                                                  ACC_SYNTHETIC    |
111                                                  ACC_MANDATED;
112
113    public static final int CONSTANT_Utf8               = 1;
114    public static final int CONSTANT_Integer            = 3;
115    public static final int CONSTANT_Float              = 4;
116    public static final int CONSTANT_Long               = 5;
117    public static final int CONSTANT_Double             = 6;
118    public static final int CONSTANT_Class              = 7;
119    public static final int CONSTANT_String             = 8;
120    public static final int CONSTANT_Fieldref           = 9;
121    public static final int CONSTANT_Methodref          = 10;
122    public static final int CONSTANT_InterfaceMethodref = 11;
123    public static final int CONSTANT_NameAndType        = 12;
124    public static final int CONSTANT_MethodHandle       = 15;
125    public static final int CONSTANT_MethodType         = 16;
126    public static final int CONSTANT_InvokeDynamic      = 18;
127
128    public static final int REF_getField         = 1;
129    public static final int REF_getStatic        = 2;
130    public static final int REF_putField         = 3;
131    public static final int REF_putStatic        = 4;
132    public static final int REF_invokeVirtual    = 5;
133    public static final int REF_invokeStatic     = 6;
134    public static final int REF_invokeSpecial    = 7;
135    public static final int REF_newInvokeSpecial = 8;
136    public static final int REF_invokeInterface  = 9;
137
138    public static final String ATTR_BootstrapMethods                     = "BootstrapMethods";
139    public static final String ATTR_SourceFile                           = "SourceFile";
140    public static final String ATTR_SourceDir                            = "SourceDir";
141    public static final String ATTR_InnerClasses                         = "InnerClasses";
142    public static final String ATTR_EnclosingMethod                      = "EnclosingMethod";
143    public static final String ATTR_Deprecated                           = "Deprecated";
144    public static final String ATTR_Synthetic                            = "Synthetic";
145    public static final String ATTR_Signature                            = "Signature";
146    public static final String ATTR_ConstantValue                        = "ConstantValue";
147    public static final String ATTR_MethodParameters                     = "MethodParameters";
148    public static final String ATTR_Exceptions                           = "Exceptions";
149    public static final String ATTR_Code                                 = "Code";
150    public static final String ATTR_StackMap                             = "StackMap";
151    public static final String ATTR_StackMapTable                        = "StackMapTable";
152    public static final String ATTR_LineNumberTable                      = "LineNumberTable";
153    public static final String ATTR_LocalVariableTable                   = "LocalVariableTable";
154    public static final String ATTR_LocalVariableTypeTable               = "LocalVariableTypeTable";
155    public static final String ATTR_RuntimeVisibleAnnotations            = "RuntimeVisibleAnnotations";
156    public static final String ATTR_RuntimeInvisibleAnnotations          = "RuntimeInvisibleAnnotations";
157    public static final String ATTR_RuntimeVisibleParameterAnnotations   = "RuntimeVisibleParameterAnnotations";
158    public static final String ATTR_RuntimeInvisibleParameterAnnotations = "RuntimeInvisibleParameterAnnotations";
159    public static final String ATTR_RuntimeVisibleTypeAnnotations        = "RuntimeVisibleTypeAnnotations";
160    public static final String ATTR_RuntimeInvisibleTypeAnnotations      = "RuntimeInvisibleTypeAnnotations";
161    public static final String ATTR_AnnotationDefault                    = "AnnotationDefault";
162
163    public static final int ANNOTATION_TARGET_ParameterGenericClass             = 0x00;
164    public static final int ANNOTATION_TARGET_ParameterGenericMethod            = 0x01;
165    public static final int ANNOTATION_TARGET_Extends                           = 0x10;
166    public static final int ANNOTATION_TARGET_BoundGenericClass                 = 0x11;
167    public static final int ANNOTATION_TARGET_BoundGenericMethod                = 0x12;
168    public static final int ANNOTATION_TARGET_Field                             = 0x13;
169    public static final int ANNOTATION_TARGET_Return                            = 0x14;
170    public static final int ANNOTATION_TARGET_Receiver                          = 0x15;
171    public static final int ANNOTATION_TARGET_Parameter                         = 0x16;
172    public static final int ANNOTATION_TARGET_Throws                            = 0x17;
173    public static final int ANNOTATION_TARGET_LocalVariable                     = 0x40;
174    public static final int ANNOTATION_TARGET_ResourceVariable                  = 0x41;
175    public static final int ANNOTATION_TARGET_Catch                             = 0x42;
176    public static final int ANNOTATION_TARGET_InstanceOf                        = 0x43;
177    public static final int ANNOTATION_TARGET_New                               = 0x44;
178    public static final int ANNOTATION_TARGET_MethodReferenceNew                = 0x45;
179    public static final int ANNOTATION_TARGET_MethodReference                   = 0x46;
180    public static final int ANNOTATION_TARGET_Cast                              = 0x47;
181    public static final int ANNOTATION_TARGET_ArgumentGenericMethodNew          = 0x48;
182    public static final int ANNOTATION_TARGET_ArgumentGenericMethod             = 0x49;
183    public static final int ANNOTATION_TARGET_ArgumentGenericMethodReferenceNew = 0x4a;
184    public static final int ANNOTATION_TARGET_ArgumentGenericMethodReference    = 0x4b;
185
186    public static final char ELEMENT_VALUE_STRING_CONSTANT = 's';
187    public static final char ELEMENT_VALUE_ENUM_CONSTANT   = 'e';
188    public static final char ELEMENT_VALUE_CLASS           = 'c';
189    public static final char ELEMENT_VALUE_ANNOTATION      = '@';
190    public static final char ELEMENT_VALUE_ARRAY           = '[';
191
192    public static final char PACKAGE_SEPARATOR        = '/';
193    public static final char INNER_CLASS_SEPARATOR    = '$';
194    public static final char SPECIAL_CLASS_CHARACTER  = '-';
195    public static final char SPECIAL_MEMBER_SEPARATOR = '$';
196
197    public static final char METHOD_ARGUMENTS_OPEN  = '(';
198    public static final char METHOD_ARGUMENTS_CLOSE = ')';
199
200    public static final String PACKAGE_JAVA_LANG                        = "java/lang/";
201    public static final String NAME_JAVA_LANG_OBJECT                    = "java/lang/Object";
202    public static final String TYPE_JAVA_LANG_OBJECT                    = "Ljava/lang/Object;";
203    public static final String NAME_JAVA_LANG_CLONEABLE                 = "java/lang/Cloneable";
204    public static final String NAME_JAVA_LANG_THROWABLE                 = "java/lang/Throwable";
205    public static final String NAME_JAVA_LANG_CLASS                     = "java/lang/Class";
206    public static final String NAME_JAVA_LANG_STRING                    = "java/lang/String";
207    public static final String NAME_JAVA_LANG_STRING_BUFFER             = "java/lang/StringBuffer";
208    public static final String NAME_JAVA_LANG_STRING_BUILDER            = "java/lang/StringBuilder";
209    public static final String NAME_JAVA_LANG_INVOKE_METHOD_HANDLE      = "java/lang/invoke/MethodHandle";
210    public static final String NAME_JAVA_LANG_INVOKE_METHOD_TYPE        = "java/lang/invoke/MethodType";
211    public static final String NAME_JAVA_LANG_VOID                      = "java/lang/Void";
212    public static final String NAME_JAVA_LANG_BOOLEAN                   = "java/lang/Boolean";
213    public static final String NAME_JAVA_LANG_BYTE                      = "java/lang/Byte";
214    public static final String NAME_JAVA_LANG_SHORT                     = "java/lang/Short";
215    public static final String NAME_JAVA_LANG_CHARACTER                 = "java/lang/Character";
216    public static final String NAME_JAVA_LANG_INTEGER                   = "java/lang/Integer";
217    public static final String NAME_JAVA_LANG_LONG                      = "java/lang/Long";
218    public static final String NAME_JAVA_LANG_FLOAT                     = "java/lang/Float";
219    public static final String NAME_JAVA_LANG_DOUBLE                    = "java/lang/Double";
220    public static final String NAME_JAVA_LANG_MATH                      = "java/lang/Math";
221    public static final String NAME_JAVA_LANG_SYSTEM                    = "java/lang/System";
222    public static final String NAME_JAVA_LANG_RUNTIME                   = "java/lang/Runtime";
223    public static final String NAME_JAVA_LANG_REFLECT_ARRAY             = "java/lang/reflect/Array";
224    public static final String NAME_JAVA_LANG_REFLECT_FIELD             = "java/lang/reflect/Field";
225    public static final String NAME_JAVA_LANG_REFLECT_METHOD            = "java/lang/reflect/Method";
226    public static final String NAME_JAVA_LANG_REFLECT_CONSTRUCTOR       = "java/lang/reflect/Constructor";
227    public static final String NAME_JAVA_LANG_REFLECT_ACCESSIBLE_OBJECT = "java/lang/reflect/AccessibleObject";
228    public static final String NAME_JAVA_IO_SERIALIZABLE                = "java/io/Serializable";
229
230    public static final String NAME_JAVA_UTIL_CONCURRENT_ATOMIC_ATOMIC_INTEGER_FIELD_UPDATER   = "java/util/concurrent/atomic/AtomicIntegerFieldUpdater";
231    public static final String NAME_JAVA_UTIL_CONCURRENT_ATOMIC_ATOMIC_LONG_FIELD_UPDATER      = "java/util/concurrent/atomic/AtomicLongFieldUpdater";
232    public static final String NAME_JAVA_UTIL_CONCURRENT_ATOMIC_ATOMIC_REFERENCE_FIELD_UPDATER = "java/util/concurrent/atomic/AtomicReferenceFieldUpdater";
233
234    public static final String METHOD_NAME_INIT   = "<init>";
235    public static final String METHOD_TYPE_INIT   = "()V";
236    public static final String METHOD_NAME_CLINIT = "<clinit>";
237    public static final String METHOD_TYPE_CLINIT = "()V";
238
239    public static final String METHOD_NAME_CLASS_FOR_NAME                      = "forName";
240    public static final String METHOD_TYPE_CLASS_FOR_NAME                      = "(Ljava/lang/String;)Ljava/lang/Class;";
241    public static final String METHOD_NAME_CLASS_GET_COMPONENT_TYPE            = "getComponentType";
242    public static final String METHOD_TYPE_CLASS_GET_COMPONENT_TYPE            = "()Ljava/lang/Class;";
243    public static final String METHOD_NAME_CLASS_GET_FIELD                     = "getField";
244    public static final String METHOD_TYPE_CLASS_GET_FIELD                     = "(Ljava/lang/String;)Ljava/lang/reflect/Field;";
245    public static final String METHOD_NAME_CLASS_GET_DECLARED_FIELD            = "getDeclaredField";
246    public static final String METHOD_TYPE_CLASS_GET_DECLARED_FIELD            = "(Ljava/lang/String;)Ljava/lang/reflect/Field;";
247    public static final String CONSTRUCTOR_NAME_CLASS_GET_CONSTRUCTOR          = "getConstructor";
248    public static final String CONSTRUCTOR_TYPE_CLASS_GET_CONSTRUCTOR          = "([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;";
249    public static final String CONSTRUCTOR_NAME_CLASS_GET_DECLARED_CONSTRUCTOR = "getDeclaredConstructor";
250    public static final String CONSTRUCTOR_TYPE_CLASS_GET_DECLARED_CONSTRUCTOR = "([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;";
251    public static final String METHOD_NAME_CLASS_GET_METHOD                    = "getMethod";
252    public static final String METHOD_TYPE_CLASS_GET_METHOD                    = "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;";
253    public static final String METHOD_NAME_CLASS_GET_DECLARED_METHOD           = "getDeclaredMethod";
254    public static final String METHOD_TYPE_CLASS_GET_DECLARED_METHOD           = "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;";
255    public static final String METHOD_NAME_CLASS_GET_DECLARING_CLASS           = "getDeclaringClass";
256    public static final String METHOD_NAME_CLASS_GET_ENCLOSING_CLASS           = "getEnclosingClass";
257    public static final String METHOD_NAME_CLASS_GET_ENCLOSING_CONSTRUCTOR     = "getEnclosingConstructor";
258    public static final String METHOD_NAME_CLASS_GET_ENCLOSING_METHOD          = "getEnclosingMethod";
259    public static final String METHOD_NAME_GET_ANNOTATION                      = "getAnnotation";
260    public static final String METHOD_NAME_GET_ANNOTATIONS                     = "getAnnotations";
261    public static final String METHOD_NAME_GET_DECLARED_ANNOTATIONS            = "getDeclaredAnnotations";
262    public static final String METHOD_NAME_GET_PARAMETER_ANNOTATIONS           = "getParameterAnnotations";
263    public static final String METHOD_NAME_GET_TYPE_PREFIX                     = "getType";
264    public static final String METHOD_NAME_GET_GENERIC_PREFIX                  = "getGeneric";
265    public static final String METHOD_NAME_NEW_UPDATER                         = "newUpdater";
266    public static final String METHOD_TYPE_NEW_INTEGER_UPDATER                 = "(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;";
267    public static final String METHOD_TYPE_NEW_LONG_UPDATER                    = "(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;";
268    public static final String METHOD_TYPE_NEW_REFERENCE_UPDATER               = "(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;";
269
270    public static final String METHOD_NAME_DOT_CLASS_JAVAC = "class$";
271    public static final String METHOD_TYPE_DOT_CLASS_JAVAC = "(Ljava/lang/String;)Ljava/lang/Class;";
272    public static final String METHOD_NAME_DOT_CLASS_JIKES = "class";
273    public static final String METHOD_TYPE_DOT_CLASS_JIKES = "(Ljava/lang/String;Z)Ljava/lang/Class;";
274
275    public static final String METHOD_TYPE_INIT_ENUM = "(Ljava/lang/String;I)V";
276
277    public static final String METHOD_NAME_NEW_INSTANCE = "newInstance";
278    public static final String METHOD_TYPE_NEW_INSTANCE = "()Ljava/lang/Object;";
279
280    public static final String METHOD_NAME_EQUALS                 = "equals";
281    public static final String METHOD_TYPE_EQUALS                 = "(Ljava/lang/Object;)Z";
282    public static final String METHOD_NAME_LENGTH                 = "length";
283    public static final String METHOD_NAME_VALUEOF                = "valueOf";
284    public static final String METHOD_TYPE_VALUEOF_BOOLEAN        = "(Z)Ljava/lang/String;";
285    public static final String METHOD_TYPE_VALUEOF_CHAR           = "(C)Ljava/lang/String;";
286    public static final String METHOD_TYPE_VALUEOF_INT            = "(I)Ljava/lang/String;";
287    public static final String METHOD_TYPE_VALUEOF_LONG           = "(J)Ljava/lang/String;";
288    public static final String METHOD_TYPE_VALUEOF_FLOAT          = "(F)Ljava/lang/String;";
289    public static final String METHOD_TYPE_VALUEOF_DOUBLE         = "(D)Ljava/lang/String;";
290    public static final String METHOD_TYPE_VALUEOF_OBJECT         = "(Ljava/lang/Object;)Ljava/lang/String;";
291
292    public static final String METHOD_TYPE_LENGTH                 = "()I";
293    public static final String METHOD_NAME_APPEND                 = "append";
294    public static final String METHOD_TYPE_STRING_VOID            = "(Ljava/lang/String;)V";
295    public static final String METHOD_TYPE_BOOLEAN_STRING_BUFFER  = "(Z)Ljava/lang/StringBuffer;";
296    public static final String METHOD_TYPE_CHAR_STRING_BUFFER     = "(C)Ljava/lang/StringBuffer;";
297    public static final String METHOD_TYPE_INT_STRING_BUFFER      = "(I)Ljava/lang/StringBuffer;";
298    public static final String METHOD_TYPE_LONG_STRING_BUFFER     = "(J)Ljava/lang/StringBuffer;";
299    public static final String METHOD_TYPE_FLOAT_STRING_BUFFER    = "(F)Ljava/lang/StringBuffer;";
300    public static final String METHOD_TYPE_DOUBLE_STRING_BUFFER   = "(D)Ljava/lang/StringBuffer;";
301    public static final String METHOD_TYPE_STRING_STRING_BUFFER   = "(Ljava/lang/String;)Ljava/lang/StringBuffer;";
302    public static final String METHOD_TYPE_OBJECT_STRING_BUFFER   = "(Ljava/lang/Object;)Ljava/lang/StringBuffer;";
303    public static final String METHOD_TYPE_BOOLEAN_STRING_BUILDER = "(Z)Ljava/lang/StringBuilder;";
304    public static final String METHOD_TYPE_CHAR_STRING_BUILDER    = "(C)Ljava/lang/StringBuilder;";
305    public static final String METHOD_TYPE_INT_STRING_BUILDER     = "(I)Ljava/lang/StringBuilder;";
306    public static final String METHOD_TYPE_LONG_STRING_BUILDER    = "(J)Ljava/lang/StringBuilder;";
307    public static final String METHOD_TYPE_FLOAT_STRING_BUILDER   = "(F)Ljava/lang/StringBuilder;";
308    public static final String METHOD_TYPE_DOUBLE_STRING_BUILDER  = "(D)Ljava/lang/StringBuilder;";
309    public static final String METHOD_TYPE_STRING_STRING_BUILDER  = "(Ljava/lang/String;)Ljava/lang/StringBuilder;";
310    public static final String METHOD_TYPE_OBJECT_STRING_BUILDER  = "(Ljava/lang/Object;)Ljava/lang/StringBuilder;";
311    public static final String METHOD_NAME_TOSTRING               = "toString";
312    public static final String METHOD_TYPE_TOSTRING               = "()Ljava/lang/String;";
313    public static final String METHOD_NAME_CLONE                  = "clone";
314    public static final String METHOD_TYPE_CLONE                  = "()Ljava/lang/Object;";
315
316    public static final String METHOD_NAME_VALUES                 = "values";
317    public static final String METHOD_NAME_ORDINAL                = "ordinal";
318    public static final String METHOD_TYPE_ORDINAL                = "()I";
319
320    public static final char TYPE_VOID                   = 'V';
321    public static final char TYPE_BOOLEAN                = 'Z';
322    public static final char TYPE_BYTE                   = 'B';
323    public static final char TYPE_CHAR                   = 'C';
324    public static final char TYPE_SHORT                  = 'S';
325    public static final char TYPE_INT                    = 'I';
326    public static final char TYPE_LONG                   = 'J';
327    public static final char TYPE_FLOAT                  = 'F';
328    public static final char TYPE_DOUBLE                 = 'D';
329    public static final char TYPE_CLASS_START            = 'L';
330    public static final char TYPE_CLASS_END              = ';';
331    public static final char TYPE_ARRAY                  = '[';
332    public static final char TYPE_GENERIC_VARIABLE_START = 'T';
333    public static final char TYPE_GENERIC_START          = '<';
334    public static final char TYPE_GENERIC_BOUND          = ':';
335    public static final char TYPE_GENERIC_END            = '>';
336
337    public static final int TYPICAL_CONSTANT_POOL_SIZE     = 256;
338    public static final int TYPICAL_FIELD_COUNT            = 64;
339    public static final int TYPICAL_METHOD_COUNT           = 64;
340    public static final int TYPICAL_CODE_LENGTH            = 1024;
341    public static final int TYPICAL_EXCEPTION_TABLE_LENGTH = 16;
342    public static final int TYPICAL_VARIABLES_SIZE         = 64;
343    public static final int TYPICAL_STACK_SIZE             = 16;
344}
345