001: /*
002: * ProGuard -- shrinking, optimization, obfuscation, and preverification
003: * of Java bytecode.
004: *
005: * Copyright (c) 2002-2003 Eric Lafortune (eric@graphics.cornell.edu)
006: *
007: * This library is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU General Public License as published by the Free
009: * Software Foundation; either version 2 of the License, or (at your option)
010: * any later version.
011: *
012: * This library is distributed in the hope that it will be useful, but WITHOUT
013: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
014: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
015: * for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public License
018: * along with this library; if not, write to the Free Software Foundation,
019: * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: */
021: package proguard.classfile;
022:
023: /**
024: * Constants used in representing a Java class (*.class).
025: *
026: * @author Eric Lafortune
027: */
028: public interface ClassConstants {
029: public static final String CLASS_FILE_EXTENSION = ".class";
030:
031: public static final int MAGIC = 0xCAFEBABE;
032:
033: public static final int INTERNAL_CLASS_VERSION_1_0_MAJOR = 45;
034: public static final int INTERNAL_CLASS_VERSION_1_0_MINOR = 3;
035: public static final int INTERNAL_CLASS_VERSION_1_2_MAJOR = 46;
036: public static final int INTERNAL_CLASS_VERSION_1_2_MINOR = 0;
037: public static final int INTERNAL_CLASS_VERSION_1_3_MAJOR = 47;
038: public static final int INTERNAL_CLASS_VERSION_1_3_MINOR = 0;
039: public static final int INTERNAL_CLASS_VERSION_1_4_MAJOR = 48;
040: public static final int INTERNAL_CLASS_VERSION_1_4_MINOR = 0;
041: public static final int INTERNAL_CLASS_VERSION_1_5_MAJOR = 49;
042: public static final int INTERNAL_CLASS_VERSION_1_5_MINOR = 0;
043: public static final int INTERNAL_CLASS_VERSION_1_6_MAJOR = 50;
044: public static final int INTERNAL_CLASS_VERSION_1_6_MINOR = 0;
045:
046: public static final int INTERNAL_CLASS_VERSION_1_0 = (INTERNAL_CLASS_VERSION_1_0_MAJOR << 16)
047: | INTERNAL_CLASS_VERSION_1_0_MINOR;
048: public static final int INTERNAL_CLASS_VERSION_1_2 = (INTERNAL_CLASS_VERSION_1_2_MAJOR << 16)
049: | INTERNAL_CLASS_VERSION_1_2_MINOR;
050: public static final int INTERNAL_CLASS_VERSION_1_3 = (INTERNAL_CLASS_VERSION_1_3_MAJOR << 16)
051: | INTERNAL_CLASS_VERSION_1_3_MINOR;
052: public static final int INTERNAL_CLASS_VERSION_1_4 = (INTERNAL_CLASS_VERSION_1_4_MAJOR << 16)
053: | INTERNAL_CLASS_VERSION_1_4_MINOR;
054: public static final int INTERNAL_CLASS_VERSION_1_5 = (INTERNAL_CLASS_VERSION_1_5_MAJOR << 16)
055: | INTERNAL_CLASS_VERSION_1_5_MINOR;
056: public static final int INTERNAL_CLASS_VERSION_1_6 = (INTERNAL_CLASS_VERSION_1_6_MAJOR << 16)
057: | INTERNAL_CLASS_VERSION_1_6_MINOR;
058:
059: public static final String EXTERNAL_CLASS_VERSION_1_0 = "1.0";
060: public static final String EXTERNAL_CLASS_VERSION_1_1 = "1.1";
061: public static final String EXTERNAL_CLASS_VERSION_1_2 = "1.2";
062: public static final String EXTERNAL_CLASS_VERSION_1_3 = "1.3";
063: public static final String EXTERNAL_CLASS_VERSION_1_4 = "1.4";
064: public static final String EXTERNAL_CLASS_VERSION_1_5 = "1.5";
065: public static final String EXTERNAL_CLASS_VERSION_1_6 = "1.6";
066: public static final String EXTERNAL_CLASS_VERSION_1_5_ALIAS = "5";
067: public static final String EXTERNAL_CLASS_VERSION_1_6_ALIAS = "6";
068:
069: public static final int INTERNAL_ACC_PUBLIC = 0x0001;
070: public static final int INTERNAL_ACC_PRIVATE = 0x0002;
071: public static final int INTERNAL_ACC_PROTECTED = 0x0004;
072: public static final int INTERNAL_ACC_STATIC = 0x0008;
073: public static final int INTERNAL_ACC_FINAL = 0x0010;
074: public static final int INTERNAL_ACC_SUPER = 0x0020;
075: public static final int INTERNAL_ACC_SYNCHRONIZED = 0x0020;
076: public static final int INTERNAL_ACC_VOLATILE = 0x0040;
077: public static final int INTERNAL_ACC_TRANSIENT = 0x0080;
078: public static final int INTERNAL_ACC_BRIDGE = 0x0040;
079: public static final int INTERNAL_ACC_VARARGS = 0x0080;
080: public static final int INTERNAL_ACC_NATIVE = 0x0100;
081: public static final int INTERNAL_ACC_INTERFACE = 0x0200;
082: public static final int INTERNAL_ACC_ABSTRACT = 0x0400;
083: public static final int INTERNAL_ACC_STRICT = 0x0800;
084: public static final int INTERNAL_ACC_SYNTHETIC = 0x1000;
085: public static final int INTERNAL_ACC_ANNOTATTION = 0x2000;
086: public static final int INTERNAL_ACC_ENUM = 0x4000;
087:
088: public static final int VALID_INTERNAL_ACC_CLASS = INTERNAL_ACC_PUBLIC
089: | INTERNAL_ACC_FINAL
090: | INTERNAL_ACC_SUPER
091: | INTERNAL_ACC_INTERFACE
092: | INTERNAL_ACC_ABSTRACT
093: | INTERNAL_ACC_SYNTHETIC
094: | INTERNAL_ACC_ANNOTATTION
095: | INTERNAL_ACC_ENUM;
096: public static final int VALID_INTERNAL_ACC_FIELD = INTERNAL_ACC_PUBLIC
097: | INTERNAL_ACC_PRIVATE
098: | INTERNAL_ACC_PROTECTED
099: | INTERNAL_ACC_STATIC
100: | INTERNAL_ACC_FINAL
101: | INTERNAL_ACC_VOLATILE
102: | INTERNAL_ACC_TRANSIENT
103: | INTERNAL_ACC_SYNTHETIC | INTERNAL_ACC_ENUM;
104: public static final int VALID_INTERNAL_ACC_METHOD = INTERNAL_ACC_PUBLIC
105: | INTERNAL_ACC_PRIVATE
106: | INTERNAL_ACC_PROTECTED
107: | INTERNAL_ACC_STATIC
108: | INTERNAL_ACC_FINAL
109: | INTERNAL_ACC_SYNCHRONIZED
110: | INTERNAL_ACC_BRIDGE
111: | INTERNAL_ACC_VARARGS
112: | INTERNAL_ACC_NATIVE
113: | INTERNAL_ACC_ABSTRACT
114: | INTERNAL_ACC_STRICT
115: | INTERNAL_ACC_SYNTHETIC;
116:
117: public static final String EXTERNAL_ACC_PUBLIC = "public";
118: public static final String EXTERNAL_ACC_PRIVATE = "private";
119: public static final String EXTERNAL_ACC_PROTECTED = "protected";
120: public static final String EXTERNAL_ACC_STATIC = "static";
121: public static final String EXTERNAL_ACC_FINAL = "final";
122: public static final String EXTERNAL_ACC_SUPER = "super";
123: public static final String EXTERNAL_ACC_SYNCHRONIZED = "synchronized";
124: public static final String EXTERNAL_ACC_VOLATILE = "volatile";
125: public static final String EXTERNAL_ACC_TRANSIENT = "transient";
126: public static final String EXTERNAL_ACC_NATIVE = "native";
127: public static final String EXTERNAL_ACC_INTERFACE = "interface";
128: public static final String EXTERNAL_ACC_ABSTRACT = "abstract";
129: public static final String EXTERNAL_ACC_STRICT = "strictfp";
130:
131: public static final int CONSTANT_Utf8 = 1;
132: public static final int CONSTANT_Integer = 3;
133: public static final int CONSTANT_Float = 4;
134: public static final int CONSTANT_Long = 5;
135: public static final int CONSTANT_Double = 6;
136: public static final int CONSTANT_Class = 7;
137: public static final int CONSTANT_String = 8;
138: public static final int CONSTANT_Fieldref = 9;
139: public static final int CONSTANT_Methodref = 10;
140: public static final int CONSTANT_InterfaceMethodref = 11;
141: public static final int CONSTANT_NameAndType = 12;
142:
143: public static final String ATTR_SourceFile = "SourceFile";
144: public static final String ATTR_SourceDir = "SourceDir";
145: public static final String ATTR_InnerClasses = "InnerClasses";
146: public static final String ATTR_EnclosingMethod = "EnclosingMethod";
147: public static final String ATTR_Deprecated = "Deprecated";
148: public static final String ATTR_Synthetic = "Synthetic";
149: public static final String ATTR_Signature = "Signature";
150: public static final String ATTR_ConstantValue = "ConstantValue";
151: public static final String ATTR_Exceptions = "Exceptions";
152: public static final String ATTR_Code = "Code";
153: public static final String ATTR_StackMap = "StackMap";
154: public static final String ATTR_StackMapTable = "StackMapTable";
155: public static final String ATTR_LineNumberTable = "LineNumberTable";
156: public static final String ATTR_LocalVariableTable = "LocalVariableTable";
157: public static final String ATTR_LocalVariableTypeTable = "LocalVariableTypeTable";
158: public static final String ATTR_RuntimeVisibleAnnotations = "RuntimeVisibleAnnotations";
159: public static final String ATTR_RuntimeInvisibleAnnotations = "RuntimeInvisibleAnnotations";
160: public static final String ATTR_RuntimeVisibleParameterAnnotations = "RuntimeVisibleParameterAnnotations";
161: public static final String ATTR_RuntimeInvisibleParameterAnnotations = "RuntimeInvisibleParameterAnnotations";
162: public static final String ATTR_AnnotationDefault = "AnnotationDefault";
163:
164: public static final int ELEMENT_VALUE_STRING_CONSTANT = 's';
165: public static final int ELEMENT_VALUE_ENUM_CONSTANT = 'e';
166: public static final int ELEMENT_VALUE_CLASS = 'c';
167: public static final int ELEMENT_VALUE_ANNOTATION = '@';
168: public static final int ELEMENT_VALUE_ARRAY = '[';
169:
170: public static final char EXTERNAL_PACKAGE_SEPARATOR = '.';
171: public static final char EXTERNAL_INNER_CLASS_SEPARATOR = '.';
172: public static final char INTERNAL_PACKAGE_SEPARATOR = '/';
173: public static final char INTERNAL_INNER_CLASS_SEPARATOR = '$';
174: public static final char SPECIAL_CLASS_CHARACTER = '-';
175: public static final char SPECIAL_MEMBER_SEPARATOR = '$';
176:
177: public static final char EXTERNAL_METHOD_ARGUMENTS_OPEN = '(';
178: public static final char EXTERNAL_METHOD_ARGUMENTS_CLOSE = ')';
179: public static final char EXTERNAL_METHOD_ARGUMENTS_SEPARATOR = ',';
180:
181: public static final char INTERNAL_METHOD_ARGUMENTS_OPEN = '(';
182: public static final char INTERNAL_METHOD_ARGUMENTS_CLOSE = ')';
183:
184: public static final String INTERNAL_PACKAGE_JAVA_LANG = "java/lang/";
185: public static final String INTERNAL_NAME_JAVA_LANG_OBJECT = "java/lang/Object";
186: public static final String INTERNAL_TYPE_JAVA_LANG_OBJECT = "Ljava/lang/Object;";
187: public static final String INTERNAL_NAME_JAVA_LANG_CLONEABLE = "java/lang/Cloneable";
188: public static final String INTERNAL_NAME_JAVA_LANG_THROWABLE = "java/lang/Throwable";
189: public static final String INTERNAL_NAME_JAVA_LANG_CLASS = "java/lang/Class";
190: public static final String INTERNAL_NAME_JAVA_LANG_STRING = "java/lang/String";
191: public static final String INTERNAL_NAME_JAVA_IO_SERIALIZABLE = "java/io/Serializable";
192:
193: public static final String INTERNAL_METHOD_NAME_INIT = "<init>";
194: public static final String INTERNAL_METHOD_TYPE_INIT = "()V";
195: public static final String INTERNAL_METHOD_NAME_CLINIT = "<clinit>";
196: public static final String INTERNAL_METHOD_TYPE_CLINIT = "()V";
197:
198: public static final String INTERNAL_METHOD_NAME_CLASS_FOR_NAME = "forName";
199: public static final String INTERNAL_METHOD_TYPE_CLASS_FOR_NAME = "(Ljava/lang/String;)Ljava/lang/Class;";
200: public static final String INTERNAL_METHOD_NAME_CLASS_GET_COMPONENT_TYPE = "getComponentType";
201: public static final String INTERNAL_METHOD_TYPE_CLASS_GET_COMPONENT_TYPE = "()Ljava/lang/Class;";
202: public static final String INTERNAL_METHOD_NAME_CLASS_GET_FIELD = "getField";
203: public static final String INTERNAL_METHOD_TYPE_CLASS_GET_FIELD = "(Ljava/lang/String;)Ljava/lang/reflect/Field;";
204: public static final String INTERNAL_METHOD_NAME_CLASS_GET_DECLARED_FIELD = "getDeclaredField";
205: public static final String INTERNAL_METHOD_TYPE_CLASS_GET_DECLARED_FIELD = "(Ljava/lang/String;)Ljava/lang/reflect/Field;";
206: public static final String INTERNAL_METHOD_NAME_CLASS_GET_METHOD = "getMethod";
207: public static final String INTERNAL_METHOD_TYPE_CLASS_GET_METHOD = "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;";
208: public static final String INTERNAL_METHOD_NAME_CLASS_GET_DECLARED_METHOD = "getDeclaredMethod";
209: public static final String INTERNAL_METHOD_TYPE_CLASS_GET_DECLARED_METHOD = "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;";
210:
211: public static final String INTERNAL_METHOD_NAME_DOT_CLASS_JAVAC = "class$";
212: public static final String INTERNAL_METHOD_TYPE_DOT_CLASS_JAVAC = "(Ljava/lang/String;)Ljava/lang/Class;";
213: public static final String INTERNAL_METHOD_NAME_DOT_CLASS_JIKES = "class";
214: public static final String INTERNAL_METHOD_TYPE_DOT_CLASS_JIKES = "(Ljava/lang/String;Z)Ljava/lang/Class;";
215:
216: public static final String INTERNAL_METHOD_NAME_NEW_INSTANCE = "newInstance";
217: public static final String INTERNAL_METHOD_TYPE_NEW_INSTANCE = "()Ljava/lang/Object;";
218:
219: public static final char INTERNAL_TYPE_VOID = 'V';
220: public static final char INTERNAL_TYPE_BOOLEAN = 'Z';
221: public static final char INTERNAL_TYPE_BYTE = 'B';
222: public static final char INTERNAL_TYPE_CHAR = 'C';
223: public static final char INTERNAL_TYPE_SHORT = 'S';
224: public static final char INTERNAL_TYPE_INT = 'I';
225: public static final char INTERNAL_TYPE_LONG = 'J';
226: public static final char INTERNAL_TYPE_FLOAT = 'F';
227: public static final char INTERNAL_TYPE_DOUBLE = 'D';
228: public static final char INTERNAL_TYPE_CLASS_START = 'L';
229: public static final char INTERNAL_TYPE_CLASS_END = ';';
230: public static final char INTERNAL_TYPE_ARRAY = '[';
231: public static final char INTERNAL_TYPE_GENERIC_VARIABLE_START = 'T';
232: public static final char INTERNAL_TYPE_GENERIC_START = '<';
233: public static final char INTERNAL_TYPE_GENERIC_BOUND = ':';
234: public static final char INTERNAL_TYPE_GENERIC_END = '>';
235:
236: public static final String EXTERNAL_TYPE_JAVA_LANG_OBJECT = "java.lang.Object";
237: public static final String EXTERNAL_PACKAGE_JAVA_LANG = "java.lang.";
238:
239: public static final String EXTERNAL_TYPE_VOID = "void";
240: public static final String EXTERNAL_TYPE_BOOLEAN = "boolean";
241: public static final String EXTERNAL_TYPE_BYTE = "byte";
242: public static final String EXTERNAL_TYPE_CHAR = "char";
243: public static final String EXTERNAL_TYPE_SHORT = "short";
244: public static final String EXTERNAL_TYPE_INT = "int";
245: public static final String EXTERNAL_TYPE_FLOAT = "float";
246: public static final String EXTERNAL_TYPE_LONG = "long";
247: public static final String EXTERNAL_TYPE_DOUBLE = "double";
248: public static final String EXTERNAL_TYPE_ARRAY = "[]";
249:
250: public static final int TYPICAL_CONSTANT_POOL_SIZE = 256;
251: public static final int TYPICAL_FIELD_COUNT = 64;
252: public static final int TYPICAL_METHOD_COUNT = 64;
253: public static final int TYPICAL_CODE_LENGTH = 1024;
254: public static final int TYPICAL_EXCEPTION_TABLE_LENGTH = 16;
255: public static final int TYPICAL_VARIABLES_SIZE = 64;
256: public static final int TYPICAL_STACK_SIZE = 16;
257: }
|