ClassConstants.java revision db267bc191f906f55eaef21a27110cce2ec57fdf
1/*
2 * ProGuard -- shrinking, optimization, obfuscation, and preverification
3 *             of Java bytecode.
4 *
5 * Copyright (c) 2002-2009 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 (*.class).
25 *
26 * @author Eric Lafortune
27 */
28public interface 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 INTERNAL_CLASS_VERSION_1_0_MAJOR = 45;
35    public static final int INTERNAL_CLASS_VERSION_1_0_MINOR = 3;
36    public static final int INTERNAL_CLASS_VERSION_1_2_MAJOR = 46;
37    public static final int INTERNAL_CLASS_VERSION_1_2_MINOR = 0;
38    public static final int INTERNAL_CLASS_VERSION_1_3_MAJOR = 47;
39    public static final int INTERNAL_CLASS_VERSION_1_3_MINOR = 0;
40    public static final int INTERNAL_CLASS_VERSION_1_4_MAJOR = 48;
41    public static final int INTERNAL_CLASS_VERSION_1_4_MINOR = 0;
42    public static final int INTERNAL_CLASS_VERSION_1_5_MAJOR = 49;
43    public static final int INTERNAL_CLASS_VERSION_1_5_MINOR = 0;
44    public static final int INTERNAL_CLASS_VERSION_1_6_MAJOR = 50;
45    public static final int INTERNAL_CLASS_VERSION_1_6_MINOR = 0;
46
47    public static final int INTERNAL_CLASS_VERSION_1_0 = (INTERNAL_CLASS_VERSION_1_0_MAJOR << 16) | INTERNAL_CLASS_VERSION_1_0_MINOR;
48    public static final int INTERNAL_CLASS_VERSION_1_2 = (INTERNAL_CLASS_VERSION_1_2_MAJOR << 16) | INTERNAL_CLASS_VERSION_1_2_MINOR;
49    public static final int INTERNAL_CLASS_VERSION_1_3 = (INTERNAL_CLASS_VERSION_1_3_MAJOR << 16) | INTERNAL_CLASS_VERSION_1_3_MINOR;
50    public static final int INTERNAL_CLASS_VERSION_1_4 = (INTERNAL_CLASS_VERSION_1_4_MAJOR << 16) | INTERNAL_CLASS_VERSION_1_4_MINOR;
51    public static final int INTERNAL_CLASS_VERSION_1_5 = (INTERNAL_CLASS_VERSION_1_5_MAJOR << 16) | INTERNAL_CLASS_VERSION_1_5_MINOR;
52    public static final int INTERNAL_CLASS_VERSION_1_6 = (INTERNAL_CLASS_VERSION_1_6_MAJOR << 16) | INTERNAL_CLASS_VERSION_1_6_MINOR;
53
54    public static final String EXTERNAL_CLASS_VERSION_1_0       = "1.0";
55    public static final String EXTERNAL_CLASS_VERSION_1_1       = "1.1";
56    public static final String EXTERNAL_CLASS_VERSION_1_2       = "1.2";
57    public static final String EXTERNAL_CLASS_VERSION_1_3       = "1.3";
58    public static final String EXTERNAL_CLASS_VERSION_1_4       = "1.4";
59    public static final String EXTERNAL_CLASS_VERSION_1_5       = "1.5";
60    public static final String EXTERNAL_CLASS_VERSION_1_6       = "1.6";
61    public static final String EXTERNAL_CLASS_VERSION_1_5_ALIAS = "5";
62    public static final String EXTERNAL_CLASS_VERSION_1_6_ALIAS = "6";
63
64    public static final int INTERNAL_ACC_PUBLIC       = 0x0001;
65    public static final int INTERNAL_ACC_PRIVATE      = 0x0002;
66    public static final int INTERNAL_ACC_PROTECTED    = 0x0004;
67    public static final int INTERNAL_ACC_STATIC       = 0x0008;
68    public static final int INTERNAL_ACC_FINAL        = 0x0010;
69    public static final int INTERNAL_ACC_SUPER        = 0x0020;
70    public static final int INTERNAL_ACC_SYNCHRONIZED = 0x0020;
71    public static final int INTERNAL_ACC_VOLATILE     = 0x0040;
72    public static final int INTERNAL_ACC_TRANSIENT    = 0x0080;
73    public static final int INTERNAL_ACC_BRIDGE       = 0x0040;
74    public static final int INTERNAL_ACC_VARARGS      = 0x0080;
75    public static final int INTERNAL_ACC_NATIVE       = 0x0100;
76    public static final int INTERNAL_ACC_INTERFACE    = 0x0200;
77    public static final int INTERNAL_ACC_ABSTRACT     = 0x0400;
78    public static final int INTERNAL_ACC_STRICT       = 0x0800;
79    public static final int INTERNAL_ACC_SYNTHETIC    = 0x1000;
80    public static final int INTERNAL_ACC_ANNOTATTION  = 0x2000;
81    public static final int INTERNAL_ACC_ENUM         = 0x4000;
82
83    public static final int VALID_INTERNAL_ACC_CLASS  = INTERNAL_ACC_PUBLIC       |
84                                                        INTERNAL_ACC_FINAL        |
85                                                        INTERNAL_ACC_SUPER        |
86                                                        INTERNAL_ACC_INTERFACE    |
87                                                        INTERNAL_ACC_ABSTRACT     |
88                                                        INTERNAL_ACC_SYNTHETIC    |
89                                                        INTERNAL_ACC_ANNOTATTION  |
90                                                        INTERNAL_ACC_ENUM;
91    public static final int VALID_INTERNAL_ACC_FIELD  = INTERNAL_ACC_PUBLIC       |
92                                                        INTERNAL_ACC_PRIVATE      |
93                                                        INTERNAL_ACC_PROTECTED    |
94                                                        INTERNAL_ACC_STATIC       |
95                                                        INTERNAL_ACC_FINAL        |
96                                                        INTERNAL_ACC_VOLATILE     |
97                                                        INTERNAL_ACC_TRANSIENT    |
98                                                        INTERNAL_ACC_SYNTHETIC    |
99                                                        INTERNAL_ACC_ENUM;
100    public static final int VALID_INTERNAL_ACC_METHOD = INTERNAL_ACC_PUBLIC       |
101                                                        INTERNAL_ACC_PRIVATE      |
102                                                        INTERNAL_ACC_PROTECTED    |
103                                                        INTERNAL_ACC_STATIC       |
104                                                        INTERNAL_ACC_FINAL        |
105                                                        INTERNAL_ACC_SYNCHRONIZED |
106                                                        INTERNAL_ACC_BRIDGE       |
107                                                        INTERNAL_ACC_VARARGS      |
108                                                        INTERNAL_ACC_NATIVE       |
109                                                        INTERNAL_ACC_ABSTRACT     |
110                                                        INTERNAL_ACC_STRICT       |
111                                                        INTERNAL_ACC_SYNTHETIC;
112
113    public static final String EXTERNAL_ACC_PUBLIC       = "public";
114    public static final String EXTERNAL_ACC_PRIVATE      = "private";
115    public static final String EXTERNAL_ACC_PROTECTED    = "protected";
116    public static final String EXTERNAL_ACC_STATIC       = "static";
117    public static final String EXTERNAL_ACC_FINAL        = "final";
118    public static final String EXTERNAL_ACC_SUPER        = "super";
119    public static final String EXTERNAL_ACC_SYNCHRONIZED = "synchronized";
120    public static final String EXTERNAL_ACC_VOLATILE     = "volatile";
121    public static final String EXTERNAL_ACC_TRANSIENT    = "transient";
122    public static final String EXTERNAL_ACC_NATIVE       = "native";
123    public static final String EXTERNAL_ACC_INTERFACE    = "interface";
124    public static final String EXTERNAL_ACC_ABSTRACT     = "abstract";
125    public static final String EXTERNAL_ACC_STRICT       = "strictfp";
126    public static final String EXTERNAL_ACC_ANNOTATION   = "@";
127    public static final String EXTERNAL_ACC_ENUM         = "enum";
128
129    public static final int CONSTANT_Utf8               = 1;
130    public static final int CONSTANT_Integer            = 3;
131    public static final int CONSTANT_Float              = 4;
132    public static final int CONSTANT_Long               = 5;
133    public static final int CONSTANT_Double             = 6;
134    public static final int CONSTANT_Class              = 7;
135    public static final int CONSTANT_String             = 8;
136    public static final int CONSTANT_Fieldref           = 9;
137    public static final int CONSTANT_Methodref          = 10;
138    public static final int CONSTANT_InterfaceMethodref = 11;
139    public static final int CONSTANT_NameAndType        = 12;
140
141    public static final String ATTR_SourceFile                           = "SourceFile";
142    public static final String ATTR_SourceDir                            = "SourceDir";
143    public static final String ATTR_InnerClasses                         = "InnerClasses";
144    public static final String ATTR_EnclosingMethod                      = "EnclosingMethod";
145    public static final String ATTR_Deprecated                           = "Deprecated";
146    public static final String ATTR_Synthetic                            = "Synthetic";
147    public static final String ATTR_Signature                            = "Signature";
148    public static final String ATTR_ConstantValue                        = "ConstantValue";
149    public static final String ATTR_Exceptions                           = "Exceptions";
150    public static final String ATTR_Code                                 = "Code";
151    public static final String ATTR_StackMap                             = "StackMap";
152    public static final String ATTR_StackMapTable                        = "StackMapTable";
153    public static final String ATTR_LineNumberTable                      = "LineNumberTable";
154    public static final String ATTR_LocalVariableTable                   = "LocalVariableTable";
155    public static final String ATTR_LocalVariableTypeTable               = "LocalVariableTypeTable";
156    public static final String ATTR_RuntimeVisibleAnnotations            = "RuntimeVisibleAnnotations";
157    public static final String ATTR_RuntimeInvisibleAnnotations          = "RuntimeInvisibleAnnotations";
158    public static final String ATTR_RuntimeVisibleParameterAnnotations   = "RuntimeVisibleParameterAnnotations";
159    public static final String ATTR_RuntimeInvisibleParameterAnnotations = "RuntimeInvisibleParameterAnnotations";
160    public static final String ATTR_AnnotationDefault                    = "AnnotationDefault";
161
162    public static final int ELEMENT_VALUE_STRING_CONSTANT = 's';
163    public static final int ELEMENT_VALUE_ENUM_CONSTANT   = 'e';
164    public static final int ELEMENT_VALUE_CLASS           = 'c';
165    public static final int ELEMENT_VALUE_ANNOTATION      = '@';
166    public static final int ELEMENT_VALUE_ARRAY           = '[';
167
168    public static final char EXTERNAL_PACKAGE_SEPARATOR     = '.';
169    public static final char EXTERNAL_INNER_CLASS_SEPARATOR = '.';
170    public static final char INTERNAL_PACKAGE_SEPARATOR     = '/';
171    public static final char INTERNAL_INNER_CLASS_SEPARATOR = '$';
172    public static final char SPECIAL_CLASS_CHARACTER        = '-';
173    public static final char SPECIAL_MEMBER_SEPARATOR       = '$';
174
175    public static final char EXTERNAL_METHOD_ARGUMENTS_OPEN      = '(';
176    public static final char EXTERNAL_METHOD_ARGUMENTS_CLOSE     = ')';
177    public static final char EXTERNAL_METHOD_ARGUMENTS_SEPARATOR = ',';
178
179    public static final char INTERNAL_METHOD_ARGUMENTS_OPEN  = '(';
180    public static final char INTERNAL_METHOD_ARGUMENTS_CLOSE = ')';
181
182    public static final String INTERNAL_PACKAGE_JAVA_LANG         = "java/lang/";
183    public static final String INTERNAL_NAME_JAVA_LANG_OBJECT     = "java/lang/Object";
184    public static final String INTERNAL_TYPE_JAVA_LANG_OBJECT     = "Ljava/lang/Object;";
185    public static final String INTERNAL_NAME_JAVA_LANG_CLONEABLE  = "java/lang/Cloneable";
186    public static final String INTERNAL_NAME_JAVA_LANG_THROWABLE  = "java/lang/Throwable";
187    public static final String INTERNAL_NAME_JAVA_LANG_CLASS      = "java/lang/Class";
188    public static final String INTERNAL_NAME_JAVA_LANG_STRING     = "java/lang/String";
189    public static final String INTERNAL_NAME_JAVA_IO_SERIALIZABLE = "java/io/Serializable";
190
191    public static final String INTERNAL_METHOD_NAME_INIT   = "<init>";
192    public static final String INTERNAL_METHOD_TYPE_INIT   = "()V";
193    public static final String INTERNAL_METHOD_NAME_CLINIT = "<clinit>";
194    public static final String INTERNAL_METHOD_TYPE_CLINIT = "()V";
195
196    public static final String INTERNAL_METHOD_NAME_CLASS_FOR_NAME            = "forName";
197    public static final String INTERNAL_METHOD_TYPE_CLASS_FOR_NAME            = "(Ljava/lang/String;)Ljava/lang/Class;";
198    public static final String INTERNAL_METHOD_NAME_CLASS_GET_COMPONENT_TYPE  = "getComponentType";
199    public static final String INTERNAL_METHOD_TYPE_CLASS_GET_COMPONENT_TYPE  = "()Ljava/lang/Class;";
200    public static final String INTERNAL_METHOD_NAME_CLASS_GET_FIELD           = "getField";
201    public static final String INTERNAL_METHOD_TYPE_CLASS_GET_FIELD           = "(Ljava/lang/String;)Ljava/lang/reflect/Field;";
202    public static final String INTERNAL_METHOD_NAME_CLASS_GET_DECLARED_FIELD  = "getDeclaredField";
203    public static final String INTERNAL_METHOD_TYPE_CLASS_GET_DECLARED_FIELD  = "(Ljava/lang/String;)Ljava/lang/reflect/Field;";
204    public static final String INTERNAL_METHOD_NAME_CLASS_GET_METHOD          = "getMethod";
205    public static final String INTERNAL_METHOD_TYPE_CLASS_GET_METHOD          = "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;";
206    public static final String INTERNAL_METHOD_NAME_CLASS_GET_DECLARED_METHOD = "getDeclaredMethod";
207    public static final String INTERNAL_METHOD_TYPE_CLASS_GET_DECLARED_METHOD = "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;";
208
209    public static final String INTERNAL_METHOD_NAME_DOT_CLASS_JAVAC = "class$";
210    public static final String INTERNAL_METHOD_TYPE_DOT_CLASS_JAVAC = "(Ljava/lang/String;)Ljava/lang/Class;";
211    public static final String INTERNAL_METHOD_NAME_DOT_CLASS_JIKES = "class";
212    public static final String INTERNAL_METHOD_TYPE_DOT_CLASS_JIKES = "(Ljava/lang/String;Z)Ljava/lang/Class;";
213
214    public static final String INTERNAL_METHOD_NAME_NEW_INSTANCE = "newInstance";
215    public static final String INTERNAL_METHOD_TYPE_NEW_INSTANCE = "()Ljava/lang/Object;";
216
217    public static final char INTERNAL_TYPE_VOID                   = 'V';
218    public static final char INTERNAL_TYPE_BOOLEAN                = 'Z';
219    public static final char INTERNAL_TYPE_BYTE                   = 'B';
220    public static final char INTERNAL_TYPE_CHAR                   = 'C';
221    public static final char INTERNAL_TYPE_SHORT                  = 'S';
222    public static final char INTERNAL_TYPE_INT                    = 'I';
223    public static final char INTERNAL_TYPE_LONG                   = 'J';
224    public static final char INTERNAL_TYPE_FLOAT                  = 'F';
225    public static final char INTERNAL_TYPE_DOUBLE                 = 'D';
226    public static final char INTERNAL_TYPE_CLASS_START            = 'L';
227    public static final char INTERNAL_TYPE_CLASS_END              = ';';
228    public static final char INTERNAL_TYPE_ARRAY                  = '[';
229    public static final char INTERNAL_TYPE_GENERIC_VARIABLE_START = 'T';
230    public static final char INTERNAL_TYPE_GENERIC_START          = '<';
231    public static final char INTERNAL_TYPE_GENERIC_BOUND          = ':';
232    public static final char INTERNAL_TYPE_GENERIC_END            = '>';
233
234    public static final String EXTERNAL_TYPE_JAVA_LANG_OBJECT = "java.lang.Object";
235    public static final String EXTERNAL_PACKAGE_JAVA_LANG     = "java.lang.";
236
237    public static final String EXTERNAL_TYPE_VOID    = "void";
238    public static final String EXTERNAL_TYPE_BOOLEAN = "boolean";
239    public static final String EXTERNAL_TYPE_BYTE    = "byte";
240    public static final String EXTERNAL_TYPE_CHAR    = "char";
241    public static final String EXTERNAL_TYPE_SHORT   = "short";
242    public static final String EXTERNAL_TYPE_INT     = "int";
243    public static final String EXTERNAL_TYPE_FLOAT   = "float";
244    public static final String EXTERNAL_TYPE_LONG    = "long";
245    public static final String EXTERNAL_TYPE_DOUBLE  = "double";
246    public static final String EXTERNAL_TYPE_ARRAY   = "[]";
247
248    public static final int TYPICAL_CONSTANT_POOL_SIZE     = 256;
249    public static final int TYPICAL_FIELD_COUNT            = 64;
250    public static final int TYPICAL_METHOD_COUNT           = 64;
251    public static final int TYPICAL_CODE_LENGTH            = 1024;
252    public static final int TYPICAL_EXCEPTION_TABLE_LENGTH = 16;
253    public static final int TYPICAL_VARIABLES_SIZE         = 64;
254    public static final int TYPICAL_STACK_SIZE             = 16;
255}
256