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 */ 21 package proguard.classfile; 22 23 /** 24 * Constants used in representing a Java class file (*.class). 25 * 26 * @author Eric Lafortune 27 */ 28 public 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