diff --git a/build.xml b/build.xml index 9d4d0a6..b70de53 100644 --- a/build.xml +++ b/build.xml @@ -11,6 +11,7 @@ + diff --git a/libs/javassist.jar b/libs/javassist.jar new file mode 100644 index 0000000..e9840d5 Binary files /dev/null and b/libs/javassist.jar differ diff --git a/src/com/cnaude/chairs/Chairs.java b/src/com/cnaude/chairs/Chairs.java index f8ed9a6..be982e4 100644 --- a/src/com/cnaude/chairs/Chairs.java +++ b/src/com/cnaude/chairs/Chairs.java @@ -52,9 +52,12 @@ public class Chairs extends JavaPlugin { return vehiclearrowclass; } + GenVehicleArrowClass genvehiclearrow = new GenVehicleArrowClass(); + @Override public void onEnable() { - log = this.getLogger(); + log = this.getLogger(); + //load vehiclearrowclass try { World world = getServer().getWorlds().get(0); Arrow arrow = world.spawnArrow(new Location(world, 0, 0, 0), new Vector(0, 0, 0), 0, 0); @@ -64,7 +67,7 @@ public class Chairs extends JavaPlugin { getHandle.setAccessible(true); Class entityarrow = getHandle.invoke(arrow).getClass(); Class craftserver = getServer().getClass(); - vehiclearrowclass = new GenVehicleArrowClass(this).genAndLoadClass(arrowclass, entityarrow, craftserver); + vehiclearrowclass = genvehiclearrow.genAndLoadClass(arrowclass, entityarrow, craftserver); arrow.remove(); } catch (Exception e) { e.printStackTrace(); @@ -105,6 +108,7 @@ public class Chairs extends JavaPlugin { chairEffects.cancelPickup(); chairEffects = null; log = null; + genvehiclearrow = null; vehiclearrowclass = null; psitdata = null; } diff --git a/src/com/cnaude/chairs/GenVehicleArrowClass.java b/src/com/cnaude/chairs/GenVehicleArrowClass.java index 421ac89..49c4d98 100644 --- a/src/com/cnaude/chairs/GenVehicleArrowClass.java +++ b/src/com/cnaude/chairs/GenVehicleArrowClass.java @@ -1,94 +1,40 @@ package com.cnaude.chairs; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; +import org.bukkit.Bukkit; +import org.bukkit.entity.Vehicle; -import org.apache.bcel.Constants; -import org.apache.bcel.generic.ALOAD; -import org.apache.bcel.generic.ClassGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.InstructionConstants; -import org.apache.bcel.generic.InstructionFactory; -import org.apache.bcel.generic.InstructionList; -import org.apache.bcel.generic.InvokeInstruction; -import org.apache.bcel.generic.MethodGen; -import org.apache.bcel.generic.Type; +import javassist.CannotCompileException; +import javassist.ClassClassPath; +import javassist.ClassPool; +import javassist.CtClass; +import javassist.CtNewConstructor; +import javassist.NotFoundException; public class GenVehicleArrowClass { - private File datafolder; - public GenVehicleArrowClass(Chairs plugin) + public Class genAndLoadClass(String arrowclass, Class entityarrow, Class craftserver) throws IOException, ClassNotFoundException, NotFoundException, CannotCompileException { - this.datafolder = plugin.getDataFolder(); - } - - public Class genAndLoadClass(String arrowclass, Class entityarrow, Class craftserver) throws IOException, ClassNotFoundException { - ClassGen cg = new ClassGen( - "VehicleArrow", - arrowclass, - "", - Constants.ACC_PUBLIC | Constants.ACC_SUPER, - new String[]{"org.bukkit.entity.Vehicle"} - ); - ConstantPoolGen cp = cg.getConstantPool(); - InstructionList il = new InstructionList(); - MethodGen mg = new MethodGen( - Constants.ACC_PUBLIC, - Type.VOID, - new Type[] { Type.getType(craftserver), Type.getType(entityarrow) }, - new String[] { "server", "entity" }, - "", - "VehicleArrow", - il, - cp - ); - InstructionFactory factory = new InstructionFactory(cg); - il.append(new ALOAD(0)); - il.append(new ALOAD(1)); - il.append(new ALOAD(2)); - InvokeInstruction ii = factory.createInvoke( - arrowclass, - "", - Type.VOID, - new Type[] {Type.getType(craftserver), Type.getType(entityarrow)}, - Constants.INVOKESPECIAL - ); - il.append(ii); - il.append(InstructionConstants.RETURN); - mg.setMaxStack(); - cg.addMethod(mg.getMethod()); - il.dispose(); - cg.getJavaClass().dump(datafolder+File.separator+"VehicleArrow.class"); - File arrowfile = new File(datafolder+File.separator+"VehicleArrow.class"); - InputStream arrwoinputstrean = new FileInputStream(arrowfile); - File jarfile = new File(datafolder+File.separator+"VehicleArrow.jar"); - jarfile.delete(); - final ZipOutputStream zipout = new ZipOutputStream(new FileOutputStream(jarfile)); - ZipEntry entry = new ZipEntry(arrowfile.getName()); - zipout.putNextEntry(entry); - byte[] buffer = new byte[1024]; - int bytesRead; - while ((bytesRead = arrwoinputstrean.read(buffer)) != -1) { - zipout.write(buffer, 0, bytesRead); - } - zipout.closeEntry(); - arrwoinputstrean.close(); - zipout.close(); - URL url = jarfile.toURI().toURL(); - URL[] urls = new URL[]{url}; - URLClassLoader cl = new URLClassLoader(urls); - Class vehiclearrowclass = cl.loadClass("VehicleArrow"); - cl.close(); - arrowfile.delete(); - jarfile.delete(); - return vehiclearrowclass; + ClassPool pool = ClassPool.getDefault(); + pool.insertClassPath + ( + new ClassClassPath(Bukkit.class) + ); + CtClass cc = pool.makeClass("com.cnaude.chairs.VehicleArrow"); + cc.setSuperclass(pool.getCtClass(arrowclass)); + cc.setInterfaces + ( + new CtClass[] + { + pool.get(Vehicle.class.getName()) + } + ); + String counstructorsource = "public VehicleArrow("+craftserver.getName()+" server, "+entityarrow.getName()+" entity)\n{\nsuper(server, entity);\n}"; + cc.addConstructor + ( + CtNewConstructor.make(counstructorsource, cc) + ); + return cc.toClass(); } diff --git a/src/org/apache/bcel/Constants.java b/src/org/apache/bcel/Constants.java deleted file mode 100644 index 39d0917..0000000 --- a/src/org/apache/bcel/Constants.java +++ /dev/null @@ -1,797 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel; - -/** - * Constants for the project, mostly defined in the JVM specification. - * - * @version $Id: Constants.java 410087 2006-05-29 12:12:19Z tcurdt $ - * @author M. Dahm - */ -public interface Constants { - /** - * Major and minor version of the code. - */ - public final static short MAJOR_1_1 = 45; - public final static short MINOR_1_1 = 3; - public final static short MAJOR_1_2 = 46; - public final static short MINOR_1_2 = 0; - public final static short MAJOR_1_3 = 47; - public final static short MINOR_1_3 = 0; - public final static short MAJOR_1_4 = 48; - public final static short MINOR_1_4 = 0; - public final static short MAJOR_1_5 = 49; - public final static short MINOR_1_5 = 0; - public final static short MAJOR = MAJOR_1_1; // Defaults - public final static short MINOR = MINOR_1_1; - - /** - * Maximum value for an unsigned short. - */ - public final static int MAX_SHORT = 65535; // 2^16 - 1 - - /** - * Maximum value for an unsigned byte. - */ - public final static int MAX_BYTE = 255; // 2^8 - 1 - - /** - * Access flags for classes, fields and methods. - */ - public final static short ACC_PUBLIC = 0x0001; - public final static short ACC_PRIVATE = 0x0002; - public final static short ACC_PROTECTED = 0x0004; - public final static short ACC_STATIC = 0x0008; - - public final static short ACC_FINAL = 0x0010; - public final static short ACC_SYNCHRONIZED = 0x0020; - public final static short ACC_VOLATILE = 0x0040; - public final static short ACC_BRIDGE = 0x0040; - public final static short ACC_TRANSIENT = 0x0080; - public final static short ACC_VARARGS = 0x0080; - - public final static short ACC_NATIVE = 0x0100; - public final static short ACC_INTERFACE = 0x0200; - public final static short ACC_ABSTRACT = 0x0400; - public final static short ACC_STRICT = 0x0800; - - public final static short ACC_SYNTHETIC = 0x1000; - public final static short ACC_ANNOTATION = 0x2000; - public final static short ACC_ENUM = 0x4000; - - // Applies to classes compiled by new compilers only - public final static short ACC_SUPER = 0x0020; - - public final static short MAX_ACC_FLAG = ACC_ENUM; - - public final static String[] ACCESS_NAMES = { "public", "private", - "protected", "static", "final", "synchronized", "volatile", - "transient", "native", "interface", "abstract", "strictfp", - "synthetic", "annotation", "enum" }; - - /** - * Tags in constant pool to denote type of constant. - */ - public final static byte CONSTANT_Utf8 = 1; - public final static byte CONSTANT_Integer = 3; - public final static byte CONSTANT_Float = 4; - public final static byte CONSTANT_Long = 5; - public final static byte CONSTANT_Double = 6; - public final static byte CONSTANT_Class = 7; - public final static byte CONSTANT_Fieldref = 9; - public final static byte CONSTANT_String = 8; - public final static byte CONSTANT_Methodref = 10; - public final static byte CONSTANT_InterfaceMethodref = 11; - public final static byte CONSTANT_NameAndType = 12; - - public final static String[] CONSTANT_NAMES = { "", "CONSTANT_Utf8", "", - "CONSTANT_Integer", "CONSTANT_Float", "CONSTANT_Long", - "CONSTANT_Double", "CONSTANT_Class", "CONSTANT_String", - "CONSTANT_Fieldref", "CONSTANT_Methodref", - "CONSTANT_InterfaceMethodref", "CONSTANT_NameAndType" }; - - /** - * The name of the static initializer, also called "class - * initialization method" or "interface initialization - * method". This is "<clinit>". - */ - public final static String STATIC_INITIALIZER_NAME = ""; - - /** - * The name of every constructor method in a class, also called - * "instance initialization method". This is - * "<init>". - */ - public final static String CONSTRUCTOR_NAME = ""; - - /** The names of the interfaces implemented by arrays */ - public final static String[] INTERFACES_IMPLEMENTED_BY_ARRAYS = { - "java.lang.Cloneable", "java.io.Serializable" }; - - /** - * Limitations of the Java Virtual Machine. See The Java Virtual Machine - * Specification, Second Edition, page 152, chapter 4.10. - */ - public static final int MAX_CP_ENTRIES = 65535; - public static final int MAX_CODE_SIZE = 65536; // bytes - - /** - * Java VM opcodes. - */ - public static final short NOP = 0; - public static final short ACONST_NULL = 1; - public static final short ICONST_M1 = 2; - public static final short ICONST_0 = 3; - public static final short ICONST_1 = 4; - public static final short ICONST_2 = 5; - public static final short ICONST_3 = 6; - public static final short ICONST_4 = 7; - public static final short ICONST_5 = 8; - public static final short LCONST_0 = 9; - public static final short LCONST_1 = 10; - public static final short FCONST_0 = 11; - public static final short FCONST_1 = 12; - public static final short FCONST_2 = 13; - public static final short DCONST_0 = 14; - public static final short DCONST_1 = 15; - public static final short BIPUSH = 16; - public static final short SIPUSH = 17; - public static final short LDC = 18; - public static final short LDC_W = 19; - public static final short LDC2_W = 20; - public static final short ILOAD = 21; - public static final short LLOAD = 22; - public static final short FLOAD = 23; - public static final short DLOAD = 24; - public static final short ALOAD = 25; - public static final short ILOAD_0 = 26; - public static final short ILOAD_1 = 27; - public static final short ILOAD_2 = 28; - public static final short ILOAD_3 = 29; - public static final short LLOAD_0 = 30; - public static final short LLOAD_1 = 31; - public static final short LLOAD_2 = 32; - public static final short LLOAD_3 = 33; - public static final short FLOAD_0 = 34; - public static final short FLOAD_1 = 35; - public static final short FLOAD_2 = 36; - public static final short FLOAD_3 = 37; - public static final short DLOAD_0 = 38; - public static final short DLOAD_1 = 39; - public static final short DLOAD_2 = 40; - public static final short DLOAD_3 = 41; - public static final short ALOAD_0 = 42; - public static final short ALOAD_1 = 43; - public static final short ALOAD_2 = 44; - public static final short ALOAD_3 = 45; - public static final short IALOAD = 46; - public static final short LALOAD = 47; - public static final short FALOAD = 48; - public static final short DALOAD = 49; - public static final short AALOAD = 50; - public static final short BALOAD = 51; - public static final short CALOAD = 52; - public static final short SALOAD = 53; - public static final short ISTORE = 54; - public static final short LSTORE = 55; - public static final short FSTORE = 56; - public static final short DSTORE = 57; - public static final short ASTORE = 58; - public static final short ISTORE_0 = 59; - public static final short ISTORE_1 = 60; - public static final short ISTORE_2 = 61; - public static final short ISTORE_3 = 62; - public static final short LSTORE_0 = 63; - public static final short LSTORE_1 = 64; - public static final short LSTORE_2 = 65; - public static final short LSTORE_3 = 66; - public static final short FSTORE_0 = 67; - public static final short FSTORE_1 = 68; - public static final short FSTORE_2 = 69; - public static final short FSTORE_3 = 70; - public static final short DSTORE_0 = 71; - public static final short DSTORE_1 = 72; - public static final short DSTORE_2 = 73; - public static final short DSTORE_3 = 74; - public static final short ASTORE_0 = 75; - public static final short ASTORE_1 = 76; - public static final short ASTORE_2 = 77; - public static final short ASTORE_3 = 78; - public static final short IASTORE = 79; - public static final short LASTORE = 80; - public static final short FASTORE = 81; - public static final short DASTORE = 82; - public static final short AASTORE = 83; - public static final short BASTORE = 84; - public static final short CASTORE = 85; - public static final short SASTORE = 86; - public static final short POP = 87; - public static final short POP2 = 88; - public static final short DUP = 89; - public static final short DUP_X1 = 90; - public static final short DUP_X2 = 91; - public static final short DUP2 = 92; - public static final short DUP2_X1 = 93; - public static final short DUP2_X2 = 94; - public static final short SWAP = 95; - public static final short IADD = 96; - public static final short LADD = 97; - public static final short FADD = 98; - public static final short DADD = 99; - public static final short ISUB = 100; - public static final short LSUB = 101; - public static final short FSUB = 102; - public static final short DSUB = 103; - public static final short IMUL = 104; - public static final short LMUL = 105; - public static final short FMUL = 106; - public static final short DMUL = 107; - public static final short IDIV = 108; - public static final short LDIV = 109; - public static final short FDIV = 110; - public static final short DDIV = 111; - public static final short IREM = 112; - public static final short LREM = 113; - public static final short FREM = 114; - public static final short DREM = 115; - public static final short INEG = 116; - public static final short LNEG = 117; - public static final short FNEG = 118; - public static final short DNEG = 119; - public static final short ISHL = 120; - public static final short LSHL = 121; - public static final short ISHR = 122; - public static final short LSHR = 123; - public static final short IUSHR = 124; - public static final short LUSHR = 125; - public static final short IAND = 126; - public static final short LAND = 127; - public static final short IOR = 128; - public static final short LOR = 129; - public static final short IXOR = 130; - public static final short LXOR = 131; - public static final short IINC = 132; - public static final short I2L = 133; - public static final short I2F = 134; - public static final short I2D = 135; - public static final short L2I = 136; - public static final short L2F = 137; - public static final short L2D = 138; - public static final short F2I = 139; - public static final short F2L = 140; - public static final short F2D = 141; - public static final short D2I = 142; - public static final short D2L = 143; - public static final short D2F = 144; - public static final short I2B = 145; - public static final short INT2BYTE = 145; // Old notion - public static final short I2C = 146; - public static final short INT2CHAR = 146; // Old notion - public static final short I2S = 147; - public static final short INT2SHORT = 147; // Old notion - public static final short LCMP = 148; - public static final short FCMPL = 149; - public static final short FCMPG = 150; - public static final short DCMPL = 151; - public static final short DCMPG = 152; - public static final short IFEQ = 153; - public static final short IFNE = 154; - public static final short IFLT = 155; - public static final short IFGE = 156; - public static final short IFGT = 157; - public static final short IFLE = 158; - public static final short IF_ICMPEQ = 159; - public static final short IF_ICMPNE = 160; - public static final short IF_ICMPLT = 161; - public static final short IF_ICMPGE = 162; - public static final short IF_ICMPGT = 163; - public static final short IF_ICMPLE = 164; - public static final short IF_ACMPEQ = 165; - public static final short IF_ACMPNE = 166; - public static final short GOTO = 167; - public static final short JSR = 168; - public static final short RET = 169; - public static final short TABLESWITCH = 170; - public static final short LOOKUPSWITCH = 171; - public static final short IRETURN = 172; - public static final short LRETURN = 173; - public static final short FRETURN = 174; - public static final short DRETURN = 175; - public static final short ARETURN = 176; - public static final short RETURN = 177; - public static final short GETSTATIC = 178; - public static final short PUTSTATIC = 179; - public static final short GETFIELD = 180; - public static final short PUTFIELD = 181; - public static final short INVOKEVIRTUAL = 182; - public static final short INVOKESPECIAL = 183; - public static final short INVOKENONVIRTUAL = 183; // Old name in JDK 1.0 - public static final short INVOKESTATIC = 184; - public static final short INVOKEINTERFACE = 185; - public static final short NEW = 187; - public static final short NEWARRAY = 188; - public static final short ANEWARRAY = 189; - public static final short ARRAYLENGTH = 190; - public static final short ATHROW = 191; - public static final short CHECKCAST = 192; - public static final short INSTANCEOF = 193; - public static final short MONITORENTER = 194; - public static final short MONITOREXIT = 195; - public static final short WIDE = 196; - public static final short MULTIANEWARRAY = 197; - public static final short IFNULL = 198; - public static final short IFNONNULL = 199; - public static final short GOTO_W = 200; - public static final short JSR_W = 201; - - /** - * Non-legal opcodes, may be used by JVM internally. - */ - public static final short BREAKPOINT = 202; - public static final short LDC_QUICK = 203; - public static final short LDC_W_QUICK = 204; - public static final short LDC2_W_QUICK = 205; - public static final short GETFIELD_QUICK = 206; - public static final short PUTFIELD_QUICK = 207; - public static final short GETFIELD2_QUICK = 208; - public static final short PUTFIELD2_QUICK = 209; - public static final short GETSTATIC_QUICK = 210; - public static final short PUTSTATIC_QUICK = 211; - public static final short GETSTATIC2_QUICK = 212; - public static final short PUTSTATIC2_QUICK = 213; - public static final short INVOKEVIRTUAL_QUICK = 214; - public static final short INVOKENONVIRTUAL_QUICK = 215; - public static final short INVOKESUPER_QUICK = 216; - public static final short INVOKESTATIC_QUICK = 217; - public static final short INVOKEINTERFACE_QUICK = 218; - public static final short INVOKEVIRTUALOBJECT_QUICK = 219; - public static final short NEW_QUICK = 221; - public static final short ANEWARRAY_QUICK = 222; - public static final short MULTIANEWARRAY_QUICK = 223; - public static final short CHECKCAST_QUICK = 224; - public static final short INSTANCEOF_QUICK = 225; - public static final short INVOKEVIRTUAL_QUICK_W = 226; - public static final short GETFIELD_QUICK_W = 227; - public static final short PUTFIELD_QUICK_W = 228; - public static final short IMPDEP1 = 254; - public static final short IMPDEP2 = 255; - - /** - * For internal purposes only. - */ - public static final short PUSH = 4711; - public static final short SWITCH = 4712; - - /** - * Illegal codes - */ - public static final short UNDEFINED = -1; - public static final short UNPREDICTABLE = -2; - public static final short RESERVED = -3; - public static final String ILLEGAL_OPCODE = ""; - public static final String ILLEGAL_TYPE = ""; - - public static final byte T_BOOLEAN = 4; - public static final byte T_CHAR = 5; - public static final byte T_FLOAT = 6; - public static final byte T_DOUBLE = 7; - public static final byte T_BYTE = 8; - public static final byte T_SHORT = 9; - public static final byte T_INT = 10; - public static final byte T_LONG = 11; - - public static final byte T_VOID = 12; // Non-standard - public static final byte T_ARRAY = 13; - public static final byte T_OBJECT = 14; - public static final byte T_REFERENCE = 14; // Deprecated - public static final byte T_UNKNOWN = 15; - public static final byte T_ADDRESS = 16; - - /** - * The primitive type names corresponding to the T_XX constants, e.g., - * TYPE_NAMES[T_INT] = "int" - */ - public static final String[] TYPE_NAMES = { ILLEGAL_TYPE, ILLEGAL_TYPE, - ILLEGAL_TYPE, ILLEGAL_TYPE, "boolean", "char", "float", "double", - "byte", "short", "int", "long", "void", "array", "object", - "unknown" // Non-standard - }; - - /** - * The primitive class names corresponding to the T_XX constants, e.g., - * CLASS_TYPE_NAMES[T_INT] = "java.lang.Integer" - */ - public static final String[] CLASS_TYPE_NAMES = { ILLEGAL_TYPE, - ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, "java.lang.Boolean", - "java.lang.Character", "java.lang.Float", "java.lang.Double", - "java.lang.Byte", "java.lang.Short", "java.lang.Integer", - "java.lang.Long", "java.lang.Void", ILLEGAL_TYPE, ILLEGAL_TYPE, - ILLEGAL_TYPE }; - - /** - * The signature characters corresponding to primitive types, e.g., - * SHORT_TYPE_NAMES[T_INT] = "I" - */ - public static final String[] SHORT_TYPE_NAMES = { ILLEGAL_TYPE, - ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE, "Z", "C", "F", "D", "B", - "S", "I", "J", "V", ILLEGAL_TYPE, ILLEGAL_TYPE, ILLEGAL_TYPE }; - - /** - * Number of byte code operands, i.e., number of bytes after the tag byte - * itself. - */ - public static final short[] NO_OF_OPERANDS = { 0/* nop */, - 0/* aconst_null */, 0/* iconst_m1 */, 0/* iconst_0 */, 0/* iconst_1 */, - 0/* iconst_2 */, 0/* iconst_3 */, 0/* iconst_4 */, 0/* iconst_5 */, - 0/* lconst_0 */, 0/* lconst_1 */, 0/* fconst_0 */, 0/* fconst_1 */, - 0/* fconst_2 */, 0/* dconst_0 */, 0/* dconst_1 */, 1/* bipush */, - 2/* sipush */, 1/* ldc */, 2/* ldc_w */, 2/* ldc2_w */, - 1/* iload */, 1/* lload */, 1/* fload */, 1/* dload */, 1/* aload */, - 0/* iload_0 */, 0/* iload_1 */, 0/* iload_2 */, 0/* iload_3 */, - 0/* lload_0 */, 0/* lload_1 */, 0/* lload_2 */, 0/* lload_3 */, - 0/* fload_0 */, 0/* fload_1 */, 0/* fload_2 */, 0/* fload_3 */, - 0/* dload_0 */, 0/* dload_1 */, 0/* dload_2 */, 0/* dload_3 */, - 0/* aload_0 */, 0/* aload_1 */, 0/* aload_2 */, 0/* aload_3 */, - 0/* iaload */, 0/* laload */, 0/* faload */, 0/* daload */, - 0/* aaload */, 0/* baload */, 0/* caload */, 0/* saload */, - 1/* istore */, 1/* lstore */, 1/* fstore */, 1/* dstore */, - 1/* astore */, 0/* istore_0 */, 0/* istore_1 */, 0/* istore_2 */, - 0/* istore_3 */, 0/* lstore_0 */, 0/* lstore_1 */, 0/* lstore_2 */, - 0/* lstore_3 */, 0/* fstore_0 */, 0/* fstore_1 */, 0/* fstore_2 */, - 0/* fstore_3 */, 0/* dstore_0 */, 0/* dstore_1 */, 0/* dstore_2 */, - 0/* dstore_3 */, 0/* astore_0 */, 0/* astore_1 */, 0/* astore_2 */, - 0/* astore_3 */, 0/* iastore */, 0/* lastore */, 0/* fastore */, - 0/* dastore */, 0/* aastore */, 0/* bastore */, 0/* castore */, - 0/* sastore */, 0/* pop */, 0/* pop2 */, 0/* dup */, 0/* dup_x1 */, - 0/* dup_x2 */, 0/* dup2 */, 0/* dup2_x1 */, 0/* dup2_x2 */, - 0/* swap */, 0/* iadd */, 0/* ladd */, 0/* fadd */, 0/* dadd */, - 0/* isub */, 0/* lsub */, 0/* fsub */, 0/* dsub */, 0/* imul */, - 0/* lmul */, 0/* fmul */, 0/* dmul */, 0/* idiv */, 0/* ldiv */, - 0/* fdiv */, 0/* ddiv */, 0/* irem */, 0/* lrem */, 0/* frem */, - 0/* drem */, 0/* ineg */, 0/* lneg */, 0/* fneg */, 0/* dneg */, - 0/* ishl */, 0/* lshl */, 0/* ishr */, 0/* lshr */, 0/* iushr */, - 0/* lushr */, 0/* iand */, 0/* land */, 0/* ior */, 0/* lor */, - 0/* ixor */, 0/* lxor */, 2/* iinc */, 0/* i2l */, 0/* i2f */, - 0/* i2d */, 0/* l2i */, 0/* l2f */, 0/* l2d */, 0/* f2i */, - 0/* f2l */, 0/* f2d */, 0/* d2i */, 0/* d2l */, 0/* d2f */, - 0/* i2b */, 0/* i2c */, 0/* i2s */, 0/* lcmp */, 0/* fcmpl */, - 0/* fcmpg */, 0/* dcmpl */, 0/* dcmpg */, 2/* ifeq */, 2/* ifne */, - 2/* iflt */, 2/* ifge */, 2/* ifgt */, 2/* ifle */, 2/* if_icmpeq */, - 2/* if_icmpne */, 2/* if_icmplt */, 2/* if_icmpge */, 2/* if_icmpgt */, - 2/* if_icmple */, 2/* if_acmpeq */, 2/* if_acmpne */, 2/* goto */, - 2/* jsr */, 1/* ret */, UNPREDICTABLE/* tableswitch */, - UNPREDICTABLE/* lookupswitch */, 0/* ireturn */, 0/* lreturn */, - 0/* freturn */, 0/* dreturn */, 0/* areturn */, 0/* return */, - 2/* getstatic */, 2/* putstatic */, 2/* getfield */, 2/* putfield */, - 2/* invokevirtual */, 2/* invokespecial */, 2/* invokestatic */, - 4/* invokeinterface */, UNDEFINED, 2/* new */, 1/* newarray */, - 2/* anewarray */, 0/* arraylength */, 0/* athrow */, - 2/* checkcast */, 2/* instanceof */, 0/* monitorenter */, - 0/* monitorexit */, UNPREDICTABLE/* wide */, 3/* multianewarray */, - 2/* ifnull */, 2/* ifnonnull */, 4/* goto_w */, 4/* jsr_w */, - 0/* breakpoint */, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - RESERVED/* impdep1 */, RESERVED /* impdep2 */ - }; - - /** - * How the byte code operands are to be interpreted. - */ - public static final short[][] TYPE_OF_OPERANDS = { {}/* nop */, - {}/* aconst_null */, {}/* iconst_m1 */, {}/* iconst_0 */, - {}/* iconst_1 */, {}/* iconst_2 */, {}/* iconst_3 */, {}/* iconst_4 */, - {}/* iconst_5 */, {}/* lconst_0 */, {}/* lconst_1 */, {}/* fconst_0 */, - {}/* fconst_1 */, {}/* fconst_2 */, {}/* dconst_0 */, {}/* dconst_1 */, - { T_BYTE }/* bipush */, { T_SHORT }/* sipush */, { T_BYTE }/* ldc */, - { T_SHORT }/* ldc_w */, { T_SHORT }/* ldc2_w */, - { T_BYTE }/* iload */, { T_BYTE }/* lload */, - { T_BYTE }/* fload */, { T_BYTE }/* dload */, - { T_BYTE }/* aload */, {}/* iload_0 */, {}/* iload_1 */, - {}/* iload_2 */, {}/* iload_3 */, {}/* lload_0 */, {}/* lload_1 */, - {}/* lload_2 */, {}/* lload_3 */, {}/* fload_0 */, {}/* fload_1 */, - {}/* fload_2 */, {}/* fload_3 */, {}/* dload_0 */, {}/* dload_1 */, - {}/* dload_2 */, {}/* dload_3 */, {}/* aload_0 */, {}/* aload_1 */, - {}/* aload_2 */, {}/* aload_3 */, {}/* iaload */, {}/* laload */, - {}/* faload */, {}/* daload */, {}/* aaload */, {}/* baload */, - {}/* caload */, {}/* saload */, { T_BYTE }/* istore */, - { T_BYTE }/* lstore */, { T_BYTE }/* fstore */, - { T_BYTE }/* dstore */, { T_BYTE }/* astore */, {}/* istore_0 */, - {}/* istore_1 */, {}/* istore_2 */, {}/* istore_3 */, {}/* lstore_0 */, - {}/* lstore_1 */, {}/* lstore_2 */, {}/* lstore_3 */, {}/* fstore_0 */, - {}/* fstore_1 */, {}/* fstore_2 */, {}/* fstore_3 */, {}/* dstore_0 */, - {}/* dstore_1 */, {}/* dstore_2 */, {}/* dstore_3 */, {}/* astore_0 */, - {}/* astore_1 */, {}/* astore_2 */, {}/* astore_3 */, {}/* iastore */, - {}/* lastore */, {}/* fastore */, {}/* dastore */, {}/* aastore */, - {}/* bastore */, {}/* castore */, {}/* sastore */, {}/* pop */, - {}/* pop2 */, {}/* dup */, {}/* dup_x1 */, {}/* dup_x2 */, {}/* dup2 */, - {}/* dup2_x1 */, {}/* dup2_x2 */, {}/* swap */, {}/* iadd */, {}/* ladd */, - {}/* fadd */, {}/* dadd */, {}/* isub */, {}/* lsub */, {}/* fsub */, - {}/* dsub */, {}/* imul */, {}/* lmul */, {}/* fmul */, {}/* dmul */, - {}/* idiv */, {}/* ldiv */, {}/* fdiv */, {}/* ddiv */, {}/* irem */, - {}/* lrem */, {}/* frem */, {}/* drem */, {}/* ineg */, {}/* lneg */, - {}/* fneg */, {}/* dneg */, {}/* ishl */, {}/* lshl */, {}/* ishr */, - {}/* lshr */, {}/* iushr */, {}/* lushr */, {}/* iand */, {}/* land */, - {}/* ior */, {}/* lor */, {}/* ixor */, {}/* lxor */, - { T_BYTE, T_BYTE }/* iinc */, {}/* i2l */, {}/* i2f */, {}/* i2d */, - {}/* l2i */, {}/* l2f */, {}/* l2d */, {}/* f2i */, {}/* f2l */, - {}/* f2d */, {}/* d2i */, {}/* d2l */, {}/* d2f */, {}/* i2b */, - {}/* i2c */, {}/* i2s */, {}/* lcmp */, {}/* fcmpl */, {}/* fcmpg */, - {}/* dcmpl */, {}/* dcmpg */, { T_SHORT }/* ifeq */, - { T_SHORT }/* ifne */, { T_SHORT }/* iflt */, - { T_SHORT }/* ifge */, { T_SHORT }/* ifgt */, - { T_SHORT }/* ifle */, { T_SHORT }/* if_icmpeq */, - { T_SHORT }/* if_icmpne */, { T_SHORT }/* if_icmplt */, - { T_SHORT }/* if_icmpge */, { T_SHORT }/* if_icmpgt */, - { T_SHORT }/* if_icmple */, { T_SHORT }/* if_acmpeq */, - { T_SHORT }/* if_acmpne */, { T_SHORT }/* goto */, - { T_SHORT }/* jsr */, { T_BYTE }/* ret */, {}/* tableswitch */, - {}/* lookupswitch */, {}/* ireturn */, {}/* lreturn */, {}/* freturn */, - {}/* dreturn */, {}/* areturn */, {}/* return */, - { T_SHORT }/* getstatic */, { T_SHORT }/* putstatic */, - { T_SHORT }/* getfield */, { T_SHORT }/* putfield */, - { T_SHORT }/* invokevirtual */, { T_SHORT }/* invokespecial */, - { T_SHORT }/* invokestatic */, - { T_SHORT, T_BYTE, T_BYTE }/* invokeinterface */, {}, - { T_SHORT }/* new */, { T_BYTE }/* newarray */, - { T_SHORT }/* anewarray */, {}/* arraylength */, {}/* athrow */, - { T_SHORT }/* checkcast */, { T_SHORT }/* instanceof */, - {}/* monitorenter */, {}/* monitorexit */, { T_BYTE }/* wide */, - { T_SHORT, T_BYTE }/* multianewarray */, { T_SHORT }/* ifnull */, - { T_SHORT }/* ifnonnull */, { T_INT }/* goto_w */, - { T_INT }/* jsr_w */, {}/* breakpoint */, {}, {}, {}, {}, {}, {}, - {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, - {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, - {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}/* impdep1 */, {} /* impdep2 */ - }; - - /** - * Names of opcodes. - */ - public static final String[] OPCODE_NAMES = { "nop", "aconst_null", - "iconst_m1", "iconst_0", "iconst_1", "iconst_2", "iconst_3", - "iconst_4", "iconst_5", "lconst_0", "lconst_1", "fconst_0", - "fconst_1", "fconst_2", "dconst_0", "dconst_1", "bipush", "sipush", - "ldc", "ldc_w", "ldc2_w", "iload", "lload", "fload", "dload", - "aload", "iload_0", "iload_1", "iload_2", "iload_3", "lload_0", - "lload_1", "lload_2", "lload_3", "fload_0", "fload_1", "fload_2", - "fload_3", "dload_0", "dload_1", "dload_2", "dload_3", "aload_0", - "aload_1", "aload_2", "aload_3", "iaload", "laload", "faload", - "daload", "aaload", "baload", "caload", "saload", "istore", - "lstore", "fstore", "dstore", "astore", "istore_0", "istore_1", - "istore_2", "istore_3", "lstore_0", "lstore_1", "lstore_2", - "lstore_3", "fstore_0", "fstore_1", "fstore_2", "fstore_3", - "dstore_0", "dstore_1", "dstore_2", "dstore_3", "astore_0", - "astore_1", "astore_2", "astore_3", "iastore", "lastore", - "fastore", "dastore", "aastore", "bastore", "castore", "sastore", - "pop", "pop2", "dup", "dup_x1", "dup_x2", "dup2", "dup2_x1", - "dup2_x2", "swap", "iadd", "ladd", "fadd", "dadd", "isub", "lsub", - "fsub", "dsub", "imul", "lmul", "fmul", "dmul", "idiv", "ldiv", - "fdiv", "ddiv", "irem", "lrem", "frem", "drem", "ineg", "lneg", - "fneg", "dneg", "ishl", "lshl", "ishr", "lshr", "iushr", "lushr", - "iand", "land", "ior", "lor", "ixor", "lxor", "iinc", "i2l", "i2f", - "i2d", "l2i", "l2f", "l2d", "f2i", "f2l", "f2d", "d2i", "d2l", - "d2f", "i2b", "i2c", "i2s", "lcmp", "fcmpl", "fcmpg", "dcmpl", - "dcmpg", "ifeq", "ifne", "iflt", "ifge", "ifgt", "ifle", - "if_icmpeq", "if_icmpne", "if_icmplt", "if_icmpge", "if_icmpgt", - "if_icmple", "if_acmpeq", "if_acmpne", "goto", "jsr", "ret", - "tableswitch", "lookupswitch", "ireturn", "lreturn", "freturn", - "dreturn", "areturn", "return", "getstatic", "putstatic", - "getfield", "putfield", "invokevirtual", "invokespecial", - "invokestatic", "invokeinterface", ILLEGAL_OPCODE, "new", - "newarray", "anewarray", "arraylength", "athrow", "checkcast", - "instanceof", "monitorenter", "monitorexit", "wide", - "multianewarray", "ifnull", "ifnonnull", "goto_w", "jsr_w", - "breakpoint", ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, ILLEGAL_OPCODE, - "impdep1", "impdep2" }; - - /** - * Number of words consumed on operand stack by instructions. - */ - public static final int[] CONSUME_STACK = { 0/* nop */, 0/* aconst_null */, - 0/* iconst_m1 */, 0/* iconst_0 */, 0/* iconst_1 */, 0/* iconst_2 */, - 0/* iconst_3 */, 0/* iconst_4 */, 0/* iconst_5 */, 0/* lconst_0 */, - 0/* lconst_1 */, 0/* fconst_0 */, 0/* fconst_1 */, 0/* fconst_2 */, - 0/* dconst_0 */, 0/* dconst_1 */, 0/* bipush */, 0/* sipush */, - 0/* ldc */, 0/* ldc_w */, 0/* ldc2_w */, 0/* iload */, 0/* lload */, - 0/* fload */, 0/* dload */, 0/* aload */, 0/* iload_0 */, 0/* iload_1 */, - 0/* iload_2 */, 0/* iload_3 */, 0/* lload_0 */, 0/* lload_1 */, - 0/* lload_2 */, 0/* lload_3 */, 0/* fload_0 */, 0/* fload_1 */, - 0/* fload_2 */, 0/* fload_3 */, 0/* dload_0 */, 0/* dload_1 */, - 0/* dload_2 */, 0/* dload_3 */, 0/* aload_0 */, 0/* aload_1 */, - 0/* aload_2 */, 0/* aload_3 */, 2/* iaload */, 2/* laload */, - 2/* faload */, 2/* daload */, 2/* aaload */, 2/* baload */, - 2/* caload */, 2/* saload */, 1/* istore */, 2/* lstore */, - 1/* fstore */, 2/* dstore */, 1/* astore */, 1/* istore_0 */, - 1/* istore_1 */, 1/* istore_2 */, 1/* istore_3 */, 2/* lstore_0 */, - 2/* lstore_1 */, 2/* lstore_2 */, 2/* lstore_3 */, 1/* fstore_0 */, - 1/* fstore_1 */, 1/* fstore_2 */, 1/* fstore_3 */, 2/* dstore_0 */, - 2/* dstore_1 */, 2/* dstore_2 */, 2/* dstore_3 */, 1/* astore_0 */, - 1/* astore_1 */, 1/* astore_2 */, 1/* astore_3 */, 3/* iastore */, - 4/* lastore */, 3/* fastore */, 4/* dastore */, 3/* aastore */, - 3/* bastore */, 3/* castore */, 3/* sastore */, 1/* pop */, - 2/* pop2 */, 1/* dup */, 2/* dup_x1 */, 3/* dup_x2 */, 2/* dup2 */, - 3/* dup2_x1 */, 4/* dup2_x2 */, 2/* swap */, 2/* iadd */, 4/* ladd */, - 2/* fadd */, 4/* dadd */, 2/* isub */, 4/* lsub */, 2/* fsub */, - 4/* dsub */, 2/* imul */, 4/* lmul */, 2/* fmul */, 4/* dmul */, - 2/* idiv */, 4/* ldiv */, 2/* fdiv */, 4/* ddiv */, 2/* irem */, - 4/* lrem */, 2/* frem */, 4/* drem */, 1/* ineg */, 2/* lneg */, - 1/* fneg */, 2/* dneg */, 2/* ishl */, 3/* lshl */, 2/* ishr */, - 3/* lshr */, 2/* iushr */, 3/* lushr */, 2/* iand */, 4/* land */, - 2/* ior */, 4/* lor */, 2/* ixor */, 4/* lxor */, 0/* iinc */, - 1/* i2l */, 1/* i2f */, 1/* i2d */, 2/* l2i */, 2/* l2f */, - 2/* l2d */, 1/* f2i */, 1/* f2l */, 1/* f2d */, 2/* d2i */, - 2/* d2l */, 2/* d2f */, 1/* i2b */, 1/* i2c */, 1/* i2s */, - 4/* lcmp */, 2/* fcmpl */, 2/* fcmpg */, 4/* dcmpl */, 4/* dcmpg */, - 1/* ifeq */, 1/* ifne */, 1/* iflt */, 1/* ifge */, 1/* ifgt */, - 1/* ifle */, 2/* if_icmpeq */, 2/* if_icmpne */, 2/* if_icmplt */, - 2 /* if_icmpge */, 2/* if_icmpgt */, 2/* if_icmple */, 2/* if_acmpeq */, - 2/* if_acmpne */, 0/* goto */, 0/* jsr */, 0/* ret */, - 1/* tableswitch */, 1/* lookupswitch */, 1/* ireturn */, - 2/* lreturn */, 1/* freturn */, 2/* dreturn */, 1/* areturn */, - 0/* return */, 0/* getstatic */, UNPREDICTABLE/* putstatic */, - 1/* getfield */, UNPREDICTABLE/* putfield */, - UNPREDICTABLE/* invokevirtual */, UNPREDICTABLE/* invokespecial */, - UNPREDICTABLE/* invokestatic */, UNPREDICTABLE/* invokeinterface */, - UNDEFINED, 0/* new */, 1/* newarray */, 1/* anewarray */, - 1/* arraylength */, 1/* athrow */, 1/* checkcast */, - 1/* instanceof */, 1/* monitorenter */, 1/* monitorexit */, - 0/* wide */, UNPREDICTABLE/* multianewarray */, 1/* ifnull */, - 1/* ifnonnull */, 0/* goto_w */, 0/* jsr_w */, 0/* breakpoint */, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNPREDICTABLE/* impdep1 */, - UNPREDICTABLE /* impdep2 */ - }; - - /** - * Number of words produced onto operand stack by instructions. - */ - public static final int[] PRODUCE_STACK = { 0/* nop */, 1/* aconst_null */, - 1/* iconst_m1 */, 1/* iconst_0 */, 1/* iconst_1 */, 1/* iconst_2 */, - 1/* iconst_3 */, 1/* iconst_4 */, 1/* iconst_5 */, 2/* lconst_0 */, - 2/* lconst_1 */, 1/* fconst_0 */, 1/* fconst_1 */, 1/* fconst_2 */, - 2/* dconst_0 */, 2/* dconst_1 */, 1/* bipush */, 1/* sipush */, - 1/* ldc */, 1/* ldc_w */, 2/* ldc2_w */, 1/* iload */, 2/* lload */, - 1/* fload */, 2/* dload */, 1/* aload */, 1/* iload_0 */, 1/* iload_1 */, - 1/* iload_2 */, 1/* iload_3 */, 2/* lload_0 */, 2/* lload_1 */, - 2/* lload_2 */, 2/* lload_3 */, 1/* fload_0 */, 1/* fload_1 */, - 1/* fload_2 */, 1/* fload_3 */, 2/* dload_0 */, 2/* dload_1 */, - 2/* dload_2 */, 2/* dload_3 */, 1/* aload_0 */, 1/* aload_1 */, - 1/* aload_2 */, 1/* aload_3 */, 1/* iaload */, 2/* laload */, - 1/* faload */, 2/* daload */, 1/* aaload */, 1/* baload */, - 1/* caload */, 1/* saload */, 0/* istore */, 0/* lstore */, - 0/* fstore */, 0/* dstore */, 0/* astore */, 0/* istore_0 */, - 0/* istore_1 */, 0/* istore_2 */, 0/* istore_3 */, 0/* lstore_0 */, - 0/* lstore_1 */, 0/* lstore_2 */, 0/* lstore_3 */, 0/* fstore_0 */, - 0/* fstore_1 */, 0/* fstore_2 */, 0/* fstore_3 */, 0/* dstore_0 */, - 0/* dstore_1 */, 0/* dstore_2 */, 0/* dstore_3 */, 0/* astore_0 */, - 0/* astore_1 */, 0/* astore_2 */, 0/* astore_3 */, 0/* iastore */, - 0/* lastore */, 0/* fastore */, 0/* dastore */, 0/* aastore */, - 0/* bastore */, 0/* castore */, 0/* sastore */, 0/* pop */, - 0/* pop2 */, 2/* dup */, 3/* dup_x1 */, 4/* dup_x2 */, 4/* dup2 */, - 5/* dup2_x1 */, 6/* dup2_x2 */, 2/* swap */, 1/* iadd */, 2/* ladd */, - 1/* fadd */, 2/* dadd */, 1/* isub */, 2/* lsub */, 1/* fsub */, - 2/* dsub */, 1/* imul */, 2/* lmul */, 1/* fmul */, 2/* dmul */, - 1/* idiv */, 2/* ldiv */, 1/* fdiv */, 2/* ddiv */, 1/* irem */, - 2/* lrem */, 1/* frem */, 2/* drem */, 1/* ineg */, 2/* lneg */, - 1/* fneg */, 2/* dneg */, 1/* ishl */, 2/* lshl */, 1/* ishr */, - 2/* lshr */, 1/* iushr */, 2/* lushr */, 1/* iand */, 2/* land */, - 1/* ior */, 2/* lor */, 1/* ixor */, 2/* lxor */, 0/* iinc */, - 2/* i2l */, 1/* i2f */, 2/* i2d */, 1/* l2i */, 1/* l2f */, - 2/* l2d */, 1/* f2i */, 2/* f2l */, 2/* f2d */, 1/* d2i */, - 2/* d2l */, 1/* d2f */, 1/* i2b */, 1/* i2c */, 1/* i2s */, - 1/* lcmp */, 1/* fcmpl */, 1/* fcmpg */, 1/* dcmpl */, 1/* dcmpg */, - 0/* ifeq */, 0/* ifne */, 0/* iflt */, 0/* ifge */, 0/* ifgt */, - 0/* ifle */, 0/* if_icmpeq */, 0/* if_icmpne */, 0/* if_icmplt */, - 0/* if_icmpge */, 0/* if_icmpgt */, 0/* if_icmple */, 0/* if_acmpeq */, - 0/* if_acmpne */, 0/* goto */, 1/* jsr */, 0/* ret */, - 0/* tableswitch */, 0/* lookupswitch */, 0/* ireturn */, - 0/* lreturn */, 0/* freturn */, 0/* dreturn */, 0/* areturn */, - 0/* return */, UNPREDICTABLE/* getstatic */, 0/* putstatic */, - UNPREDICTABLE/* getfield */, 0/* putfield */, - UNPREDICTABLE/* invokevirtual */, UNPREDICTABLE/* invokespecial */, - UNPREDICTABLE/* invokestatic */, UNPREDICTABLE/* invokeinterface */, - UNDEFINED, 1/* new */, 1/* newarray */, 1/* anewarray */, - 1/* arraylength */, 1/* athrow */, 1/* checkcast */, - 1/* instanceof */, 0/* monitorenter */, 0/* monitorexit */, - 0/* wide */, 1/* multianewarray */, 0/* ifnull */, - 0/* ifnonnull */, 0/* goto_w */, 1/* jsr_w */, 0/* breakpoint */, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, - UNDEFINED, UNDEFINED, UNDEFINED, UNPREDICTABLE/* impdep1 */, - UNPREDICTABLE /* impdep2 */ - }; - - /** - * Attributes and their corresponding names. - */ - public static final byte ATTR_UNKNOWN = -1; - public static final byte ATTR_SOURCE_FILE = 0; - public static final byte ATTR_CONSTANT_VALUE = 1; - public static final byte ATTR_CODE = 2; - public static final byte ATTR_EXCEPTIONS = 3; - public static final byte ATTR_LINE_NUMBER_TABLE = 4; - public static final byte ATTR_LOCAL_VARIABLE_TABLE = 5; - public static final byte ATTR_INNER_CLASSES = 6; - public static final byte ATTR_SYNTHETIC = 7; - public static final byte ATTR_DEPRECATED = 8; - public static final byte ATTR_PMG = 9; - public static final byte ATTR_SIGNATURE = 10; - public static final byte ATTR_STACK_MAP = 11; - public static final byte ATTR_RUNTIMEVISIBLE_ANNOTATIONS = 12; - public static final byte ATTR_RUNTIMEINVISIBLE_ANNOTATIONS = 13; - public static final byte ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS = 14; - public static final byte ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS = 15; - public static final byte ATTR_ANNOTATION_DEFAULT = 16; - - public static final short KNOWN_ATTRIBUTES = 12;// should be 17 - - public static final String[] ATTRIBUTE_NAMES = { "SourceFile", - "ConstantValue", "Code", "Exceptions", "LineNumberTable", - "LocalVariableTable", "InnerClasses", "Synthetic", "Deprecated", - "PMGClass", "Signature", "StackMap", "RuntimeVisibleAnnotations", - "RuntimeInvisibleAnnotations", - "RuntimeVisibleParameterAnnotations", - "RuntimeInvisibleParameterAnnotations", "AnnotationDefault" }; - - /** - * Constants used in the StackMap attribute. - */ - public static final byte ITEM_Bogus = 0; - public static final byte ITEM_Integer = 1; - public static final byte ITEM_Float = 2; - public static final byte ITEM_Double = 3; - public static final byte ITEM_Long = 4; - public static final byte ITEM_Null = 5; - public static final byte ITEM_InitObject = 6; - public static final byte ITEM_Object = 7; - public static final byte ITEM_NewObject = 8; - - public static final String[] ITEM_NAMES = { "Bogus", "Integer", "Float", - "Double", "Long", "Null", "InitObject", "Object", "NewObject" }; -} diff --git a/src/org/apache/bcel/ExceptionConstants.java b/src/org/apache/bcel/ExceptionConstants.java deleted file mode 100644 index fe8f3ee..0000000 --- a/src/org/apache/bcel/ExceptionConstants.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel; - -/** - * Exception constants. - * - * @version $Id: ExceptionConstants.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author E. Haase - */ -public interface ExceptionConstants { - - /** - * The mother of all exceptions - */ - public static final Class THROWABLE = Throwable.class; - /** - * Super class of any run-time exception - */ - public static final Class RUNTIME_EXCEPTION = RuntimeException.class; - /** - * Super class of any linking exception (aka Linkage Error) - */ - public static final Class LINKING_EXCEPTION = LinkageError.class; - /** - * Linking Exceptions - */ - public static final Class CLASS_CIRCULARITY_ERROR = ClassCircularityError.class; - public static final Class CLASS_FORMAT_ERROR = ClassFormatError.class; - public static final Class EXCEPTION_IN_INITIALIZER_ERROR = ExceptionInInitializerError.class; - public static final Class INCOMPATIBLE_CLASS_CHANGE_ERROR = IncompatibleClassChangeError.class; - public static final Class ABSTRACT_METHOD_ERROR = AbstractMethodError.class; - public static final Class ILLEGAL_ACCESS_ERROR = IllegalAccessError.class; - public static final Class INSTANTIATION_ERROR = InstantiationError.class; - public static final Class NO_SUCH_FIELD_ERROR = NoSuchFieldError.class; - public static final Class NO_SUCH_METHOD_ERROR = NoSuchMethodError.class; - public static final Class NO_CLASS_DEF_FOUND_ERROR = NoClassDefFoundError.class; - public static final Class UNSATISFIED_LINK_ERROR = UnsatisfiedLinkError.class; - public static final Class VERIFY_ERROR = VerifyError.class; - /* UnsupportedClassVersionError is new in JDK 1.2 */ - // public static final Class UnsupportedClassVersionError = - // UnsupportedClassVersionError.class; - /** - * Run-Time Exceptions - */ - public static final Class NULL_POINTER_EXCEPTION = NullPointerException.class; - public static final Class ARRAY_INDEX_OUT_OF_BOUNDS_EXCEPTION = ArrayIndexOutOfBoundsException.class; - public static final Class ARITHMETIC_EXCEPTION = ArithmeticException.class; - public static final Class NEGATIVE_ARRAY_SIZE_EXCEPTION = NegativeArraySizeException.class; - public static final Class CLASS_CAST_EXCEPTION = ClassCastException.class; - public static final Class ILLEGAL_MONITOR_STATE = IllegalMonitorStateException.class; - /** - * Pre-defined exception arrays according to chapters 5.1-5.4 of the Java - * Virtual Machine Specification - */ - public static final Class[] EXCS_CLASS_AND_INTERFACE_RESOLUTION = { - NO_CLASS_DEF_FOUND_ERROR, CLASS_FORMAT_ERROR, VERIFY_ERROR, - ABSTRACT_METHOD_ERROR, EXCEPTION_IN_INITIALIZER_ERROR, - ILLEGAL_ACCESS_ERROR }; // Chapter 5.1 - public static final Class[] EXCS_FIELD_AND_METHOD_RESOLUTION = { - NO_SUCH_FIELD_ERROR, ILLEGAL_ACCESS_ERROR, NO_SUCH_METHOD_ERROR }; // Chapter - // 5.2 - public static final Class[] EXCS_INTERFACE_METHOD_RESOLUTION = new Class[0]; // Chapter - // 5.3 - // (as - // below) - public static final Class[] EXCS_STRING_RESOLUTION = new Class[0]; - // Chapter 5.4 (no errors but the ones that _always_ could happen! How - // stupid.) - public static final Class[] EXCS_ARRAY_EXCEPTION = { - NULL_POINTER_EXCEPTION, ARRAY_INDEX_OUT_OF_BOUNDS_EXCEPTION }; -} diff --git a/src/org/apache/bcel/Repository.java b/src/org/apache/bcel/Repository.java deleted file mode 100644 index b06ec8e..0000000 --- a/src/org/apache/bcel/Repository.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel; - -import java.io.IOException; -import org.apache.bcel.classfile.JavaClass; -import org.apache.bcel.util.ClassPath; -import org.apache.bcel.util.SyntheticRepository; - -/** - * The repository maintains informations about class interdependencies, e.g., - * whether a class is a sub-class of another. Delegates actual class loading to - * SyntheticRepository with current class path by default. - * - * @see org.apache.bcel.util.Repository - * @see org.apache.bcel.util.SyntheticRepository - * - * @version $Id: Repository.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class Repository { - - private static org.apache.bcel.util.Repository _repository = SyntheticRepository - .getInstance(); - - /** - * @return currently used repository instance - */ - public static org.apache.bcel.util.Repository getRepository() { - return _repository; - } - - /** - * Set repository instance to be used for class loading - */ - public static void setRepository(org.apache.bcel.util.Repository rep) { - _repository = rep; - } - - /** - * Lookup class somewhere found on your CLASSPATH, or whereever the - * repository instance looks for it. - * - * @return class object for given fully qualified class name - * @throws ClassNotFoundException - * if the class could not be found or parsed correctly - */ - public static JavaClass lookupClass(String class_name) - throws ClassNotFoundException { - return _repository.loadClass(class_name); - } - - /** - * Try to find class source using the internal repository instance. - * - * @see Class - * @return JavaClass object for given runtime class - * @throws ClassNotFoundException - * if the class could not be found or parsed correctly - */ - public static JavaClass lookupClass(Class clazz) - throws ClassNotFoundException { - return _repository.loadClass(clazz); - } - - /** - * @return class file object for given Java class by looking on the system - * class path; returns null if the class file can't be found - */ - public static ClassPath.ClassFile lookupClassFile(String class_name) { - try { - ClassPath path = _repository.getClassPath(); - if (path == null) { - return null; - } - return path.getClassFile(class_name); - } catch (IOException e) { - return null; - } - } - - /** - * Clear the repository. - */ - public static void clearCache() { - _repository.clear(); - } - - /** - * Add clazz to repository if there isn't an equally named class already in - * there. - * - * @return old entry in repository - */ - public static JavaClass addClass(JavaClass clazz) { - JavaClass old = _repository.findClass(clazz.getClassName()); - _repository.storeClass(clazz); - return old; - } - - /** - * Remove class with given (fully qualified) name from repository. - */ - public static void removeClass(String clazz) { - _repository.removeClass(_repository.findClass(clazz)); - } - - /** - * Remove given class from repository. - */ - public static void removeClass(JavaClass clazz) { - _repository.removeClass(clazz); - } - - /** - * @return list of super classes of clazz in ascending order, i.e., Object - * is always the last element - * @throws ClassNotFoundException - * if any of the superclasses can't be found - */ - public static JavaClass[] getSuperClasses(JavaClass clazz) - throws ClassNotFoundException { - return clazz.getSuperClasses(); - } - - /** - * @return list of super classes of clazz in ascending order, i.e., Object - * is always the last element. - * @throws ClassNotFoundException - * if the named class or any of its superclasses can't be found - */ - public static JavaClass[] getSuperClasses(String class_name) - throws ClassNotFoundException { - JavaClass jc = lookupClass(class_name); - return getSuperClasses(jc); - } - - /** - * @return all interfaces implemented by class and its super classes and the - * interfaces that those interfaces extend, and so on. (Some people - * call this a transitive hull). - * @throws ClassNotFoundException - * if any of the class's superclasses or superinterfaces can't - * be found - */ - public static JavaClass[] getInterfaces(JavaClass clazz) - throws ClassNotFoundException { - return clazz.getAllInterfaces(); - } - - /** - * @return all interfaces implemented by class and its super classes and the - * interfaces that extend those interfaces, and so on - * @throws ClassNotFoundException - * if the named class can't be found, or if any of its - * superclasses or superinterfaces can't be found - */ - public static JavaClass[] getInterfaces(String class_name) - throws ClassNotFoundException { - return getInterfaces(lookupClass(class_name)); - } - - /** - * Equivalent to runtime "instanceof" operator. - * - * @return true, if clazz is an instance of super_class - * @throws ClassNotFoundException - * if any superclasses or superinterfaces of clazz can't be - * found - */ - public static boolean instanceOf(JavaClass clazz, JavaClass super_class) - throws ClassNotFoundException { - return clazz.instanceOf(super_class); - } - - /** - * @return true, if clazz is an instance of super_class - * @throws ClassNotFoundException - * if either clazz or super_class can't be found - */ - public static boolean instanceOf(String clazz, String super_class) - throws ClassNotFoundException { - return instanceOf(lookupClass(clazz), lookupClass(super_class)); - } - - /** - * @return true, if clazz is an instance of super_class - * @throws ClassNotFoundException - * if super_class can't be found - */ - public static boolean instanceOf(JavaClass clazz, String super_class) - throws ClassNotFoundException { - return instanceOf(clazz, lookupClass(super_class)); - } - - /** - * @return true, if clazz is an instance of super_class - * @throws ClassNotFoundException - * if clazz can't be found - */ - public static boolean instanceOf(String clazz, JavaClass super_class) - throws ClassNotFoundException { - return instanceOf(lookupClass(clazz), super_class); - } - - /** - * @return true, if clazz is an implementation of interface inter - * @throws ClassNotFoundException - * if any superclasses or superinterfaces of clazz can't be - * found - */ - public static boolean implementationOf(JavaClass clazz, JavaClass inter) - throws ClassNotFoundException { - return clazz.implementationOf(inter); - } - - /** - * @return true, if clazz is an implementation of interface inter - * @throws ClassNotFoundException - * if clazz, inter, or any superclasses or superinterfaces of - * clazz can't be found - */ - public static boolean implementationOf(String clazz, String inter) - throws ClassNotFoundException { - return implementationOf(lookupClass(clazz), lookupClass(inter)); - } - - /** - * @return true, if clazz is an implementation of interface inter - * @throws ClassNotFoundException - * if inter or any superclasses or superinterfaces of clazz - * can't be found - */ - public static boolean implementationOf(JavaClass clazz, String inter) - throws ClassNotFoundException { - return implementationOf(clazz, lookupClass(inter)); - } - - /** - * @return true, if clazz is an implementation of interface inter - * @throws ClassNotFoundException - * if clazz or any superclasses or superinterfaces of clazz - * can't be found - */ - public static boolean implementationOf(String clazz, JavaClass inter) - throws ClassNotFoundException { - return implementationOf(lookupClass(clazz), inter); - } -} diff --git a/src/org/apache/bcel/classfile/AccessFlags.java b/src/org/apache/bcel/classfile/AccessFlags.java deleted file mode 100644 index 006f318..0000000 --- a/src/org/apache/bcel/classfile/AccessFlags.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import org.apache.bcel.Constants; - -/** - * Super class for all objects that have modifiers like private, final, ... I.e. - * classes, fields, and methods. - * - * @version $Id: AccessFlags.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class AccessFlags implements java.io.Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected int access_flags; - - public AccessFlags() { - } - - /** - * @param a - * inital access flags - */ - public AccessFlags(int a) { - access_flags = a; - } - - /** - * @return Access flags of the object aka. "modifiers". - */ - public final int getAccessFlags() { - return access_flags; - } - - /** - * @return Access flags of the object aka. "modifiers". - */ - public final int getModifiers() { - return access_flags; - } - - /** - * Set access flags aka "modifiers". - * - * @param access_flags - * Access flags of the object. - */ - public final void setAccessFlags(int access_flags) { - this.access_flags = access_flags; - } - - /** - * Set access flags aka "modifiers". - * - * @param access_flags - * Access flags of the object. - */ - public final void setModifiers(int access_flags) { - setAccessFlags(access_flags); - } - - private final void setFlag(int flag, boolean set) { - if ((access_flags & flag) != 0) { // Flag is set already - if (!set) { - access_flags ^= flag; - } - } else { // Flag not set - if (set) { - access_flags |= flag; - } - } - } - - public final void isPublic(boolean flag) { - setFlag(Constants.ACC_PUBLIC, flag); - } - - public final boolean isPublic() { - return (access_flags & Constants.ACC_PUBLIC) != 0; - } - - public final void isPrivate(boolean flag) { - setFlag(Constants.ACC_PRIVATE, flag); - } - - public final boolean isPrivate() { - return (access_flags & Constants.ACC_PRIVATE) != 0; - } - - public final void isProtected(boolean flag) { - setFlag(Constants.ACC_PROTECTED, flag); - } - - public final boolean isProtected() { - return (access_flags & Constants.ACC_PROTECTED) != 0; - } - - public final void isStatic(boolean flag) { - setFlag(Constants.ACC_STATIC, flag); - } - - public final boolean isStatic() { - return (access_flags & Constants.ACC_STATIC) != 0; - } - - public final void isFinal(boolean flag) { - setFlag(Constants.ACC_FINAL, flag); - } - - public final boolean isFinal() { - return (access_flags & Constants.ACC_FINAL) != 0; - } - - public final void isSynchronized(boolean flag) { - setFlag(Constants.ACC_SYNCHRONIZED, flag); - } - - public final boolean isSynchronized() { - return (access_flags & Constants.ACC_SYNCHRONIZED) != 0; - } - - public final void isVolatile(boolean flag) { - setFlag(Constants.ACC_VOLATILE, flag); - } - - public final boolean isVolatile() { - return (access_flags & Constants.ACC_VOLATILE) != 0; - } - - public final void isTransient(boolean flag) { - setFlag(Constants.ACC_TRANSIENT, flag); - } - - public final boolean isTransient() { - return (access_flags & Constants.ACC_TRANSIENT) != 0; - } - - public final void isNative(boolean flag) { - setFlag(Constants.ACC_NATIVE, flag); - } - - public final boolean isNative() { - return (access_flags & Constants.ACC_NATIVE) != 0; - } - - public final void isInterface(boolean flag) { - setFlag(Constants.ACC_INTERFACE, flag); - } - - public final boolean isInterface() { - return (access_flags & Constants.ACC_INTERFACE) != 0; - } - - public final void isAbstract(boolean flag) { - setFlag(Constants.ACC_ABSTRACT, flag); - } - - public final boolean isAbstract() { - return (access_flags & Constants.ACC_ABSTRACT) != 0; - } - - public final void isStrictfp(boolean flag) { - setFlag(Constants.ACC_STRICT, flag); - } - - public final boolean isStrictfp() { - return (access_flags & Constants.ACC_STRICT) != 0; - } - - public final void isSynthetic(boolean flag) { - setFlag(Constants.ACC_SYNTHETIC, flag); - } - - public final boolean isSynthetic() { - return (access_flags & Constants.ACC_SYNTHETIC) != 0; - } - - public final void isAnnotation(boolean flag) { - setFlag(Constants.ACC_ANNOTATION, flag); - } - - public final boolean isAnnotation() { - return (access_flags & Constants.ACC_ANNOTATION) != 0; - } - - public final void isEnum(boolean flag) { - setFlag(Constants.ACC_ENUM, flag); - } - - public final boolean isEnum() { - return (access_flags & Constants.ACC_ENUM) != 0; - } -} diff --git a/src/org/apache/bcel/classfile/Attribute.java b/src/org/apache/bcel/classfile/Attribute.java deleted file mode 100644 index 5225814..0000000 --- a/src/org/apache/bcel/classfile/Attribute.java +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; - -import org.apache.bcel.Constants; - -/** - * Abstract super class for Attribute objects. Currently the - * ConstantValue, SourceFile, Code, - * Exceptiontable, LineNumberTable, - * LocalVariableTable, InnerClasses and Synthetic - * attributes are supported. The Unknown attribute stands for - * non-standard-attributes. - * - * @version $Id: Attribute.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see ConstantValue - * @see SourceFile - * @see Code - * @see Unknown - * @see ExceptionTable - * @see LineNumberTable - * @see LocalVariableTable - * @see InnerClasses - * @see Synthetic - * @see Deprecated - * @see Signature - */ -public abstract class Attribute implements Cloneable, Node, Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected int name_index; // Points to attribute name in constant pool - protected int length; // Content length of attribute field - protected byte tag; // Tag to distiguish subclasses - protected ConstantPool constant_pool; - - protected Attribute(byte tag, int name_index, int length, - ConstantPool constant_pool) { - this.tag = tag; - this.name_index = name_index; - this.length = length; - this.constant_pool = constant_pool; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public abstract void accept(Visitor v); - - /** - * Dump attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - public void dump(DataOutputStream file) throws IOException { - file.writeShort(name_index); - file.writeInt(length); - } - - private static Map readers = new HashMap(); - - /** - * Add an Attribute reader capable of parsing (user-defined) attributes - * named "name". You should not add readers for the standard attributes such - * as "LineNumberTable", because those are handled internally. - * - * @param name - * the name of the attribute as stored in the class file - * @param r - * the reader object - */ - public static void addAttributeReader(String name, AttributeReader r) { - readers.put(name, r); - } - - /** - * Remove attribute reader - * - * @param name - * the name of the attribute as stored in the class file - */ - public static void removeAttributeReader(String name) { - readers.remove(name); - } - - /* - * Class method reads one attribute from the input data stream. This method - * must not be accessible from the outside. It is called by the Field and - * Method constructor methods. - * - * @see Field - * - * @see Method - * - * @param file Input stream - * - * @param constant_pool Array of constants - * - * @return Attribute - * - * @throws IOException - * - * @throws ClassFormatException - */ - public static final Attribute readAttribute(DataInputStream file, - ConstantPool constant_pool) throws IOException, - ClassFormatException { - ConstantUtf8 c; - String name; - int name_index; - int length; - byte tag = Constants.ATTR_UNKNOWN; // Unknown attribute - // Get class name from constant pool via `name_index' indirection - name_index = file.readUnsignedShort(); - c = (ConstantUtf8) constant_pool.getConstant(name_index, - Constants.CONSTANT_Utf8); - name = c.getBytes(); - // Length of data in bytes - length = file.readInt(); - // Compare strings to find known attribute - for (byte i = 0; i < Constants.KNOWN_ATTRIBUTES; i++) { - if (name.equals(Constants.ATTRIBUTE_NAMES[i])) { - tag = i; // found! - break; - } - } - // Call proper constructor, depending on `tag' - switch (tag) { - case Constants.ATTR_UNKNOWN: - AttributeReader r = readers.get(name); - if (r != null) { - return r.createAttribute(name_index, length, file, - constant_pool); - } - return new Unknown(name_index, length, file, constant_pool); - case Constants.ATTR_CONSTANT_VALUE: - return new ConstantValue(name_index, length, file, constant_pool); - case Constants.ATTR_SOURCE_FILE: - return new SourceFile(name_index, length, file, constant_pool); - case Constants.ATTR_CODE: - return new Code(name_index, length, file, constant_pool); - case Constants.ATTR_EXCEPTIONS: - return new ExceptionTable(name_index, length, file, constant_pool); - case Constants.ATTR_LINE_NUMBER_TABLE: - return new LineNumberTable(name_index, length, file, constant_pool); - case Constants.ATTR_LOCAL_VARIABLE_TABLE: - return new LocalVariableTable(name_index, length, file, - constant_pool); - case Constants.ATTR_INNER_CLASSES: - return new InnerClasses(name_index, length, file, constant_pool); - case Constants.ATTR_SYNTHETIC: - return new Synthetic(name_index, length, file, constant_pool); - case Constants.ATTR_DEPRECATED: - return new Deprecated(name_index, length, file, constant_pool); - case Constants.ATTR_PMG: - return new PMGClass(name_index, length, file, constant_pool); - case Constants.ATTR_SIGNATURE: - return new Signature(name_index, length, file, constant_pool); - case Constants.ATTR_STACK_MAP: - return new StackMap(name_index, length, file, constant_pool); - // case Constants.ATTR_RUNTIMEVISIBLE_ANNOTATIONS: - // return new RuntimeVisibleAnnotations(name_index, length, file, - // constant_pool); - // case Constants.ATTR_RUNTIMEINVISIBLE_ANNOTATIONS: - // return new RuntimeInvisibleAnnotations(name_index, length, file, - // constant_pool); - // case Constants.ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS: - // return new RuntimeVisibleParameterAnnotations(name_index, length, - // file, constant_pool); - // case Constants.ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS: - // return new RuntimeInvisibleParameterAnnotations(name_index, - // length, file, constant_pool); - // case Constants.ATTR_ANNOTATION_DEFAULT: - // return new AnnotationDefault(name_index, length, file, - // constant_pool); - default: // Never reached - throw new IllegalStateException("Ooops! default case reached."); - } - } - - /** - * @return Length of attribute field in bytes. - */ - public final int getLength() { - return length; - } - - /** - * @param length - * length in bytes. - */ - public final void setLength(int length) { - this.length = length; - } - - /** - * @param name_index - * of attribute. - */ - public final void setNameIndex(int name_index) { - this.name_index = name_index; - } - - /** - * @return Name index in constant pool of attribute name. - */ - public final int getNameIndex() { - return name_index; - } - - /** - * @return Tag of attribute, i.e., its type. Value may not be altered, thus - * there is no setTag() method. - */ - public final byte getTag() { - return tag; - } - - /** - * @return Constant pool used by this object. - * @see ConstantPool - */ - public final ConstantPool getConstantPool() { - return constant_pool; - } - - /** - * @param constant_pool - * Constant pool to be used for this object. - * @see ConstantPool - */ - public final void setConstantPool(ConstantPool constant_pool) { - this.constant_pool = constant_pool; - } - - /** - * Use copy() if you want to have a deep copy(), i.e., with all references - * copied correctly. - * - * @return shallow copy of this attribute - */ - @Override - public Object clone() { - Object o = null; - try { - o = super.clone(); - } catch (CloneNotSupportedException e) { - e.printStackTrace(); // Never occurs - } - return o; - } - - /** - * @return deep copy of this attribute - */ - public abstract Attribute copy(ConstantPool _constant_pool); - - /** - * @return attribute name. - */ - @Override - public String toString() { - return Constants.ATTRIBUTE_NAMES[tag]; - } -} diff --git a/src/org/apache/bcel/classfile/AttributeReader.java b/src/org/apache/bcel/classfile/AttributeReader.java deleted file mode 100644 index 5f0770a..0000000 --- a/src/org/apache/bcel/classfile/AttributeReader.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -/** - * Unknown (non-standard) attributes may be read via user-defined factory - * objects that can be registered with the Attribute.addAttributeReader method. - * These factory objects should implement this interface. - * - * @see Attribute - * @version $Id: AttributeReader.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface AttributeReader { - - /** - * When this attribute reader is added via the static method - * Attribute.addAttributeReader, an attribute name is associated with it. As - * the class file parser parses attributes, it will call various - * AttributeReaders based on the name of the attributes it is constructing. - * - * @param name_index - * An index into the constant pool, indexing a ConstantUtf8 that - * represents the name of the attribute. - * @param length - * The length of the data contained in the attribute. This is - * written into the constant pool and should agree with what the - * factory expects the length to be. - * @param file - * This is the data input stream that the factory needs to read - * its data from. - * @param constant_pool - * This is the constant pool associated with the Attribute that - * we are constructing. - * @return The user-defined AttributeReader should take this data and use it - * to construct an attribute. In the case of errors, a null can be - * returned which will cause the parsing of the class file to fail. - * @see Attribute#addAttributeReader(String, AttributeReader ) - */ - public Attribute createAttribute(int name_index, int length, - java.io.DataInputStream file, ConstantPool constant_pool); -} diff --git a/src/org/apache/bcel/classfile/ClassFormatException.java b/src/org/apache/bcel/classfile/ClassFormatException.java deleted file mode 100644 index ddc3fb6..0000000 --- a/src/org/apache/bcel/classfile/ClassFormatException.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -/** - * Thrown when the BCEL attempts to read a class file and determines that the - * file is malformed or otherwise cannot be interpreted as a class file. - * - * @version $Id: ClassFormatException.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ClassFormatException extends RuntimeException { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public ClassFormatException() { - super(); - } - - public ClassFormatException(String s) { - super(s); - } -} diff --git a/src/org/apache/bcel/classfile/ClassParser.java b/src/org/apache/bcel/classfile/ClassParser.java deleted file mode 100644 index eda99ad..0000000 --- a/src/org/apache/bcel/classfile/ClassParser.java +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.BufferedInputStream; -import java.io.DataInputStream; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; -import org.apache.bcel.Constants; - -/** - * Wrapper class that parses a given Java .class file. The method parse returns a JavaClass object - * on success. When an I/O error or an inconsistency occurs an appropiate - * exception is propagated back to the caller. - * - * The structure and the names comply, except for a few conveniences, exactly - * with the JVM specification - * 1.0. See this paper for further details about the structure of a bytecode - * file. - * - * @version $Id: ClassParser.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class ClassParser { - - private DataInputStream file; - private boolean fileOwned; - private String file_name; - private String zip_file; - private int class_name_index, superclass_name_index; - private int major, minor; // Compiler version - private int access_flags; // Access rights of parsed class - private int[] interfaces; // Names of implemented interfaces - private ConstantPool constant_pool; // collection of constants - private Field[] fields; // class fields, i.e., its variables - private Method[] methods; // methods defined in the class - private Attribute[] attributes; // attributes defined in the class - private boolean is_zip; // Loaded from zip file - private static final int BUFSIZE = 8192; - - /** - * Parse class from the given stream. - * - * @param file - * Input stream - * @param file_name - * File name - */ - public ClassParser(InputStream file, String file_name) { - this.file_name = file_name; - fileOwned = false; - String clazz = file.getClass().getName(); // Not a very clean solution - // ... - is_zip = clazz.startsWith("java.util.zip.") - || clazz.startsWith("java.util.jar."); - if (file instanceof DataInputStream) { - this.file = (DataInputStream) file; - } else { - this.file = new DataInputStream(new BufferedInputStream(file, - BUFSIZE)); - } - } - - /** - * Parse class from given .class file. - * - * @param file_name - * file name - */ - public ClassParser(String file_name) throws IOException { - is_zip = false; - this.file_name = file_name; - fileOwned = true; - } - - /** - * Parse class from given .class file in a ZIP-archive - * - * @param zip_file - * zip file name - * @param file_name - * file name - */ - public ClassParser(String zip_file, String file_name) { - is_zip = true; - fileOwned = true; - this.zip_file = zip_file; - this.file_name = file_name; - } - - /** - * Parse the given Java class file and return an object that represents the - * contained data, i.e., constants, methods, fields and commands. A - * ClassFormatException is raised, if the file is not a valid - * .class file. (This does not include verification of the byte code as it - * is performed by the java interpreter). - * - * @return Class object representing the parsed class file - * @throws IOException - * @throws ClassFormatException - */ - public JavaClass parse() throws IOException, ClassFormatException { - ZipFile zip = null; - try { - if (fileOwned) { - if (is_zip) { - zip = new ZipFile(zip_file); - ZipEntry entry = zip.getEntry(file_name); - file = new DataInputStream(new BufferedInputStream( - zip.getInputStream(entry), BUFSIZE)); - } else { - file = new DataInputStream(new BufferedInputStream( - new FileInputStream(file_name), BUFSIZE)); - } - } - /****************** Read headers ********************************/ - // Check magic tag of class file - readID(); - // Get compiler version - readVersion(); - /****************** Read constant pool and related **************/ - // Read constant pool entries - readConstantPool(); - // Get class information - readClassInfo(); - // Get interface information, i.e., implemented interfaces - readInterfaces(); - /****************** Read class fields and methods ***************/ - // Read class fields, i.e., the variables of the class - readFields(); - // Read class methods, i.e., the functions in the class - readMethods(); - // Read class attributes - readAttributes(); - // Check for unknown variables - // Unknown[] u = Unknown.getUnknownAttributes(); - // for(int i=0; i < u.length; i++) - // System.err.println("WARNING: " + u[i]); - // Everything should have been read now - // if(file.available() > 0) { - // int bytes = file.available(); - // byte[] buf = new byte[bytes]; - // file.read(buf); - // if(!(is_zip && (buf.length == 1))) { - // System.err.println("WARNING: Trailing garbage at end of " + - // file_name); - // System.err.println(bytes + " extra bytes: " + - // Utility.toHexString(buf)); - // } - // } - } finally { - // Read everything of interest, so close the file - if (fileOwned) { - file.close(); - if (zip != null) { - zip.close(); - } - } - } - // Return the information we have gathered in a new object - return new JavaClass(class_name_index, superclass_name_index, - file_name, major, minor, access_flags, constant_pool, - interfaces, fields, methods, attributes, is_zip ? JavaClass.ZIP - : JavaClass.FILE); - } - - /** - * Read information about the attributes of the class. - * - * @throws IOException - * @throws ClassFormatException - */ - private final void readAttributes() throws IOException, - ClassFormatException { - int attributes_count; - attributes_count = file.readUnsignedShort(); - attributes = new Attribute[attributes_count]; - for (int i = 0; i < attributes_count; i++) { - attributes[i] = Attribute.readAttribute(file, constant_pool); - } - } - - /** - * Read information about the class and its super class. - * - * @throws IOException - * @throws ClassFormatException - */ - private final void readClassInfo() throws IOException, ClassFormatException { - access_flags = file.readUnsignedShort(); - /* - * Interfaces are implicitely abstract, the flag should be set according - * to the JVM specification. - */ - if ((access_flags & Constants.ACC_INTERFACE) != 0) { - access_flags |= Constants.ACC_ABSTRACT; - } - if (((access_flags & Constants.ACC_ABSTRACT) != 0) - && ((access_flags & Constants.ACC_FINAL) != 0)) { - throw new ClassFormatException( - "Class can't be both final and abstract"); - } - class_name_index = file.readUnsignedShort(); - superclass_name_index = file.readUnsignedShort(); - } - - /** - * Read constant pool entries. - * - * @throws IOException - * @throws ClassFormatException - */ - private final void readConstantPool() throws IOException, - ClassFormatException { - constant_pool = new ConstantPool(file); - } - - /** - * Read information about the fields of the class, i.e., its variables. - * - * @throws IOException - * @throws ClassFormatException - */ - private final void readFields() throws IOException, ClassFormatException { - int fields_count; - fields_count = file.readUnsignedShort(); - fields = new Field[fields_count]; - for (int i = 0; i < fields_count; i++) { - fields[i] = new Field(file, constant_pool); - } - } - - /******************** Private utility methods **********************/ - /** - * Check whether the header of the file is ok. Of course, this has to be the - * first action on successive file reads. - * - * @throws IOException - * @throws ClassFormatException - */ - private final void readID() throws IOException, ClassFormatException { - int magic = 0xCAFEBABE; - if (file.readInt() != magic) { - throw new ClassFormatException(file_name - + " is not a Java .class file"); - } - } - - /** - * Read information about the interfaces implemented by this class. - * - * @throws IOException - * @throws ClassFormatException - */ - private final void readInterfaces() throws IOException, - ClassFormatException { - int interfaces_count; - interfaces_count = file.readUnsignedShort(); - interfaces = new int[interfaces_count]; - for (int i = 0; i < interfaces_count; i++) { - interfaces[i] = file.readUnsignedShort(); - } - } - - /** - * Read information about the methods of the class. - * - * @throws IOException - * @throws ClassFormatException - */ - private final void readMethods() throws IOException, ClassFormatException { - int methods_count; - methods_count = file.readUnsignedShort(); - methods = new Method[methods_count]; - for (int i = 0; i < methods_count; i++) { - methods[i] = new Method(file, constant_pool); - } - } - - /** - * Read major and minor version of compiler which created the file. - * - * @throws IOException - * @throws ClassFormatException - */ - private final void readVersion() throws IOException, ClassFormatException { - minor = file.readUnsignedShort(); - major = file.readUnsignedShort(); - } -} diff --git a/src/org/apache/bcel/classfile/Code.java b/src/org/apache/bcel/classfile/Code.java deleted file mode 100644 index 772fb2b..0000000 --- a/src/org/apache/bcel/classfile/Code.java +++ /dev/null @@ -1,371 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class represents a chunk of Java byte code contained in a method. It is - * instantiated by the Attribute.readAttribute() method. A - * Code attribute contains informations about operand stack, local - * variables, byte code and the exceptions handled within this method. - * - * This attribute has attributes itself, namely LineNumberTable which - * is used for debugging purposes and LocalVariableTable which contains - * information about the local variables. - * - * @version $Id: Code.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - * @see CodeException - * @see LineNumberTable - * @see LocalVariableTable - */ -public final class Code extends Attribute { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int max_stack; // Maximum size of stack used by this method - private int max_locals; // Number of local variables - private int code_length; // Length of code in bytes - private byte[] code; // Actual byte code - private int exception_table_length; - private CodeException[] exception_table; // Table of handled exceptions - private int attributes_count; // Attributes of code: LineNumber - private Attribute[] attributes; // or LocalVariable - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use copy() for a physical copy. - */ - public Code(Code c) { - this(c.getNameIndex(), c.getLength(), c.getMaxStack(), - c.getMaxLocals(), c.getCode(), c.getExceptionTable(), c - .getAttributes(), c.getConstantPool()); - } - - /** - * @param name_index - * Index pointing to the name Code - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - */ - Code(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - // Initialize with some default values which will be overwritten later - this(name_index, length, file.readUnsignedShort(), file - .readUnsignedShort(), (byte[]) null, (CodeException[]) null, - (Attribute[]) null, constant_pool); - code_length = file.readInt(); - code = new byte[code_length]; // Read byte code - file.readFully(code); - /* - * Read exception table that contains all regions where an exception - * handler is active, i.e., a try { ... } catch() block. - */ - exception_table_length = file.readUnsignedShort(); - exception_table = new CodeException[exception_table_length]; - for (int i = 0; i < exception_table_length; i++) { - exception_table[i] = new CodeException(file); - } - /* - * Read all attributes, currently `LineNumberTable' and - * `LocalVariableTable' - */ - attributes_count = file.readUnsignedShort(); - attributes = new Attribute[attributes_count]; - for (int i = 0; i < attributes_count; i++) { - attributes[i] = Attribute.readAttribute(file, constant_pool); - } - /* - * Adjust length, because of setAttributes in this(), s.b. length is - * incorrect, because it didn't take the internal attributes into - * account yet! Very subtle bug, fixed in 3.1.1. - */ - this.length = length; - } - - /** - * @param name_index - * Index pointing to the name Code - * @param length - * Content length in bytes - * @param max_stack - * Maximum size of stack - * @param max_locals - * Number of local variables - * @param code - * Actual byte code - * @param exception_table - * Table of handled exceptions - * @param attributes - * Attributes of code: LineNumber or LocalVariable - * @param constant_pool - * Array of constants - */ - public Code(int name_index, int length, int max_stack, int max_locals, - byte[] code, CodeException[] exception_table, - Attribute[] attributes, ConstantPool constant_pool) { - super(Constants.ATTR_CODE, name_index, length, constant_pool); - this.max_stack = max_stack; - this.max_locals = max_locals; - setCode(code); - setExceptionTable(exception_table); - setAttributes(attributes); // Overwrites length! - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitCode(this); - } - - /** - * Dump code attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - file.writeShort(max_stack); - file.writeShort(max_locals); - file.writeInt(code_length); - file.write(code, 0, code_length); - file.writeShort(exception_table_length); - for (int i = 0; i < exception_table_length; i++) { - exception_table[i].dump(file); - } - file.writeShort(attributes_count); - for (int i = 0; i < attributes_count; i++) { - attributes[i].dump(file); - } - } - - /** - * @return Collection of code attributes. - * @see Attribute - */ - public final Attribute[] getAttributes() { - return attributes; - } - - /** - * @return LineNumberTable of Code, if it has one - */ - public LineNumberTable getLineNumberTable() { - for (int i = 0; i < attributes_count; i++) { - if (attributes[i] instanceof LineNumberTable) { - return (LineNumberTable) attributes[i]; - } - } - return null; - } - - /** - * @return LocalVariableTable of Code, if it has one - */ - public LocalVariableTable getLocalVariableTable() { - for (int i = 0; i < attributes_count; i++) { - if (attributes[i] instanceof LocalVariableTable) { - return (LocalVariableTable) attributes[i]; - } - } - return null; - } - - /** - * @return Actual byte code of the method. - */ - public final byte[] getCode() { - return code; - } - - /** - * @return Table of handled exceptions. - * @see CodeException - */ - public final CodeException[] getExceptionTable() { - return exception_table; - } - - /** - * @return Number of local variables. - */ - public final int getMaxLocals() { - return max_locals; - } - - /** - * @return Maximum size of stack used by this method. - */ - public final int getMaxStack() { - return max_stack; - } - - /** - * @return the internal length of this code attribute (minus the first 6 - * bytes) and excluding all its attributes - */ - private final int getInternalLength() { - return 2 /* max_stack */+ 2 /* max_locals */+ 4 /* code length */ - + code_length /* byte-code */ - + 2 /* exception-table length */ - + 8 * exception_table_length /* exception table */ - + 2 /* attributes count */; - } - - /** - * @return the full size of this code attribute, minus its first 6 bytes, - * including the size of all its contained attributes - */ - private final int calculateLength() { - int len = 0; - for (int i = 0; i < attributes_count; i++) { - len += attributes[i].length + 6 /* attribute header size */; - } - return len + getInternalLength(); - } - - /** - * @param attributes - * the attributes to set for this Code - */ - public final void setAttributes(Attribute[] attributes) { - this.attributes = attributes; - attributes_count = (attributes == null) ? 0 : attributes.length; - length = calculateLength(); // Adjust length - } - - /** - * @param code - * byte code - */ - public final void setCode(byte[] code) { - this.code = code; - code_length = (code == null) ? 0 : code.length; - } - - /** - * @param exception_table - * exception table - */ - public final void setExceptionTable(CodeException[] exception_table) { - this.exception_table = exception_table; - exception_table_length = (exception_table == null) ? 0 - : exception_table.length; - } - - /** - * @param max_locals - * maximum number of local variables - */ - public final void setMaxLocals(int max_locals) { - this.max_locals = max_locals; - } - - /** - * @param max_stack - * maximum stack size - */ - public final void setMaxStack(int max_stack) { - this.max_stack = max_stack; - } - - /** - * @return String representation of code chunk. - */ - public final String toString(boolean verbose) { - StringBuffer buf; - buf = new StringBuffer(100); - buf.append("Code(max_stack = ") - .append(max_stack) - .append(", max_locals = ") - .append(max_locals) - .append(", code_length = ") - .append(code_length) - .append(")\n") - .append(Utility.codeToString(code, constant_pool, 0, -1, - verbose)); - if (exception_table_length > 0) { - buf.append("\nException handler(s) = \n").append( - "From\tTo\tHandler\tType\n"); - for (int i = 0; i < exception_table_length; i++) { - buf.append(exception_table[i].toString(constant_pool, verbose)) - .append("\n"); - } - } - if (attributes_count > 0) { - buf.append("\nAttribute(s) = \n"); - for (int i = 0; i < attributes_count; i++) { - buf.append(attributes[i].toString()).append("\n"); - } - } - return buf.toString(); - } - - /** - * @return String representation of code chunk. - */ - @Override - public final String toString() { - return toString(true); - } - - /** - * @return deep copy of this attribute - * - * @param _constant_pool - * the constant pool to duplicate - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - Code c = (Code) clone(); - if (code != null) { - c.code = new byte[code.length]; - System.arraycopy(code, 0, c.code, 0, code.length); - } - c.constant_pool = _constant_pool; - c.exception_table = new CodeException[exception_table_length]; - for (int i = 0; i < exception_table_length; i++) { - c.exception_table[i] = exception_table[i].copy(); - } - c.attributes = new Attribute[attributes_count]; - for (int i = 0; i < attributes_count; i++) { - c.attributes[i] = attributes[i].copy(_constant_pool); - } - return c; - } -} diff --git a/src/org/apache/bcel/classfile/CodeException.java b/src/org/apache/bcel/classfile/CodeException.java deleted file mode 100644 index c4a5f2f..0000000 --- a/src/org/apache/bcel/classfile/CodeException.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; -import org.apache.bcel.Constants; - -/** - * This class represents an entry in the exception table of the Code - * attribute and is used only there. It contains a range in which a particular - * exception handler is active. - * - * @version $Id: CodeException.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Code - */ -public final class CodeException implements Cloneable, Constants, Node, - Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int start_pc; // Range in the code the exception handler is - private int end_pc; // active. start_pc is inclusive, end_pc exclusive - private int handler_pc; /* - * Starting address of exception handler, i.e., an - * offset from start of code. - */ - private int catch_type; /* - * If this is zero the handler catches any - * exception, otherwise it points to the exception - * class which is to be caught. - */ - - /** - * Initialize from another object. - */ - public CodeException(CodeException c) { - this(c.getStartPC(), c.getEndPC(), c.getHandlerPC(), c.getCatchType()); - } - - /** - * Construct object from file stream. - * - * @param file - * Input stream - * @throws IOException - */ - CodeException(DataInputStream file) throws IOException { - this(file.readUnsignedShort(), file.readUnsignedShort(), file - .readUnsignedShort(), file.readUnsignedShort()); - } - - /** - * @param start_pc - * Range in the code the exception handler is active, start_pc is - * inclusive while - * @param end_pc - * is exclusive - * @param handler_pc - * Starting address of exception handler, i.e., an offset from - * start of code. - * @param catch_type - * If zero the handler catches any exception, otherwise it points - * to the exception class which is to be caught. - */ - public CodeException(int start_pc, int end_pc, int handler_pc, - int catch_type) { - this.start_pc = start_pc; - this.end_pc = end_pc; - this.handler_pc = handler_pc; - this.catch_type = catch_type; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitCodeException(this); - } - - /** - * Dump code exception to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - public final void dump(DataOutputStream file) throws IOException { - file.writeShort(start_pc); - file.writeShort(end_pc); - file.writeShort(handler_pc); - file.writeShort(catch_type); - } - - /** - * @return 0, if the handler catches any exception, otherwise it points to - * the exception class which is to be caught. - */ - public final int getCatchType() { - return catch_type; - } - - /** - * @return Exclusive end index of the region where the handler is active. - */ - public final int getEndPC() { - return end_pc; - } - - /** - * @return Starting address of exception handler, relative to the code. - */ - public final int getHandlerPC() { - return handler_pc; - } - - /** - * @return Inclusive start index of the region where the handler is active. - */ - public final int getStartPC() { - return start_pc; - } - - /** - * @param catch_type - * the type of exception that is caught - */ - public final void setCatchType(int catch_type) { - this.catch_type = catch_type; - } - - /** - * @param end_pc - * end of handled block - */ - public final void setEndPC(int end_pc) { - this.end_pc = end_pc; - } - - /** - * @param handler_pc - * where the actual code is - */ - public final void setHandlerPC(int handler_pc) { - this.handler_pc = handler_pc; - } - - /** - * @param start_pc - * start of handled block - */ - public final void setStartPC(int start_pc) { - this.start_pc = start_pc; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - return "CodeException(start_pc = " + start_pc + ", end_pc = " + end_pc - + ", handler_pc = " + handler_pc + ", catch_type = " - + catch_type + ")"; - } - - /** - * @return String representation. - */ - public final String toString(ConstantPool cp, boolean verbose) { - String str; - if (catch_type == 0) { - str = "(0)"; - } else { - str = Utility.compactClassName( - cp.getConstantString(catch_type, CONSTANT_Class), false) - + (verbose ? "(" + catch_type + ")" : ""); - } - return start_pc + "\t" + end_pc + "\t" + handler_pc + "\t" + str; - } - - public final String toString(ConstantPool cp) { - return toString(cp, true); - } - - /** - * @return deep copy of this object - */ - public CodeException copy() { - try { - return (CodeException) clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } -} diff --git a/src/org/apache/bcel/classfile/Constant.java b/src/org/apache/bcel/classfile/Constant.java deleted file mode 100644 index f2343a8..0000000 --- a/src/org/apache/bcel/classfile/Constant.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; -import org.apache.bcel.Constants; -import org.apache.bcel.util.BCELComparator; - -/** - * Abstract superclass for classes to represent the different constant types in - * the constant pool of a class file. The classes keep closely to the JVM - * specification. - * - * @version $Id: Constant.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class Constant implements Cloneable, Node, Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - private static BCELComparator _cmp = new BCELComparator() { - - @Override - public boolean equals(Object o1, Object o2) { - Constant THIS = (Constant) o1; - Constant THAT = (Constant) o2; - return THIS.toString().equals(THAT.toString()); - } - - @Override - public int hashCode(Object o) { - Constant THIS = (Constant) o; - return THIS.toString().hashCode(); - } - }; - /* - * In fact this tag is redundant since we can distinguish different - * `Constant' objects by their type, i.e., via `instanceof'. In some places - * we will use the tag for switch()es anyway. - * - * First, we want match the specification as closely as possible. Second we - * need the tag as an index to select the corresponding class name from the - * `CONSTANT_NAMES' array. - */ - protected byte tag; - - Constant(byte tag) { - this.tag = tag; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public abstract void accept(Visitor v); - - public abstract void dump(DataOutputStream file) throws IOException; - - /** - * @return Tag of constant, i.e., its type. No setTag() method to avoid - * confusion. - */ - public final byte getTag() { - return tag; - } - - /** - * @return String representation. - */ - @Override - public String toString() { - return Constants.CONSTANT_NAMES[tag] + "[" + tag + "]"; - } - - /** - * @return deep copy of this constant - */ - public Constant copy() { - try { - return (Constant) super.clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } - - @Override - public Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - /** - * Read one constant from the given file, the type depends on a tag byte. - * - * @param file - * Input stream - * @return Constant object - */ - static final Constant readConstant(DataInputStream file) - throws IOException, ClassFormatException { - byte b = file.readByte(); // Read tag byte - switch (b) { - case Constants.CONSTANT_Class: - return new ConstantClass(file); - case Constants.CONSTANT_Fieldref: - return new ConstantFieldref(file); - case Constants.CONSTANT_Methodref: - return new ConstantMethodref(file); - case Constants.CONSTANT_InterfaceMethodref: - return new ConstantInterfaceMethodref(file); - case Constants.CONSTANT_String: - return new ConstantString(file); - case Constants.CONSTANT_Integer: - return new ConstantInteger(file); - case Constants.CONSTANT_Float: - return new ConstantFloat(file); - case Constants.CONSTANT_Long: - return new ConstantLong(file); - case Constants.CONSTANT_Double: - return new ConstantDouble(file); - case Constants.CONSTANT_NameAndType: - return new ConstantNameAndType(file); - case Constants.CONSTANT_Utf8: - return new ConstantUtf8(file); - default: - throw new ClassFormatException( - "Invalid byte tag in constant pool: " + b); - } - } - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - /** - * @param comparator - * Comparison strategy object - */ - public static void setComparator(BCELComparator comparator) { - _cmp = comparator; - } - - /** - * Return value as defined by given BCELComparator strategy. By default two - * Constant objects are said to be equal when the result of toString() is - * equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - return _cmp.equals(this, obj); - } - - /** - * Return value as defined by given BCELComparator strategy. By default - * return the hashcode of the result of toString(). - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - return _cmp.hashCode(this); - } -} diff --git a/src/org/apache/bcel/classfile/ConstantCP.java b/src/org/apache/bcel/classfile/ConstantCP.java deleted file mode 100644 index cfe7408..0000000 --- a/src/org/apache/bcel/classfile/ConstantCP.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * Abstract super class for Fieldref and Methodref constants. - * - * @version $Id: ConstantCP.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see ConstantFieldref - * @see ConstantMethodref - * @see ConstantInterfaceMethodref - */ -public abstract class ConstantCP extends Constant { - - /** - * - */ - private static final long serialVersionUID = 1L; - /** - * References to the constants containing the class and the field signature - */ - protected int class_index, name_and_type_index; - - /** - * Initialize from another object. - */ - public ConstantCP(ConstantCP c) { - this(c.getTag(), c.getClassIndex(), c.getNameAndTypeIndex()); - } - - /** - * Initialize instance from file data. - * - * @param tag - * Constant type tag - * @param file - * Input stream - * @throws IOException - */ - ConstantCP(byte tag, DataInputStream file) throws IOException { - this(tag, file.readUnsignedShort(), file.readUnsignedShort()); - } - - /** - * @param class_index - * Reference to the class containing the field - * @param name_and_type_index - * and the field signature - */ - protected ConstantCP(byte tag, int class_index, int name_and_type_index) { - super(tag); - this.class_index = class_index; - this.name_and_type_index = name_and_type_index; - } - - /** - * Dump constant field reference to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - file.writeByte(tag); - file.writeShort(class_index); - file.writeShort(name_and_type_index); - } - - /** - * @return Reference (index) to class this field or method belongs to. - */ - public final int getClassIndex() { - return class_index; - } - - /** - * @return Reference (index) to signature of the field. - */ - public final int getNameAndTypeIndex() { - return name_and_type_index; - } - - /** - * @param class_index - * points to Constant_class - */ - public final void setClassIndex(int class_index) { - this.class_index = class_index; - } - - /** - * @return Class this field belongs to. - */ - public String getClass(ConstantPool cp) { - return cp.constantToString(class_index, Constants.CONSTANT_Class); - } - - /** - * @param name_and_type_index - * points to Constant_NameAndType - */ - public final void setNameAndTypeIndex(int name_and_type_index) { - this.name_and_type_index = name_and_type_index; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - return super.toString() + "(class_index = " + class_index - + ", name_and_type_index = " + name_and_type_index + ")"; - } -} diff --git a/src/org/apache/bcel/classfile/ConstantClass.java b/src/org/apache/bcel/classfile/ConstantClass.java deleted file mode 100644 index 32d47e7..0000000 --- a/src/org/apache/bcel/classfile/ConstantClass.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from the abstract Constant class and - * represents a reference to a (external) class. - * - * @version $Id: ConstantClass.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantClass extends Constant implements ConstantObject { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int name_index; // Identical to ConstantString except for the name - - /** - * Initialize from another object. - */ - public ConstantClass(ConstantClass c) { - this(c.getNameIndex()); - } - - /** - * Initialize instance from file data. - * - * @param file - * Input stream - * @throws IOException - */ - ConstantClass(DataInputStream file) throws IOException { - this(file.readUnsignedShort()); - } - - /** - * @param name_index - * Name index in constant pool. Should refer to a ConstantUtf8. - */ - public ConstantClass(int name_index) { - super(Constants.CONSTANT_Class); - this.name_index = name_index; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantClass(this); - } - - /** - * Dump constant class to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - file.writeByte(tag); - file.writeShort(name_index); - } - - /** - * @return Name index in constant pool of class name. - */ - public final int getNameIndex() { - return name_index; - } - - /** - * @param name_index - * the name index in the constant pool of this Constant Class - */ - public final void setNameIndex(int name_index) { - this.name_index = name_index; - } - - /** - * @return String object - */ - @Override - public Object getConstantValue(ConstantPool cp) { - Constant c = cp.getConstant(name_index, Constants.CONSTANT_Utf8); - return ((ConstantUtf8) c).getBytes(); - } - - /** - * @return dereferenced string - */ - public String getBytes(ConstantPool cp) { - return (String) getConstantValue(cp); - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - return super.toString() + "(name_index = " + name_index + ")"; - } -} diff --git a/src/org/apache/bcel/classfile/ConstantDouble.java b/src/org/apache/bcel/classfile/ConstantDouble.java deleted file mode 100644 index 7874b49..0000000 --- a/src/org/apache/bcel/classfile/ConstantDouble.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from the abstract Constant class and - * represents a reference to a Double object. - * - * @version $Id: ConstantDouble.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantDouble extends Constant implements ConstantObject { - - /** - * - */ - private static final long serialVersionUID = 1L; - private double bytes; - - /** - * @param bytes - * Data - */ - public ConstantDouble(double bytes) { - super(Constants.CONSTANT_Double); - this.bytes = bytes; - } - - /** - * Initialize from another object. - */ - public ConstantDouble(ConstantDouble c) { - this(c.getBytes()); - } - - /** - * Initialize instance from file data. - * - * @param file - * Input stream - * @throws IOException - */ - ConstantDouble(DataInputStream file) throws IOException { - this(file.readDouble()); - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantDouble(this); - } - - /** - * Dump constant double to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - file.writeByte(tag); - file.writeDouble(bytes); - } - - /** - * @return data, i.e., 8 bytes. - */ - public final double getBytes() { - return bytes; - } - - /** - * @param bytes - * the raw bytes that represent the double value - */ - public final void setBytes(double bytes) { - this.bytes = bytes; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - return super.toString() + "(bytes = " + bytes + ")"; - } - - /** - * @return Double object - */ - @Override - public Object getConstantValue(ConstantPool cp) { - return new Double(bytes); - } -} diff --git a/src/org/apache/bcel/classfile/ConstantFieldref.java b/src/org/apache/bcel/classfile/ConstantFieldref.java deleted file mode 100644 index 333c080..0000000 --- a/src/org/apache/bcel/classfile/ConstantFieldref.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class represents a constant pool reference to a field. - * - * @version $Id: ConstantFieldref.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class ConstantFieldref extends ConstantCP { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Initialize from another object. - */ - public ConstantFieldref(ConstantFieldref c) { - super(Constants.CONSTANT_Fieldref, c.getClassIndex(), c - .getNameAndTypeIndex()); - } - - /** - * Initialize instance from file data. - * - * @param file - * input stream - * @throws IOException - */ - ConstantFieldref(DataInputStream file) throws IOException { - super(Constants.CONSTANT_Fieldref, file); - } - - /** - * @param class_index - * Reference to the class containing the Field - * @param name_and_type_index - * and the Field signature - */ - public ConstantFieldref(int class_index, int name_and_type_index) { - super(Constants.CONSTANT_Fieldref, class_index, name_and_type_index); - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of Fields, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantFieldref(this); - } -} diff --git a/src/org/apache/bcel/classfile/ConstantFloat.java b/src/org/apache/bcel/classfile/ConstantFloat.java deleted file mode 100644 index 0f94c96..0000000 --- a/src/org/apache/bcel/classfile/ConstantFloat.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from the abstract Constant class and - * represents a reference to a float object. - * - * @version $Id: ConstantFloat.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantFloat extends Constant implements ConstantObject { - - /** - * - */ - private static final long serialVersionUID = 1L; - private float bytes; - - /** - * @param bytes - * Data - */ - public ConstantFloat(float bytes) { - super(Constants.CONSTANT_Float); - this.bytes = bytes; - } - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public ConstantFloat(ConstantFloat c) { - this(c.getBytes()); - } - - /** - * Initialize instance from file data. - * - * @param file - * Input stream - * @throws IOException - */ - ConstantFloat(DataInputStream file) throws IOException { - this(file.readFloat()); - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantFloat(this); - } - - /** - * Dump constant float to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - file.writeByte(tag); - file.writeFloat(bytes); - } - - /** - * @return data, i.e., 4 bytes. - */ - public final float getBytes() { - return bytes; - } - - /** - * @param bytes - * the raw bytes that represent this float - */ - public final void setBytes(float bytes) { - this.bytes = bytes; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - return super.toString() + "(bytes = " + bytes + ")"; - } - - /** - * @return Float object - */ - @Override - public Object getConstantValue(ConstantPool cp) { - return new Float(bytes); - } -} diff --git a/src/org/apache/bcel/classfile/ConstantInteger.java b/src/org/apache/bcel/classfile/ConstantInteger.java deleted file mode 100644 index b24f552..0000000 --- a/src/org/apache/bcel/classfile/ConstantInteger.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from the abstract Constant class and - * represents a reference to an int object. - * - * @version $Id: ConstantInteger.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantInteger extends Constant implements ConstantObject { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int bytes; - - /** - * @param bytes - * Data - */ - public ConstantInteger(int bytes) { - super(Constants.CONSTANT_Integer); - this.bytes = bytes; - } - - /** - * Initialize from another object. - */ - public ConstantInteger(ConstantInteger c) { - this(c.getBytes()); - } - - /** - * Initialize instance from file data. - * - * @param file - * Input stream - * @throws IOException - */ - ConstantInteger(DataInputStream file) throws IOException { - this(file.readInt()); - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantInteger(this); - } - - /** - * Dump constant integer to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - file.writeByte(tag); - file.writeInt(bytes); - } - - /** - * @return data, i.e., 4 bytes. - */ - public final int getBytes() { - return bytes; - } - - /** - * @param bytes - * the raw bytes that represent this integer - */ - public final void setBytes(int bytes) { - this.bytes = bytes; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - return super.toString() + "(bytes = " + bytes + ")"; - } - - /** - * @return Integer object - */ - @Override - public Object getConstantValue(ConstantPool cp) { - return new Integer(bytes); - } -} diff --git a/src/org/apache/bcel/classfile/ConstantInterfaceMethodref.java b/src/org/apache/bcel/classfile/ConstantInterfaceMethodref.java deleted file mode 100644 index 4d05ed7..0000000 --- a/src/org/apache/bcel/classfile/ConstantInterfaceMethodref.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class represents a constant pool reference to an interface method. - * - * @version $Id: ConstantInterfaceMethodref.java 386056 2006-03-15 11:31:56Z - * tcurdt $ - * @author M. Dahm - */ -public final class ConstantInterfaceMethodref extends ConstantCP { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Initialize from another object. - */ - public ConstantInterfaceMethodref(ConstantInterfaceMethodref c) { - super(Constants.CONSTANT_InterfaceMethodref, c.getClassIndex(), c - .getNameAndTypeIndex()); - } - - /** - * Initialize instance from file data. - * - * @param file - * input stream - * @throws IOException - */ - ConstantInterfaceMethodref(DataInputStream file) throws IOException { - super(Constants.CONSTANT_InterfaceMethodref, file); - } - - /** - * @param class_index - * Reference to the class containing the method - * @param name_and_type_index - * and the method signature - */ - public ConstantInterfaceMethodref(int class_index, int name_and_type_index) { - super(Constants.CONSTANT_InterfaceMethodref, class_index, - name_and_type_index); - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantInterfaceMethodref(this); - } -} diff --git a/src/org/apache/bcel/classfile/ConstantLong.java b/src/org/apache/bcel/classfile/ConstantLong.java deleted file mode 100644 index 8a6f0f1..0000000 --- a/src/org/apache/bcel/classfile/ConstantLong.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from the abstract Constant class and - * represents a reference to a long object. - * - * @version $Id: ConstantLong.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantLong extends Constant implements ConstantObject { - - /** - * - */ - private static final long serialVersionUID = 1L; - private long bytes; - - /** - * @param bytes - * Data - */ - public ConstantLong(long bytes) { - super(Constants.CONSTANT_Long); - this.bytes = bytes; - } - - /** - * Initialize from another object. - */ - public ConstantLong(ConstantLong c) { - this(c.getBytes()); - } - - /** - * Initialize instance from file data. - * - * @param file - * Input stream - * @throws IOException - */ - ConstantLong(DataInputStream file) throws IOException { - this(file.readLong()); - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantLong(this); - } - - /** - * Dump constant long to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - file.writeByte(tag); - file.writeLong(bytes); - } - - /** - * @return data, i.e., 8 bytes. - */ - public final long getBytes() { - return bytes; - } - - /** - * @param bytes - * thr raw bytes that represent this long - */ - public final void setBytes(long bytes) { - this.bytes = bytes; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - return super.toString() + "(bytes = " + bytes + ")"; - } - - /** - * @return Long object - */ - @Override - public Object getConstantValue(ConstantPool cp) { - return new Long(bytes); - } -} diff --git a/src/org/apache/bcel/classfile/ConstantMethodref.java b/src/org/apache/bcel/classfile/ConstantMethodref.java deleted file mode 100644 index ebd001a..0000000 --- a/src/org/apache/bcel/classfile/ConstantMethodref.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class represents a constant pool reference to a method. - * - * @version $Id: ConstantMethodref.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class ConstantMethodref extends ConstantCP { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Initialize from another object. - */ - public ConstantMethodref(ConstantMethodref c) { - super(Constants.CONSTANT_Methodref, c.getClassIndex(), c - .getNameAndTypeIndex()); - } - - /** - * Initialize instance from file data. - * - * @param file - * input stream - * @throws IOException - */ - ConstantMethodref(DataInputStream file) throws IOException { - super(Constants.CONSTANT_Methodref, file); - } - - /** - * @param class_index - * Reference to the class containing the method - * @param name_and_type_index - * and the method signature - */ - public ConstantMethodref(int class_index, int name_and_type_index) { - super(Constants.CONSTANT_Methodref, class_index, name_and_type_index); - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantMethodref(this); - } -} diff --git a/src/org/apache/bcel/classfile/ConstantNameAndType.java b/src/org/apache/bcel/classfile/ConstantNameAndType.java deleted file mode 100644 index ea182e5..0000000 --- a/src/org/apache/bcel/classfile/ConstantNameAndType.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from the abstract Constant class and - * represents a reference to the name and signature of a field or method. - * - * @version $Id: ConstantNameAndType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantNameAndType extends Constant { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int name_index; // Name of field/method - private int signature_index; // and its signature. - - /** - * Initialize from another object. - */ - public ConstantNameAndType(ConstantNameAndType c) { - this(c.getNameIndex(), c.getSignatureIndex()); - } - - /** - * Initialize instance from file data. - * - * @param file - * Input stream - * @throws IOException - */ - ConstantNameAndType(DataInputStream file) throws IOException { - this(file.readUnsignedShort(), file.readUnsignedShort()); - } - - /** - * @param name_index - * Name of field/method - * @param signature_index - * and its signature - */ - public ConstantNameAndType(int name_index, int signature_index) { - super(Constants.CONSTANT_NameAndType); - this.name_index = name_index; - this.signature_index = signature_index; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantNameAndType(this); - } - - /** - * Dump name and signature index to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - file.writeByte(tag); - file.writeShort(name_index); - file.writeShort(signature_index); - } - - /** - * @return Name index in constant pool of field/method name. - */ - public final int getNameIndex() { - return name_index; - } - - /** - * @return name - */ - public final String getName(ConstantPool cp) { - return cp.constantToString(getNameIndex(), Constants.CONSTANT_Utf8); - } - - /** - * @return Index in constant pool of field/method signature. - */ - public final int getSignatureIndex() { - return signature_index; - } - - /** - * @return signature - */ - public final String getSignature(ConstantPool cp) { - return cp - .constantToString(getSignatureIndex(), Constants.CONSTANT_Utf8); - } - - /** - * @param name_index - * the name index of this constant - */ - public final void setNameIndex(int name_index) { - this.name_index = name_index; - } - - /** - * @param signature_index - * the signature index in the constant pool of this type - */ - public final void setSignatureIndex(int signature_index) { - this.signature_index = signature_index; - } - - /** - * @return String representation - */ - @Override - public final String toString() { - return super.toString() + "(name_index = " + name_index - + ", signature_index = " + signature_index + ")"; - } -} diff --git a/src/org/apache/bcel/classfile/ConstantObject.java b/src/org/apache/bcel/classfile/ConstantObject.java deleted file mode 100644 index cded347..0000000 --- a/src/org/apache/bcel/classfile/ConstantObject.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -/** - * This interface denotes those constants that have a "natural" value, such as - * ConstantLong, ConstantString, etc.. - * - * @version $Id: ConstantObject.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public interface ConstantObject { - - /** - * @return object representing the constant, e.g., Long for ConstantLong - */ - public abstract Object getConstantValue(ConstantPool cp); -} diff --git a/src/org/apache/bcel/classfile/ConstantPool.java b/src/org/apache/bcel/classfile/ConstantPool.java deleted file mode 100644 index e7cd240..0000000 --- a/src/org/apache/bcel/classfile/ConstantPool.java +++ /dev/null @@ -1,368 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; -import org.apache.bcel.Constants; - -/** - * This class represents the constant pool, i.e., a table of constants, of a - * parsed classfile. It may contain null references, due to the JVM - * specification that skips an entry after an 8-byte constant (double, long) - * entry. Those interested in generating constant pools programatically should - * see ConstantPoolGen. - * - * @version $Id: ConstantPool.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @see Constant - * @see org.apache.bcel.generic.ConstantPoolGen - * @author M. Dahm - */ -public class ConstantPool implements Cloneable, Node, Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int constant_pool_count; - private Constant[] constant_pool; - - /** - * @param constant_pool - * Array of constants - */ - public ConstantPool(Constant[] constant_pool) { - setConstantPool(constant_pool); - } - - /** - * Read constants from given file stream. - * - * @param file - * Input stream - * @throws IOException - * @throws ClassFormatException - */ - ConstantPool(DataInputStream file) throws IOException, ClassFormatException { - byte tag; - constant_pool_count = file.readUnsignedShort(); - constant_pool = new Constant[constant_pool_count]; - /* - * constant_pool[0] is unused by the compiler and may be used freely by - * the implementation. - */ - for (int i = 1; i < constant_pool_count; i++) { - constant_pool[i] = Constant.readConstant(file); - /* - * Quote from the JVM specification: "All eight byte constants take - * up two spots in the constant pool. If this is the n'th byte in - * the constant pool, then the next item will be numbered n+2" - * - * Thus we have to increment the index counter. - */ - tag = constant_pool[i].getTag(); - if ((tag == Constants.CONSTANT_Double) - || (tag == Constants.CONSTANT_Long)) { - i++; - } - } - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantPool(this); - } - - /** - * Resolve constant to a string representation. - * - * @param c - * Constant to be printed - * @return String representation - */ - public String constantToString(Constant c) throws ClassFormatException { - String str; - int i; - byte tag = c.getTag(); - switch (tag) { - case Constants.CONSTANT_Class: - i = ((ConstantClass) c).getNameIndex(); - c = getConstant(i, Constants.CONSTANT_Utf8); - str = Utility - .compactClassName(((ConstantUtf8) c).getBytes(), false); - break; - case Constants.CONSTANT_String: - i = ((ConstantString) c).getStringIndex(); - c = getConstant(i, Constants.CONSTANT_Utf8); - str = "\"" + escape(((ConstantUtf8) c).getBytes()) + "\""; - break; - case Constants.CONSTANT_Utf8: - str = ((ConstantUtf8) c).getBytes(); - break; - case Constants.CONSTANT_Double: - str = "" + ((ConstantDouble) c).getBytes(); - break; - case Constants.CONSTANT_Float: - str = "" + ((ConstantFloat) c).getBytes(); - break; - case Constants.CONSTANT_Long: - str = "" + ((ConstantLong) c).getBytes(); - break; - case Constants.CONSTANT_Integer: - str = "" + ((ConstantInteger) c).getBytes(); - break; - case Constants.CONSTANT_NameAndType: - str = (constantToString(((ConstantNameAndType) c).getNameIndex(), - Constants.CONSTANT_Utf8) + " " + constantToString( - ((ConstantNameAndType) c).getSignatureIndex(), - Constants.CONSTANT_Utf8)); - break; - case Constants.CONSTANT_InterfaceMethodref: - case Constants.CONSTANT_Methodref: - case Constants.CONSTANT_Fieldref: - str = (constantToString(((ConstantCP) c).getClassIndex(), - Constants.CONSTANT_Class) + "." + constantToString( - ((ConstantCP) c).getNameAndTypeIndex(), - Constants.CONSTANT_NameAndType)); - break; - default: // Never reached - throw new RuntimeException("Unknown constant type " + tag); - } - return str; - } - - private static final String escape(String str) { - int len = str.length(); - StringBuffer buf = new StringBuffer(len + 5); - char[] ch = str.toCharArray(); - for (int i = 0; i < len; i++) { - switch (ch[i]) { - case '\n': - buf.append("\\n"); - break; - case '\r': - buf.append("\\r"); - break; - case '\t': - buf.append("\\t"); - break; - case '\b': - buf.append("\\b"); - break; - case '"': - buf.append("\\\""); - break; - default: - buf.append(ch[i]); - } - } - return buf.toString(); - } - - /** - * Retrieve constant at `index' from constant pool and resolve it to a - * string representation. - * - * @param index - * of constant in constant pool - * @param tag - * expected type - * @return String representation - */ - public String constantToString(int index, byte tag) - throws ClassFormatException { - Constant c = getConstant(index, tag); - return constantToString(c); - } - - /** - * Dump constant pool to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - public void dump(DataOutputStream file) throws IOException { - file.writeShort(constant_pool_count); - for (int i = 1; i < constant_pool_count; i++) { - if (constant_pool[i] != null) { - constant_pool[i].dump(file); - } - } - } - - /** - * Get constant from constant pool. - * - * @param index - * Index in constant pool - * @return Constant value - * @see Constant - */ - public Constant getConstant(int index) { - if (index >= constant_pool.length || index < 0) { - throw new ClassFormatException("Invalid constant pool reference: " - + index + ". Constant pool size is: " - + constant_pool.length); - } - return constant_pool[index]; - } - - /** - * Get constant from constant pool and check whether it has the expected - * type. - * - * @param index - * Index in constant pool - * @param tag - * Tag of expected constant, i.e., its type - * @return Constant value - * @see Constant - * @throws ClassFormatException - */ - public Constant getConstant(int index, byte tag) - throws ClassFormatException { - Constant c; - c = getConstant(index); - if (c == null) { - throw new ClassFormatException("Constant pool at index " + index - + " is null."); - } - if (c.getTag() != tag) { - throw new ClassFormatException("Expected class `" - + Constants.CONSTANT_NAMES[tag] + "' at index " + index - + " and got " + c); - } - return c; - } - - /** - * @return Array of constants. - * @see Constant - */ - public Constant[] getConstantPool() { - return constant_pool; - } - - /** - * Get string from constant pool and bypass the indirection of - * `ConstantClass' and `ConstantString' objects. I.e. these classes have an - * index field that points to another entry of the constant pool of type - * `ConstantUtf8' which contains the real data. - * - * @param index - * Index in constant pool - * @param tag - * Tag of expected constant, either ConstantClass or - * ConstantString - * @return Contents of string reference - * @see ConstantClass - * @see ConstantString - * @throws ClassFormatException - */ - public String getConstantString(int index, byte tag) - throws ClassFormatException { - Constant c; - int i; - c = getConstant(index, tag); - /* - * This switch() is not that elegant, since the two classes have the - * same contents, they just differ in the name of the index field - * variable. But we want to stick to the JVM naming conventions closely - * though we could have solved these more elegantly by using the same - * variable name or by subclassing. - */ - switch (tag) { - case Constants.CONSTANT_Class: - i = ((ConstantClass) c).getNameIndex(); - break; - case Constants.CONSTANT_String: - i = ((ConstantString) c).getStringIndex(); - break; - default: - throw new RuntimeException( - "getConstantString called with illegal tag " + tag); - } - // Finally get the string from the constant pool - c = getConstant(i, Constants.CONSTANT_Utf8); - return ((ConstantUtf8) c).getBytes(); - } - - /** - * @return Length of constant pool. - */ - public int getLength() { - return constant_pool_count; - } - - /** - * @param constant - * Constant to set - */ - public void setConstant(int index, Constant constant) { - constant_pool[index] = constant; - } - - /** - * @param constant_pool - */ - public void setConstantPool(Constant[] constant_pool) { - this.constant_pool = constant_pool; - constant_pool_count = (constant_pool == null) ? 0 - : constant_pool.length; - } - - /** - * @return String representation. - */ - @Override - public String toString() { - StringBuffer buf = new StringBuffer(); - for (int i = 1; i < constant_pool_count; i++) { - buf.append(i).append(")").append(constant_pool[i]).append("\n"); - } - return buf.toString(); - } - - /** - * @return deep copy of this constant pool - */ - public ConstantPool copy() { - ConstantPool c = null; - try { - c = (ConstantPool) clone(); - c.constant_pool = new Constant[constant_pool_count]; - for (int i = 1; i < constant_pool_count; i++) { - if (constant_pool[i] != null) { - c.constant_pool[i] = constant_pool[i].copy(); - } - } - } catch (CloneNotSupportedException e) { - } - return c; - } -} diff --git a/src/org/apache/bcel/classfile/ConstantString.java b/src/org/apache/bcel/classfile/ConstantString.java deleted file mode 100644 index ff38c9e..0000000 --- a/src/org/apache/bcel/classfile/ConstantString.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from the abstract Constant class and - * represents a reference to a String object. - * - * @version $Id: ConstantString.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantString extends Constant implements ConstantObject { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int string_index; // Identical to ConstantClass except for this name - - /** - * Initialize from another object. - */ - public ConstantString(ConstantString c) { - this(c.getStringIndex()); - } - - /** - * Initialize instance from file data. - * - * @param file - * Input stream - * @throws IOException - */ - ConstantString(DataInputStream file) throws IOException { - this(file.readUnsignedShort()); - } - - /** - * @param string_index - * Index of Constant_Utf8 in constant pool - */ - public ConstantString(int string_index) { - super(Constants.CONSTANT_String); - this.string_index = string_index; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantString(this); - } - - /** - * Dump constant field reference to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - file.writeByte(tag); - file.writeShort(string_index); - } - - /** - * @return Index in constant pool of the string (ConstantUtf8). - */ - public final int getStringIndex() { - return string_index; - } - - /** - * @param string_index - * the index into the constant of the string value - */ - public final void setStringIndex(int string_index) { - this.string_index = string_index; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - return super.toString() + "(string_index = " + string_index + ")"; - } - - /** - * @return String object - */ - @Override - public Object getConstantValue(ConstantPool cp) { - Constant c = cp.getConstant(string_index, Constants.CONSTANT_Utf8); - return ((ConstantUtf8) c).getBytes(); - } - - /** - * @return dereferenced string - */ - public String getBytes(ConstantPool cp) { - return (String) getConstantValue(cp); - } -} diff --git a/src/org/apache/bcel/classfile/ConstantUtf8.java b/src/org/apache/bcel/classfile/ConstantUtf8.java deleted file mode 100644 index a4df998..0000000 --- a/src/org/apache/bcel/classfile/ConstantUtf8.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from the abstract Constant class and - * represents a reference to a Utf8 encoded string. - * - * @version $Id: ConstantUtf8.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public final class ConstantUtf8 extends Constant { - - /** - * - */ - private static final long serialVersionUID = 1L; - private String bytes; - - /** - * Initialize from another object. - */ - public ConstantUtf8(ConstantUtf8 c) { - this(c.getBytes()); - } - - /** - * Initialize instance from file data. - * - * @param file - * Input stream - * @throws IOException - */ - ConstantUtf8(DataInputStream file) throws IOException { - super(Constants.CONSTANT_Utf8); - bytes = file.readUTF(); - } - - /** - * @param bytes - * Data - */ - public ConstantUtf8(String bytes) { - super(Constants.CONSTANT_Utf8); - if (bytes == null) { - throw new IllegalArgumentException("bytes must not be null!"); - } - this.bytes = bytes; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantUtf8(this); - } - - /** - * Dump String in Utf8 format to file stream. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - file.writeByte(tag); - file.writeUTF(bytes); - } - - /** - * @return Data converted to string. - */ - public final String getBytes() { - return bytes; - } - - /** - * @param bytes - * the raw bytes of this Utf-8 - */ - public final void setBytes(String bytes) { - this.bytes = bytes; - } - - /** - * @return String representation - */ - @Override - public final String toString() { - return super.toString() + "(\"" + Utility.replace(bytes, "\n", "\\n") - + "\")"; - } -} diff --git a/src/org/apache/bcel/classfile/ConstantValue.java b/src/org/apache/bcel/classfile/ConstantValue.java deleted file mode 100644 index dbb41e3..0000000 --- a/src/org/apache/bcel/classfile/ConstantValue.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from Attribute and represents a constant - * value, i.e., a default value for initializing a class field. This class is - * instantiated by the Attribute.readAttribute() method. - * - * @version $Id: ConstantValue.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class ConstantValue extends Attribute { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int constantvalue_index; - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public ConstantValue(ConstantValue c) { - this(c.getNameIndex(), c.getLength(), c.getConstantValueIndex(), c - .getConstantPool()); - } - - /** - * Construct object from file stream. - * - * @param name_index - * Name index in constant pool - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - * @throws IOException - */ - ConstantValue(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - this(name_index, length, file.readUnsignedShort(), constant_pool); - } - - /** - * @param name_index - * Name index in constant pool - * @param length - * Content length in bytes - * @param constantvalue_index - * Index in constant pool - * @param constant_pool - * Array of constants - */ - public ConstantValue(int name_index, int length, int constantvalue_index, - ConstantPool constant_pool) { - super(Constants.ATTR_CONSTANT_VALUE, name_index, length, constant_pool); - this.constantvalue_index = constantvalue_index; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitConstantValue(this); - } - - /** - * Dump constant value attribute to file stream on binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - file.writeShort(constantvalue_index); - } - - /** - * @return Index in constant pool of constant value. - */ - public final int getConstantValueIndex() { - return constantvalue_index; - } - - /** - * @param constantvalue_index - * the index info the constant pool of this constant value - */ - public final void setConstantValueIndex(int constantvalue_index) { - this.constantvalue_index = constantvalue_index; - } - - /** - * @return String representation of constant value. - */ - @Override - public final String toString() { - Constant c = constant_pool.getConstant(constantvalue_index); - String buf; - int i; - // Print constant to string depending on its type - switch (c.getTag()) { - case Constants.CONSTANT_Long: - buf = "" + ((ConstantLong) c).getBytes(); - break; - case Constants.CONSTANT_Float: - buf = "" + ((ConstantFloat) c).getBytes(); - break; - case Constants.CONSTANT_Double: - buf = "" + ((ConstantDouble) c).getBytes(); - break; - case Constants.CONSTANT_Integer: - buf = "" + ((ConstantInteger) c).getBytes(); - break; - case Constants.CONSTANT_String: - i = ((ConstantString) c).getStringIndex(); - c = constant_pool.getConstant(i, Constants.CONSTANT_Utf8); - buf = "\"" + Utility.convertString(((ConstantUtf8) c).getBytes()) - + "\""; - break; - default: - throw new IllegalStateException("Type of ConstValue invalid: " + c); - } - return buf; - } - - /** - * @return deep copy of this attribute - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - ConstantValue c = (ConstantValue) clone(); - c.constant_pool = _constant_pool; - return c; - } -} diff --git a/src/org/apache/bcel/classfile/Deprecated.java b/src/org/apache/bcel/classfile/Deprecated.java deleted file mode 100644 index 17531cd..0000000 --- a/src/org/apache/bcel/classfile/Deprecated.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from Attribute and denotes that this is a - * deprecated method. It is instantiated from the - * Attribute.readAttribute() method. - * - * @version $Id: Deprecated.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class Deprecated extends Attribute { - - /** - * - */ - private static final long serialVersionUID = 1L; - private byte[] bytes; - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public Deprecated(Deprecated c) { - this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool()); - } - - /** - * @param name_index - * Index in constant pool to CONSTANT_Utf8 - * @param length - * Content length in bytes - * @param bytes - * Attribute contents - * @param constant_pool - * Array of constants - */ - public Deprecated(int name_index, int length, byte[] bytes, - ConstantPool constant_pool) { - super(Constants.ATTR_DEPRECATED, name_index, length, constant_pool); - this.bytes = bytes; - } - - /** - * Construct object from file stream. - * - * @param name_index - * Index in constant pool to CONSTANT_Utf8 - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - * @throws IOException - */ - Deprecated(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - this(name_index, length, (byte[]) null, constant_pool); - if (length > 0) { - bytes = new byte[length]; - file.readFully(bytes); - System.err.println("Deprecated attribute with length > 0"); - } - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitDeprecated(this); - } - - /** - * Dump source file attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - if (length > 0) { - file.write(bytes, 0, length); - } - } - - /** - * @return data bytes. - */ - public final byte[] getBytes() { - return bytes; - } - - /** - * @param bytes - * the raw bytes that represents this byte array - */ - public final void setBytes(byte[] bytes) { - this.bytes = bytes; - } - - /** - * @return attribute name - */ - @Override - public final String toString() { - return Constants.ATTRIBUTE_NAMES[Constants.ATTR_DEPRECATED]; - } - - /** - * @return deep copy of this attribute - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - Deprecated c = (Deprecated) clone(); - if (bytes != null) { - c.bytes = new byte[bytes.length]; - System.arraycopy(bytes, 0, c.bytes, 0, bytes.length); - } - c.constant_pool = _constant_pool; - return c; - } -} diff --git a/src/org/apache/bcel/classfile/DescendingVisitor.java b/src/org/apache/bcel/classfile/DescendingVisitor.java deleted file mode 100644 index cef7cac..0000000 --- a/src/org/apache/bcel/classfile/DescendingVisitor.java +++ /dev/null @@ -1,356 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.util.Stack; - -/** - * Traverses a JavaClass with another Visitor object 'piggy-backed' that is - * applied to all components of a JavaClass object. I.e. this class supplies the - * traversal strategy, other classes can make use of it. - * - * @version $Id: DescendingVisitor.java 388707 2006-03-25 05:40:28Z tcurdt $ - * @author M. Dahm - */ -public class DescendingVisitor implements Visitor { - - private JavaClass clazz; - private Visitor visitor; - private Stack stack = new Stack(); - - /** - * @return container of current entitity, i.e., predecessor during traversal - */ - public Object predecessor() { - return predecessor(0); - } - - /** - * @param level - * nesting level, i.e., 0 returns the direct predecessor - * @return container of current entitity, i.e., predecessor during traversal - */ - public Object predecessor(int level) { - int size = stack.size(); - if ((size < 2) || (level < 0)) { - return null; - } else { - return stack.elementAt(size - (level + 2)); // size - 1 == current - } - } - - /** - * @return current object - */ - public Object current() { - return stack.peek(); - } - - /** - * @param clazz - * Class to traverse - * @param visitor - * visitor object to apply to all components - */ - public DescendingVisitor(JavaClass clazz, Visitor visitor) { - this.clazz = clazz; - this.visitor = visitor; - } - - /** - * Start traversal. - */ - public void visit() { - clazz.accept(this); - } - - @Override - public void visitJavaClass(JavaClass _clazz) { - stack.push(_clazz); - _clazz.accept(visitor); - Field[] fields = _clazz.getFields(); - for (int i = 0; i < fields.length; i++) { - fields[i].accept(this); - } - Method[] methods = _clazz.getMethods(); - for (int i = 0; i < methods.length; i++) { - methods[i].accept(this); - } - Attribute[] attributes = _clazz.getAttributes(); - for (int i = 0; i < attributes.length; i++) { - attributes[i].accept(this); - } - _clazz.getConstantPool().accept(this); - stack.pop(); - } - - @Override - public void visitField(Field field) { - stack.push(field); - field.accept(visitor); - Attribute[] attributes = field.getAttributes(); - for (int i = 0; i < attributes.length; i++) { - attributes[i].accept(this); - } - stack.pop(); - } - - @Override - public void visitConstantValue(ConstantValue cv) { - stack.push(cv); - cv.accept(visitor); - stack.pop(); - } - - @Override - public void visitMethod(Method method) { - stack.push(method); - method.accept(visitor); - Attribute[] attributes = method.getAttributes(); - for (int i = 0; i < attributes.length; i++) { - attributes[i].accept(this); - } - stack.pop(); - } - - @Override - public void visitExceptionTable(ExceptionTable table) { - stack.push(table); - table.accept(visitor); - stack.pop(); - } - - @Override - public void visitCode(Code code) { - stack.push(code); - code.accept(visitor); - CodeException[] table = code.getExceptionTable(); - for (int i = 0; i < table.length; i++) { - table[i].accept(this); - } - Attribute[] attributes = code.getAttributes(); - for (int i = 0; i < attributes.length; i++) { - attributes[i].accept(this); - } - stack.pop(); - } - - @Override - public void visitCodeException(CodeException ce) { - stack.push(ce); - ce.accept(visitor); - stack.pop(); - } - - @Override - public void visitLineNumberTable(LineNumberTable table) { - stack.push(table); - table.accept(visitor); - LineNumber[] numbers = table.getLineNumberTable(); - for (int i = 0; i < numbers.length; i++) { - numbers[i].accept(this); - } - stack.pop(); - } - - @Override - public void visitLineNumber(LineNumber number) { - stack.push(number); - number.accept(visitor); - stack.pop(); - } - - @Override - public void visitLocalVariableTable(LocalVariableTable table) { - stack.push(table); - table.accept(visitor); - LocalVariable[] vars = table.getLocalVariableTable(); - for (int i = 0; i < vars.length; i++) { - vars[i].accept(this); - } - stack.pop(); - } - - @Override - public void visitStackMap(StackMap table) { - stack.push(table); - table.accept(visitor); - StackMapEntry[] vars = table.getStackMap(); - for (int i = 0; i < vars.length; i++) { - vars[i].accept(this); - } - stack.pop(); - } - - @Override - public void visitStackMapEntry(StackMapEntry var) { - stack.push(var); - var.accept(visitor); - stack.pop(); - } - - @Override - public void visitLocalVariable(LocalVariable var) { - stack.push(var); - var.accept(visitor); - stack.pop(); - } - - @Override - public void visitConstantPool(ConstantPool cp) { - stack.push(cp); - cp.accept(visitor); - Constant[] constants = cp.getConstantPool(); - for (int i = 1; i < constants.length; i++) { - if (constants[i] != null) { - constants[i].accept(this); - } - } - stack.pop(); - } - - @Override - public void visitConstantClass(ConstantClass constant) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - @Override - public void visitConstantDouble(ConstantDouble constant) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - @Override - public void visitConstantFieldref(ConstantFieldref constant) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - @Override - public void visitConstantFloat(ConstantFloat constant) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - @Override - public void visitConstantInteger(ConstantInteger constant) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - @Override - public void visitConstantInterfaceMethodref( - ConstantInterfaceMethodref constant) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - @Override - public void visitConstantLong(ConstantLong constant) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - @Override - public void visitConstantMethodref(ConstantMethodref constant) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - @Override - public void visitConstantNameAndType(ConstantNameAndType constant) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - @Override - public void visitConstantString(ConstantString constant) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - @Override - public void visitConstantUtf8(ConstantUtf8 constant) { - stack.push(constant); - constant.accept(visitor); - stack.pop(); - } - - @Override - public void visitInnerClasses(InnerClasses ic) { - stack.push(ic); - ic.accept(visitor); - InnerClass[] ics = ic.getInnerClasses(); - for (int i = 0; i < ics.length; i++) { - ics[i].accept(this); - } - stack.pop(); - } - - @Override - public void visitInnerClass(InnerClass inner) { - stack.push(inner); - inner.accept(visitor); - stack.pop(); - } - - @Override - public void visitDeprecated(Deprecated attribute) { - stack.push(attribute); - attribute.accept(visitor); - stack.pop(); - } - - @Override - public void visitSignature(Signature attribute) { - stack.push(attribute); - attribute.accept(visitor); - stack.pop(); - } - - @Override - public void visitSourceFile(SourceFile attribute) { - stack.push(attribute); - attribute.accept(visitor); - stack.pop(); - } - - @Override - public void visitSynthetic(Synthetic attribute) { - stack.push(attribute); - attribute.accept(visitor); - stack.pop(); - } - - @Override - public void visitUnknown(Unknown attribute) { - stack.push(attribute); - attribute.accept(visitor); - stack.pop(); - } -} diff --git a/src/org/apache/bcel/classfile/EmptyVisitor.java b/src/org/apache/bcel/classfile/EmptyVisitor.java deleted file mode 100644 index 23e1794..0000000 --- a/src/org/apache/bcel/classfile/EmptyVisitor.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -/** - * Visitor with empty method bodies, can be extended and used in conjunction - * with the DescendingVisitor class, e.g. - * - * By courtesy of David Spencer. - * - * @see DescendingVisitor - * @version $Id: EmptyVisitor.java 388707 2006-03-25 05:40:28Z tcurdt $ - * - */ -public class EmptyVisitor implements Visitor { - - protected EmptyVisitor() { - } - - @Override - public void visitCode(Code obj) { - } - - @Override - public void visitCodeException(CodeException obj) { - } - - @Override - public void visitConstantClass(ConstantClass obj) { - } - - @Override - public void visitConstantDouble(ConstantDouble obj) { - } - - @Override - public void visitConstantFieldref(ConstantFieldref obj) { - } - - @Override - public void visitConstantFloat(ConstantFloat obj) { - } - - @Override - public void visitConstantInteger(ConstantInteger obj) { - } - - @Override - public void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj) { - } - - @Override - public void visitConstantLong(ConstantLong obj) { - } - - @Override - public void visitConstantMethodref(ConstantMethodref obj) { - } - - @Override - public void visitConstantNameAndType(ConstantNameAndType obj) { - } - - @Override - public void visitConstantPool(ConstantPool obj) { - } - - @Override - public void visitConstantString(ConstantString obj) { - } - - @Override - public void visitConstantUtf8(ConstantUtf8 obj) { - } - - @Override - public void visitConstantValue(ConstantValue obj) { - } - - @Override - public void visitDeprecated(Deprecated obj) { - } - - @Override - public void visitExceptionTable(ExceptionTable obj) { - } - - @Override - public void visitField(Field obj) { - } - - @Override - public void visitInnerClass(InnerClass obj) { - } - - @Override - public void visitInnerClasses(InnerClasses obj) { - } - - @Override - public void visitJavaClass(JavaClass obj) { - } - - @Override - public void visitLineNumber(LineNumber obj) { - } - - @Override - public void visitLineNumberTable(LineNumberTable obj) { - } - - @Override - public void visitLocalVariable(LocalVariable obj) { - } - - @Override - public void visitLocalVariableTable(LocalVariableTable obj) { - } - - @Override - public void visitMethod(Method obj) { - } - - @Override - public void visitSignature(Signature obj) { - } - - @Override - public void visitSourceFile(SourceFile obj) { - } - - @Override - public void visitSynthetic(Synthetic obj) { - } - - @Override - public void visitUnknown(Unknown obj) { - } - - @Override - public void visitStackMap(StackMap obj) { - } - - @Override - public void visitStackMapEntry(StackMapEntry obj) { - } -} diff --git a/src/org/apache/bcel/classfile/ExceptionTable.java b/src/org/apache/bcel/classfile/ExceptionTable.java deleted file mode 100644 index 59a08ff..0000000 --- a/src/org/apache/bcel/classfile/ExceptionTable.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class represents the table of exceptions that are thrown by a method. - * This attribute may be used once per method. The name of this class is - * ExceptionTable for historical reasons; The Java Virtual Machine - * Specification, Second Edition defines this attribute using the name - * Exceptions (which is inconsistent with the other classes). - * - * @version $Id: ExceptionTable.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Code - */ -public final class ExceptionTable extends Attribute { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int number_of_exceptions; // Table of indices into - private int[] exception_index_table; // constant pool - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use copy() for a physical copy. - */ - public ExceptionTable(ExceptionTable c) { - this(c.getNameIndex(), c.getLength(), c.getExceptionIndexTable(), c - .getConstantPool()); - } - - /** - * @param name_index - * Index in constant pool - * @param length - * Content length in bytes - * @param exception_index_table - * Table of indices in constant pool - * @param constant_pool - * Array of constants - */ - public ExceptionTable(int name_index, int length, - int[] exception_index_table, ConstantPool constant_pool) { - super(Constants.ATTR_EXCEPTIONS, name_index, length, constant_pool); - setExceptionIndexTable(exception_index_table); - } - - /** - * Construct object from file stream. - * - * @param name_index - * Index in constant pool - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - * @throws IOException - */ - ExceptionTable(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - this(name_index, length, (int[]) null, constant_pool); - number_of_exceptions = file.readUnsignedShort(); - exception_index_table = new int[number_of_exceptions]; - for (int i = 0; i < number_of_exceptions; i++) { - exception_index_table[i] = file.readUnsignedShort(); - } - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionTable(this); - } - - /** - * Dump exceptions attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - file.writeShort(number_of_exceptions); - for (int i = 0; i < number_of_exceptions; i++) { - file.writeShort(exception_index_table[i]); - } - } - - /** - * @return Array of indices into constant pool of thrown exceptions. - */ - public final int[] getExceptionIndexTable() { - return exception_index_table; - } - - /** - * @return Length of exception table. - */ - public final int getNumberOfExceptions() { - return number_of_exceptions; - } - - /** - * @return class names of thrown exceptions - */ - public final String[] getExceptionNames() { - String[] names = new String[number_of_exceptions]; - for (int i = 0; i < number_of_exceptions; i++) { - names[i] = constant_pool.getConstantString( - exception_index_table[i], Constants.CONSTANT_Class) - .replace('/', '.'); - } - return names; - } - - /** - * @param exception_index_table - * the list of exception indexes Also redefines - * number_of_exceptions according to table length. - */ - public final void setExceptionIndexTable(int[] exception_index_table) { - this.exception_index_table = exception_index_table; - number_of_exceptions = (exception_index_table == null) ? 0 - : exception_index_table.length; - } - - /** - * @return String representation, i.e., a list of thrown exceptions. - */ - @Override - public final String toString() { - StringBuffer buf = new StringBuffer(""); - String str; - for (int i = 0; i < number_of_exceptions; i++) { - str = constant_pool.getConstantString(exception_index_table[i], - Constants.CONSTANT_Class); - buf.append(Utility.compactClassName(str, false)); - if (i < number_of_exceptions - 1) { - buf.append(", "); - } - } - return buf.toString(); - } - - /** - * @return deep copy of this attribute - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - ExceptionTable c = (ExceptionTable) clone(); - if (exception_index_table != null) { - c.exception_index_table = new int[exception_index_table.length]; - System.arraycopy(exception_index_table, 0, c.exception_index_table, - 0, exception_index_table.length); - } - c.constant_pool = _constant_pool; - return c; - } -} diff --git a/src/org/apache/bcel/classfile/Field.java b/src/org/apache/bcel/classfile/Field.java deleted file mode 100644 index 4ed0777..0000000 --- a/src/org/apache/bcel/classfile/Field.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.IOException; -import org.apache.bcel.Constants; -import org.apache.bcel.generic.Type; -import org.apache.bcel.util.BCELComparator; - -/** - * This class represents the field info structure, i.e., the representation for - * a variable in the class. See JVM specification for details. - * - * @version $Id: Field.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class Field extends FieldOrMethod { - - /** - * - */ - private static final long serialVersionUID = 1L; - private static BCELComparator _cmp = new BCELComparator() { - - @Override - public boolean equals(Object o1, Object o2) { - Field THIS = (Field) o1; - Field THAT = (Field) o2; - return THIS.getName().equals(THAT.getName()) - && THIS.getSignature().equals(THAT.getSignature()); - } - - @Override - public int hashCode(Object o) { - Field THIS = (Field) o; - return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); - } - }; - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public Field(Field c) { - super(c); - } - - /** - * Construct object from file stream. - * - * @param file - * Input stream - */ - Field(DataInputStream file, ConstantPool constant_pool) throws IOException, - ClassFormatException { - super(file, constant_pool); - } - - /** - * @param access_flags - * Access rights of field - * @param name_index - * Points to field name in constant pool - * @param signature_index - * Points to encoded signature - * @param attributes - * Collection of attributes - * @param constant_pool - * Array of constants - */ - public Field(int access_flags, int name_index, int signature_index, - Attribute[] attributes, ConstantPool constant_pool) { - super(access_flags, name_index, signature_index, attributes, - constant_pool); - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitField(this); - } - - /** - * @return constant value associated with this field (may be null) - */ - public final ConstantValue getConstantValue() { - for (int i = 0; i < attributes_count; i++) { - if (attributes[i].getTag() == Constants.ATTR_CONSTANT_VALUE) { - return (ConstantValue) attributes[i]; - } - } - return null; - } - - /** - * Return string representation close to declaration format, `public static - * final short MAX = 100', e.g.. - * - * @return String representation of field, including the signature. - */ - @Override - public final String toString() { - String name, signature, access; // Short cuts to constant pool - // Get names from constant pool - access = Utility.accessToString(access_flags); - access = access.equals("") ? "" : (access + " "); - signature = Utility.signatureToString(getSignature()); - name = getName(); - StringBuffer buf = new StringBuffer(64); - buf.append(access).append(signature).append(" ").append(name); - ConstantValue cv = getConstantValue(); - if (cv != null) { - buf.append(" = ").append(cv); - } - for (int i = 0; i < attributes_count; i++) { - Attribute a = attributes[i]; - if (!(a instanceof ConstantValue)) { - buf.append(" [").append(a.toString()).append("]"); - } - } - return buf.toString(); - } - - /** - * @return deep copy of this field - */ - public final Field copy(ConstantPool _constant_pool) { - return (Field) copy_(_constant_pool); - } - - /** - * @return type of field - */ - public Type getType() { - return Type.getReturnType(getSignature()); - } - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - /** - * @param comparator - * Comparison strategy object - */ - public static void setComparator(BCELComparator comparator) { - _cmp = comparator; - } - - /** - * Return value as defined by given BCELComparator strategy. By default two - * Field objects are said to be equal when their names and signatures are - * equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - return _cmp.equals(this, obj); - } - - /** - * Return value as defined by given BCELComparator strategy. By default - * return the hashcode of the field's name XOR signature. - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - return _cmp.hashCode(this); - } -} diff --git a/src/org/apache/bcel/classfile/FieldOrMethod.java b/src/org/apache/bcel/classfile/FieldOrMethod.java deleted file mode 100644 index 03b0fff..0000000 --- a/src/org/apache/bcel/classfile/FieldOrMethod.java +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * Abstract super class for fields and methods. - * - * @version $Id: FieldOrMethod.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class FieldOrMethod extends AccessFlags implements Cloneable, - Node { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected int name_index; // Points to field name in constant pool - protected int signature_index; // Points to encoded signature - protected int attributes_count; // No. of attributes - protected Attribute[] attributes; // Collection of attributes - protected ConstantPool constant_pool; - - FieldOrMethod() { - } - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - protected FieldOrMethod(FieldOrMethod c) { - this(c.getAccessFlags(), c.getNameIndex(), c.getSignatureIndex(), c - .getAttributes(), c.getConstantPool()); - } - - /** - * Construct object from file stream. - * - * @param file - * Input stream - * @throws IOException - * @throws ClassFormatException - */ - protected FieldOrMethod(DataInputStream file, ConstantPool constant_pool) - throws IOException, ClassFormatException { - this(file.readUnsignedShort(), file.readUnsignedShort(), file - .readUnsignedShort(), null, constant_pool); - attributes_count = file.readUnsignedShort(); - attributes = new Attribute[attributes_count]; - for (int i = 0; i < attributes_count; i++) { - attributes[i] = Attribute.readAttribute(file, constant_pool); - } - } - - /** - * @param access_flags - * Access rights of method - * @param name_index - * Points to field name in constant pool - * @param signature_index - * Points to encoded signature - * @param attributes - * Collection of attributes - * @param constant_pool - * Array of constants - */ - protected FieldOrMethod(int access_flags, int name_index, - int signature_index, Attribute[] attributes, - ConstantPool constant_pool) { - this.access_flags = access_flags; - this.name_index = name_index; - this.signature_index = signature_index; - this.constant_pool = constant_pool; - setAttributes(attributes); - } - - /** - * Dump object to file stream on binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - public final void dump(DataOutputStream file) throws IOException { - file.writeShort(access_flags); - file.writeShort(name_index); - file.writeShort(signature_index); - file.writeShort(attributes_count); - for (int i = 0; i < attributes_count; i++) { - attributes[i].dump(file); - } - } - - /** - * @return Collection of object attributes. - */ - public final Attribute[] getAttributes() { - return attributes; - } - - /** - * @param attributes - * Collection of object attributes. - */ - public final void setAttributes(Attribute[] attributes) { - this.attributes = attributes; - attributes_count = (attributes == null) ? 0 : attributes.length; - } - - /** - * @return Constant pool used by this object. - */ - public final ConstantPool getConstantPool() { - return constant_pool; - } - - /** - * @param constant_pool - * Constant pool to be used for this object. - */ - public final void setConstantPool(ConstantPool constant_pool) { - this.constant_pool = constant_pool; - } - - /** - * @return Index in constant pool of object's name. - */ - public final int getNameIndex() { - return name_index; - } - - /** - * @param name_index - * Index in constant pool of object's name. - */ - public final void setNameIndex(int name_index) { - this.name_index = name_index; - } - - /** - * @return Index in constant pool of field signature. - */ - public final int getSignatureIndex() { - return signature_index; - } - - /** - * @param signature_index - * Index in constant pool of field signature. - */ - public final void setSignatureIndex(int signature_index) { - this.signature_index = signature_index; - } - - /** - * @return Name of object, i.e., method name or field name - */ - public final String getName() { - ConstantUtf8 c; - c = (ConstantUtf8) constant_pool.getConstant(name_index, - Constants.CONSTANT_Utf8); - return c.getBytes(); - } - - /** - * @return String representation of object's type signature (java style) - */ - public final String getSignature() { - ConstantUtf8 c; - c = (ConstantUtf8) constant_pool.getConstant(signature_index, - Constants.CONSTANT_Utf8); - return c.getBytes(); - } - - /** - * @return deep copy of this field - */ - protected FieldOrMethod copy_(ConstantPool _constant_pool) { - try { - FieldOrMethod c = (FieldOrMethod) clone(); - c.constant_pool = _constant_pool; - c.attributes = new Attribute[attributes_count]; - for (int i = 0; i < attributes_count; i++) { - c.attributes[i] = attributes[i].copy(_constant_pool); - } - return c; - } catch (CloneNotSupportedException e) { - return null; - } - } -} diff --git a/src/org/apache/bcel/classfile/InnerClass.java b/src/org/apache/bcel/classfile/InnerClass.java deleted file mode 100644 index 52cbf32..0000000 --- a/src/org/apache/bcel/classfile/InnerClass.java +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; -import org.apache.bcel.Constants; - -/** - * This class represents a inner class attribute, i.e., the class indices of the - * inner and outer classes, the name and the attributes of the inner class. - * - * @version $Id: InnerClass.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see InnerClasses - */ -public final class InnerClass implements Cloneable, Node, Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int inner_class_index; - private int outer_class_index; - private int inner_name_index; - private int inner_access_flags; - - /** - * Initialize from another object. - */ - public InnerClass(InnerClass c) { - this(c.getInnerClassIndex(), c.getOuterClassIndex(), c - .getInnerNameIndex(), c.getInnerAccessFlags()); - } - - /** - * Construct object from file stream. - * - * @param file - * Input stream - * @throws IOException - */ - InnerClass(DataInputStream file) throws IOException { - this(file.readUnsignedShort(), file.readUnsignedShort(), file - .readUnsignedShort(), file.readUnsignedShort()); - } - - /** - * @param inner_class_index - * Class index in constant pool of inner class - * @param outer_class_index - * Class index in constant pool of outer class - * @param inner_name_index - * Name index in constant pool of inner class - * @param inner_access_flags - * Access flags of inner class - */ - public InnerClass(int inner_class_index, int outer_class_index, - int inner_name_index, int inner_access_flags) { - this.inner_class_index = inner_class_index; - this.outer_class_index = outer_class_index; - this.inner_name_index = inner_name_index; - this.inner_access_flags = inner_access_flags; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitInnerClass(this); - } - - /** - * Dump inner class attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - public final void dump(DataOutputStream file) throws IOException { - file.writeShort(inner_class_index); - file.writeShort(outer_class_index); - file.writeShort(inner_name_index); - file.writeShort(inner_access_flags); - } - - /** - * @return access flags of inner class. - */ - public final int getInnerAccessFlags() { - return inner_access_flags; - } - - /** - * @return class index of inner class. - */ - public final int getInnerClassIndex() { - return inner_class_index; - } - - /** - * @return name index of inner class. - */ - public final int getInnerNameIndex() { - return inner_name_index; - } - - /** - * @return class index of outer class. - */ - public final int getOuterClassIndex() { - return outer_class_index; - } - - /** - * @param inner_access_flags - * access flags for this inner class - */ - public final void setInnerAccessFlags(int inner_access_flags) { - this.inner_access_flags = inner_access_flags; - } - - /** - * @param inner_class_index - * index into the constant pool for this class - */ - public final void setInnerClassIndex(int inner_class_index) { - this.inner_class_index = inner_class_index; - } - - /** - * @param inner_name_index - * index into the constant pool for this class's name - */ - public final void setInnerNameIndex(int inner_name_index) { - this.inner_name_index = inner_name_index; - } - - /** - * @param outer_class_index - * index into the constant pool for the owning class - */ - public final void setOuterClassIndex(int outer_class_index) { - this.outer_class_index = outer_class_index; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - return "InnerClass(" + inner_class_index + ", " + outer_class_index - + ", " + inner_name_index + ", " + inner_access_flags + ")"; - } - - /** - * @return Resolved string representation - */ - public final String toString(ConstantPool constant_pool) { - String inner_class_name, outer_class_name, inner_name, access; - inner_class_name = constant_pool.getConstantString(inner_class_index, - Constants.CONSTANT_Class); - inner_class_name = Utility.compactClassName(inner_class_name); - if (outer_class_index != 0) { - outer_class_name = constant_pool.getConstantString( - outer_class_index, Constants.CONSTANT_Class); - outer_class_name = Utility.compactClassName(outer_class_name); - } else { - outer_class_name = ""; - } - if (inner_name_index != 0) { - inner_name = ((ConstantUtf8) constant_pool.getConstant( - inner_name_index, Constants.CONSTANT_Utf8)).getBytes(); - } else { - inner_name = ""; - } - access = Utility.accessToString(inner_access_flags, true); - access = access.equals("") ? "" : (access + " "); - return "InnerClass:" + access + inner_class_name + "(\"" - + outer_class_name + "\", \"" + inner_name + "\")"; - } - - /** - * @return deep copy of this object - */ - public InnerClass copy() { - try { - return (InnerClass) clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } -} diff --git a/src/org/apache/bcel/classfile/InnerClasses.java b/src/org/apache/bcel/classfile/InnerClasses.java deleted file mode 100644 index d47e3ed..0000000 --- a/src/org/apache/bcel/classfile/InnerClasses.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from Attribute and denotes that this class is - * an Inner class of another. to the source file of this class. It is - * instantiated from the Attribute.readAttribute() method. - * - * @version $Id: InnerClasses.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class InnerClasses extends Attribute { - - /** - * - */ - private static final long serialVersionUID = 1L; - private InnerClass[] inner_classes; - private int number_of_classes; - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public InnerClasses(InnerClasses c) { - this(c.getNameIndex(), c.getLength(), c.getInnerClasses(), c - .getConstantPool()); - } - - /** - * @param name_index - * Index in constant pool to CONSTANT_Utf8 - * @param length - * Content length in bytes - * @param inner_classes - * array of inner classes attributes - * @param constant_pool - * Array of constants - */ - public InnerClasses(int name_index, int length, InnerClass[] inner_classes, - ConstantPool constant_pool) { - super(Constants.ATTR_INNER_CLASSES, name_index, length, constant_pool); - setInnerClasses(inner_classes); - } - - /** - * Construct object from file stream. - * - * @param name_index - * Index in constant pool to CONSTANT_Utf8 - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - * @throws IOException - */ - InnerClasses(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - this(name_index, length, (InnerClass[]) null, constant_pool); - number_of_classes = file.readUnsignedShort(); - inner_classes = new InnerClass[number_of_classes]; - for (int i = 0; i < number_of_classes; i++) { - inner_classes[i] = new InnerClass(file); - } - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitInnerClasses(this); - } - - /** - * Dump source file attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - file.writeShort(number_of_classes); - for (int i = 0; i < number_of_classes; i++) { - inner_classes[i].dump(file); - } - } - - /** - * @return array of inner class "records" - */ - public final InnerClass[] getInnerClasses() { - return inner_classes; - } - - /** - * @param inner_classes - * the array of inner classes - */ - public final void setInnerClasses(InnerClass[] inner_classes) { - this.inner_classes = inner_classes; - number_of_classes = (inner_classes == null) ? 0 : inner_classes.length; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < number_of_classes; i++) { - buf.append(inner_classes[i].toString(constant_pool)).append("\n"); - } - return buf.toString(); - } - - /** - * @return deep copy of this attribute - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - InnerClasses c = (InnerClasses) clone(); - c.inner_classes = new InnerClass[number_of_classes]; - for (int i = 0; i < number_of_classes; i++) { - c.inner_classes[i] = inner_classes[i].copy(); - } - c.constant_pool = _constant_pool; - return c; - } -} diff --git a/src/org/apache/bcel/classfile/JavaClass.java b/src/org/apache/bcel/classfile/JavaClass.java deleted file mode 100644 index faf2a08..0000000 --- a/src/org/apache/bcel/classfile/JavaClass.java +++ /dev/null @@ -1,881 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.StringTokenizer; -import java.util.TreeSet; - -import org.apache.bcel.Constants; -import org.apache.bcel.generic.Type; -import org.apache.bcel.util.BCELComparator; -import org.apache.bcel.util.ClassQueue; -import org.apache.bcel.util.SyntheticRepository; - -/** - * Represents a Java class, i.e., the data structures, constant pool, fields, - * methods and commands contained in a Java .class file. See JVM specification for details. The - * intent of this class is to represent a parsed or otherwise existing class - * file. Those interested in programatically generating classes should see the - * ClassGen class. - * - * @version $Id: JavaClass.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @see org.apache.bcel.generic.ClassGen - * @author M. Dahm - */ -public class JavaClass extends AccessFlags implements Cloneable, Node, - Comparable { - - /** - * - */ - private static final long serialVersionUID = 1L; - private String file_name; - private String package_name; - private String source_file_name = ""; - private int class_name_index; - private int superclass_name_index; - private String class_name; - private String superclass_name; - private int major, minor; // Compiler version - private ConstantPool constant_pool; // Constant pool - private int[] interfaces; // implemented interfaces - private String[] interface_names; - private Field[] fields; // Fields, i.e., variables of class - private Method[] methods; // methods defined in the class - private Attribute[] attributes; // attributes defined in the class - private byte source = HEAP; // Generated in memory - public static final byte HEAP = 1; - public static final byte FILE = 2; - public static final byte ZIP = 3; - static boolean debug = false; // Debugging on/off - static char sep = '/'; // directory separator - private static BCELComparator _cmp = new BCELComparator() { - - @Override - public boolean equals(Object o1, Object o2) { - JavaClass THIS = (JavaClass) o1; - JavaClass THAT = (JavaClass) o2; - return THIS.getClassName().equals(THAT.getClassName()); - } - - @Override - public int hashCode(Object o) { - JavaClass THIS = (JavaClass) o; - return THIS.getClassName().hashCode(); - } - }; - /** - * In cases where we go ahead and create something, use the default - * SyntheticRepository, because we don't know any better. - */ - private transient org.apache.bcel.util.Repository repository = SyntheticRepository - .getInstance(); - - /** - * Constructor gets all contents as arguments. - * - * @param class_name_index - * Index into constant pool referencing a ConstantClass that - * represents this class. - * @param superclass_name_index - * Index into constant pool referencing a ConstantClass that - * represents this class's superclass. - * @param file_name - * File name - * @param major - * Major compiler version - * @param minor - * Minor compiler version - * @param access_flags - * Access rights defined by bit flags - * @param constant_pool - * Array of constants - * @param interfaces - * Implemented interfaces - * @param fields - * Class fields - * @param methods - * Class methods - * @param attributes - * Class attributes - * @param source - * Read from file or generated in memory? - */ - public JavaClass(int class_name_index, int superclass_name_index, - String file_name, int major, int minor, int access_flags, - ConstantPool constant_pool, int[] interfaces, Field[] fields, - Method[] methods, Attribute[] attributes, byte source) { - if (interfaces == null) { - interfaces = new int[0]; - } - if (attributes == null) { - attributes = new Attribute[0]; - } - if (fields == null) { - fields = new Field[0]; - } - if (methods == null) { - methods = new Method[0]; - } - this.class_name_index = class_name_index; - this.superclass_name_index = superclass_name_index; - this.file_name = file_name; - this.major = major; - this.minor = minor; - this.access_flags = access_flags; - this.constant_pool = constant_pool; - this.interfaces = interfaces; - this.fields = fields; - this.methods = methods; - this.attributes = attributes; - this.source = source; - // Get source file name if available - for (int i = 0; i < attributes.length; i++) { - if (attributes[i] instanceof SourceFile) { - source_file_name = ((SourceFile) attributes[i]) - .getSourceFileName(); - break; - } - } - /* - * According to the specification the following entries must be of type - * `ConstantClass' but we check that anyway via the - * `ConstPool.getConstant' method. - */ - class_name = constant_pool.getConstantString(class_name_index, - Constants.CONSTANT_Class); - class_name = Utility.compactClassName(class_name, false); - int index = class_name.lastIndexOf('.'); - if (index < 0) { - package_name = ""; - } else { - package_name = class_name.substring(0, index); - } - if (superclass_name_index > 0) { - // May be zero -> class is java.lang.Object - superclass_name = constant_pool.getConstantString( - superclass_name_index, Constants.CONSTANT_Class); - superclass_name = Utility.compactClassName(superclass_name, false); - } else { - superclass_name = "java.lang.Object"; - } - interface_names = new String[interfaces.length]; - for (int i = 0; i < interfaces.length; i++) { - String str = constant_pool.getConstantString(interfaces[i], - Constants.CONSTANT_Class); - interface_names[i] = Utility.compactClassName(str, false); - } - } - - /** - * Constructor gets all contents as arguments. - * - * @param class_name_index - * Class name - * @param superclass_name_index - * Superclass name - * @param file_name - * File name - * @param major - * Major compiler version - * @param minor - * Minor compiler version - * @param access_flags - * Access rights defined by bit flags - * @param constant_pool - * Array of constants - * @param interfaces - * Implemented interfaces - * @param fields - * Class fields - * @param methods - * Class methods - * @param attributes - * Class attributes - */ - public JavaClass(int class_name_index, int superclass_name_index, - String file_name, int major, int minor, int access_flags, - ConstantPool constant_pool, int[] interfaces, Field[] fields, - Method[] methods, Attribute[] attributes) { - this(class_name_index, superclass_name_index, file_name, major, minor, - access_flags, constant_pool, interfaces, fields, methods, - attributes, HEAP); - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitJavaClass(this); - } - - /* - * Print debug information depending on `JavaClass.debug' - */ - static final void Debug(String str) { - if (debug) { - System.out.println(str); - } - } - - /** - * Dump class to a file. - * - * @param file - * Output file - * @throws IOException - */ - public void dump(File file) throws IOException { - String parent = file.getParent(); - if (parent != null) { - File dir = new File(parent); - dir.mkdirs(); - } - DataOutputStream dos = null; - try { - dos = new DataOutputStream(new FileOutputStream(file)); - dump(dos); - } finally { - if (dos != null) { - dos.close(); - } - } - } - - /** - * Dump class to a file named file_name. - * - * @param _file_name - * Output file name - * @exception IOException - */ - public void dump(String _file_name) throws IOException { - dump(new File(_file_name)); - } - - /** - * @return class in binary format - */ - public byte[] getBytes() { - ByteArrayOutputStream s = new ByteArrayOutputStream(); - DataOutputStream ds = new DataOutputStream(s); - try { - dump(ds); - } catch (IOException e) { - e.printStackTrace(); - } finally { - try { - ds.close(); - } catch (IOException e2) { - e2.printStackTrace(); - } - } - return s.toByteArray(); - } - - /** - * Dump Java class to output stream in binary format. - * - * @param file - * Output stream - * @exception IOException - */ - public void dump(OutputStream file) throws IOException { - dump(new DataOutputStream(file)); - } - - /** - * Dump Java class to output stream in binary format. - * - * @param file - * Output stream - * @exception IOException - */ - public void dump(DataOutputStream file) throws IOException { - file.writeInt(0xcafebabe); - file.writeShort(minor); - file.writeShort(major); - constant_pool.dump(file); - file.writeShort(access_flags); - file.writeShort(class_name_index); - file.writeShort(superclass_name_index); - file.writeShort(interfaces.length); - for (int i = 0; i < interfaces.length; i++) { - file.writeShort(interfaces[i]); - } - file.writeShort(fields.length); - for (int i = 0; i < fields.length; i++) { - fields[i].dump(file); - } - file.writeShort(methods.length); - for (int i = 0; i < methods.length; i++) { - methods[i].dump(file); - } - if (attributes != null) { - file.writeShort(attributes.length); - for (int i = 0; i < attributes.length; i++) { - attributes[i].dump(file); - } - } else { - file.writeShort(0); - } - file.flush(); - } - - /** - * @return Attributes of the class. - */ - public Attribute[] getAttributes() { - return attributes; - } - - /** - * @return Class name. - */ - public String getClassName() { - return class_name; - } - - /** - * @return Package name. - */ - public String getPackageName() { - return package_name; - } - - /** - * @return Class name index. - */ - public int getClassNameIndex() { - return class_name_index; - } - - /** - * @return Constant pool. - */ - public ConstantPool getConstantPool() { - return constant_pool; - } - - /** - * @return Fields, i.e., variables of the class. Like the JVM spec mandates - * for the classfile format, these fields are those specific to this - * class, and not those of the superclass or superinterfaces. - */ - public Field[] getFields() { - return fields; - } - - /** - * @return File name of class, aka SourceFile attribute value - */ - public String getFileName() { - return file_name; - } - - /** - * @return Names of implemented interfaces. - */ - public String[] getInterfaceNames() { - return interface_names; - } - - /** - * @return Indices in constant pool of implemented interfaces. - */ - public int[] getInterfaceIndices() { - return interfaces; - } - - /** - * @return Major number of class file version. - */ - public int getMajor() { - return major; - } - - /** - * @return Methods of the class. - */ - public Method[] getMethods() { - return methods; - } - - /** - * @return A org.apache.bcel.classfile.Method corresponding to - * java.lang.reflect.Method if any - */ - public Method getMethod(java.lang.reflect.Method m) { - for (int i = 0; i < methods.length; i++) { - Method method = methods[i]; - if (m.getName().equals(method.getName()) - && (m.getModifiers() == method.getModifiers()) - && Type.getSignature(m).equals(method.getSignature())) { - return method; - } - } - return null; - } - - /** - * @return Minor number of class file version. - */ - public int getMinor() { - return minor; - } - - /** - * @return sbsolute path to file where this class was read from - */ - public String getSourceFileName() { - return source_file_name; - } - - /** - * @return Superclass name. - */ - public String getSuperclassName() { - return superclass_name; - } - - /** - * @return Class name index. - */ - public int getSuperclassNameIndex() { - return superclass_name_index; - } - - static { - // Debugging ... on/off - debug = Boolean.getBoolean("JavaClass.debug"); - // Get path separator either / or \ usually - String _sep = System.getProperty("file.separator"); - if (_sep != null) { - try { - JavaClass.sep = _sep.charAt(0); - } catch (StringIndexOutOfBoundsException e) { - } // Never reached - } - } - - /** - * @param attributes - * . - */ - public void setAttributes(Attribute[] attributes) { - this.attributes = attributes; - } - - /** - * @param class_name - * . - */ - public void setClassName(String class_name) { - this.class_name = class_name; - } - - /** - * @param class_name_index - * . - */ - public void setClassNameIndex(int class_name_index) { - this.class_name_index = class_name_index; - } - - /** - * @param constant_pool - * . - */ - public void setConstantPool(ConstantPool constant_pool) { - this.constant_pool = constant_pool; - } - - /** - * @param fields - * . - */ - public void setFields(Field[] fields) { - this.fields = fields; - } - - /** - * Set File name of class, aka SourceFile attribute value - */ - public void setFileName(String file_name) { - this.file_name = file_name; - } - - /** - * @param interface_names - * . - */ - public void setInterfaceNames(String[] interface_names) { - this.interface_names = interface_names; - } - - /** - * @param interfaces - * . - */ - public void setInterfaces(int[] interfaces) { - this.interfaces = interfaces; - } - - /** - * @param major - * . - */ - public void setMajor(int major) { - this.major = major; - } - - /** - * @param methods - * . - */ - public void setMethods(Method[] methods) { - this.methods = methods; - } - - /** - * @param minor - * . - */ - public void setMinor(int minor) { - this.minor = minor; - } - - /** - * Set absolute path to file this class was read from. - */ - public void setSourceFileName(String source_file_name) { - this.source_file_name = source_file_name; - } - - /** - * @param superclass_name - * . - */ - public void setSuperclassName(String superclass_name) { - this.superclass_name = superclass_name; - } - - /** - * @param superclass_name_index - * . - */ - public void setSuperclassNameIndex(int superclass_name_index) { - this.superclass_name_index = superclass_name_index; - } - - /** - * @return String representing class contents. - */ - @Override - public String toString() { - String access = Utility.accessToString(access_flags, true); - access = access.equals("") ? "" : (access + " "); - StringBuffer buf = new StringBuffer(128); - buf.append(access).append(Utility.classOrInterface(access_flags)) - .append(" ").append(class_name).append(" extends ") - .append(Utility.compactClassName(superclass_name, false)) - .append('\n'); - int size = interfaces.length; - if (size > 0) { - buf.append("implements\t\t"); - for (int i = 0; i < size; i++) { - buf.append(interface_names[i]); - if (i < size - 1) { - buf.append(", "); - } - } - buf.append('\n'); - } - buf.append("filename\t\t").append(file_name).append('\n'); - buf.append("compiled from\t\t").append(source_file_name).append('\n'); - buf.append("compiler version\t").append(major).append(".") - .append(minor).append('\n'); - buf.append("access flags\t\t").append(access_flags).append('\n'); - buf.append("constant pool\t\t").append(constant_pool.getLength()) - .append(" entries\n"); - buf.append("ACC_SUPER flag\t\t").append(isSuper()).append("\n"); - if (attributes.length > 0) { - buf.append("\nAttribute(s):\n"); - for (int i = 0; i < attributes.length; i++) { - buf.append(indent(attributes[i])); - } - } - if (fields.length > 0) { - buf.append("\n").append(fields.length).append(" fields:\n"); - for (int i = 0; i < fields.length; i++) { - buf.append("\t").append(fields[i]).append('\n'); - } - } - if (methods.length > 0) { - buf.append("\n").append(methods.length).append(" methods:\n"); - for (int i = 0; i < methods.length; i++) { - buf.append("\t").append(methods[i]).append('\n'); - } - } - return buf.toString(); - } - - private static final String indent(Object obj) { - StringTokenizer tok = new StringTokenizer(obj.toString(), "\n"); - StringBuffer buf = new StringBuffer(); - while (tok.hasMoreTokens()) { - buf.append("\t").append(tok.nextToken()).append("\n"); - } - return buf.toString(); - } - - /** - * @return deep copy of this class - */ - public JavaClass copy() { - JavaClass c = null; - try { - c = (JavaClass) clone(); - c.constant_pool = constant_pool.copy(); - c.interfaces = interfaces.clone(); - c.interface_names = interface_names.clone(); - c.fields = new Field[fields.length]; - for (int i = 0; i < fields.length; i++) { - c.fields[i] = fields[i].copy(c.constant_pool); - } - c.methods = new Method[methods.length]; - for (int i = 0; i < methods.length; i++) { - c.methods[i] = methods[i].copy(c.constant_pool); - } - c.attributes = new Attribute[attributes.length]; - for (int i = 0; i < attributes.length; i++) { - c.attributes[i] = attributes[i].copy(c.constant_pool); - } - } catch (CloneNotSupportedException e) { - } - return c; - } - - public final boolean isSuper() { - return (access_flags & Constants.ACC_SUPER) != 0; - } - - public final boolean isClass() { - return (access_flags & Constants.ACC_INTERFACE) == 0; - } - - /** - * @return returns either HEAP (generated), FILE, or ZIP - */ - public final byte getSource() { - return source; - } - - /********************* New repository functionality *********************/ - /** - * Gets the ClassRepository which holds its definition. By default this is - * the same as SyntheticRepository.getInstance(); - */ - public org.apache.bcel.util.Repository getRepository() { - return repository; - } - - /** - * Sets the ClassRepository which loaded the JavaClass. Should be called - * immediately after parsing is done. - */ - public void setRepository(org.apache.bcel.util.Repository repository) { - this.repository = repository; - } - - /** - * Equivalent to runtime "instanceof" operator. - * - * @return true if this JavaClass is derived from the super class - * @throws ClassNotFoundException - * if superclasses or superinterfaces of this object can't be - * found - */ - public final boolean instanceOf(JavaClass super_class) - throws ClassNotFoundException { - if (this.equals(super_class)) { - return true; - } - JavaClass[] super_classes = getSuperClasses(); - for (int i = 0; i < super_classes.length; i++) { - if (super_classes[i].equals(super_class)) { - return true; - } - } - if (super_class.isInterface()) { - return implementationOf(super_class); - } - return false; - } - - /** - * @return true, if this class is an implementation of interface inter - * @throws ClassNotFoundException - * if superclasses or superinterfaces of this class can't be - * found - */ - public boolean implementationOf(JavaClass inter) - throws ClassNotFoundException { - if (!inter.isInterface()) { - throw new IllegalArgumentException(inter.getClassName() - + " is no interface"); - } - if (this.equals(inter)) { - return true; - } - JavaClass[] super_interfaces = getAllInterfaces(); - for (int i = 0; i < super_interfaces.length; i++) { - if (super_interfaces[i].equals(inter)) { - return true; - } - } - return false; - } - - /** - * @return the superclass for this JavaClass object, or null if this is - * java.lang.Object - * @throws ClassNotFoundException - * if the superclass can't be found - */ - public JavaClass getSuperClass() throws ClassNotFoundException { - if ("java.lang.Object".equals(getClassName())) { - return null; - } - return repository.loadClass(getSuperclassName()); - } - - /** - * @return list of super classes of this class in ascending order, i.e., - * java.lang.Object is always the last element - * @throws ClassNotFoundException - * if any of the superclasses can't be found - */ - public JavaClass[] getSuperClasses() throws ClassNotFoundException { - JavaClass clazz = this; - List allSuperClasses = new ArrayList(); - for (clazz = clazz.getSuperClass(); clazz != null; clazz = clazz - .getSuperClass()) { - allSuperClasses.add(clazz); - } - return allSuperClasses.toArray(new JavaClass[allSuperClasses.size()]); - } - - /** - * Get interfaces directly implemented by this JavaClass. - */ - public JavaClass[] getInterfaces() throws ClassNotFoundException { - String[] _interfaces = getInterfaceNames(); - JavaClass[] classes = new JavaClass[_interfaces.length]; - for (int i = 0; i < _interfaces.length; i++) { - classes[i] = repository.loadClass(_interfaces[i]); - } - return classes; - } - - /** - * Get all interfaces implemented by this JavaClass (transitively). - */ - public JavaClass[] getAllInterfaces() throws ClassNotFoundException { - ClassQueue queue = new ClassQueue(); - Set allInterfaces = new TreeSet(); - queue.enqueue(this); - while (!queue.empty()) { - JavaClass clazz = queue.dequeue(); - JavaClass souper = clazz.getSuperClass(); - JavaClass[] _interfaces = clazz.getInterfaces(); - if (clazz.isInterface()) { - allInterfaces.add(clazz); - } else { - if (souper != null) { - queue.enqueue(souper); - } - } - for (int i = 0; i < _interfaces.length; i++) { - queue.enqueue(_interfaces[i]); - } - } - return allInterfaces.toArray(new JavaClass[allInterfaces.size()]); - } - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - /** - * @param comparator - * Comparison strategy object - */ - public static void setComparator(BCELComparator comparator) { - _cmp = comparator; - } - - /** - * Return value as defined by given BCELComparator strategy. By default two - * JavaClass objects are said to be equal when their class names are equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - return _cmp.equals(this, obj); - } - - /** - * Return the natural ordering of two JavaClasses. This ordering is based on - * the class name - */ - @Override - public int compareTo(Object obj) { - return getClassName().compareTo(((JavaClass) obj).getClassName()); - } - - /** - * Return value as defined by given BCELComparator strategy. By default - * return the hashcode of the class name. - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - return _cmp.hashCode(this); - } -} diff --git a/src/org/apache/bcel/classfile/LineNumber.java b/src/org/apache/bcel/classfile/LineNumber.java deleted file mode 100644 index e9081b7..0000000 --- a/src/org/apache/bcel/classfile/LineNumber.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; - -/** - * This class represents a (PC offset, line number) pair, i.e., a line number in - * the source that corresponds to a relative address in the byte code. This is - * used for debugging purposes. - * - * @version $Id: LineNumber.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see LineNumberTable - */ -public final class LineNumber implements Cloneable, Node, Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int start_pc; // Program Counter (PC) corresponds to line - private int line_number; // number in source file - - /** - * Initialize from another object. - */ - public LineNumber(LineNumber c) { - this(c.getStartPC(), c.getLineNumber()); - } - - /** - * Construct object from file stream. - * - * @param file - * Input stream - * @throws IOException - */ - LineNumber(DataInputStream file) throws IOException { - this(file.readUnsignedShort(), file.readUnsignedShort()); - } - - /** - * @param start_pc - * Program Counter (PC) corresponds to - * @param line_number - * line number in source file - */ - public LineNumber(int start_pc, int line_number) { - this.start_pc = start_pc; - this.line_number = line_number; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitLineNumber(this); - } - - /** - * Dump line number/pc pair to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - public final void dump(DataOutputStream file) throws IOException { - file.writeShort(start_pc); - file.writeShort(line_number); - } - - /** - * @return Corresponding source line - */ - public final int getLineNumber() { - return line_number; - } - - /** - * @return PC in code - */ - public final int getStartPC() { - return start_pc; - } - - /** - * @param line_number - * the source line number - */ - public final void setLineNumber(int line_number) { - this.line_number = line_number; - } - - /** - * @param start_pc - * the pc for this line number - */ - public final void setStartPC(int start_pc) { - this.start_pc = start_pc; - } - - /** - * @return String representation - */ - @Override - public final String toString() { - return "LineNumber(" + start_pc + ", " + line_number + ")"; - } - - /** - * @return deep copy of this object - */ - public LineNumber copy() { - try { - return (LineNumber) clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } -} diff --git a/src/org/apache/bcel/classfile/LineNumberTable.java b/src/org/apache/bcel/classfile/LineNumberTable.java deleted file mode 100644 index da11faf..0000000 --- a/src/org/apache/bcel/classfile/LineNumberTable.java +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class represents a table of line numbers for debugging purposes. This - * attribute is used by the Code attribute. It contains pairs of PCs - * and line numbers. - * - * @version $Id: LineNumberTable.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Code - * @see LineNumber - */ -public final class LineNumberTable extends Attribute { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int line_number_table_length; - private LineNumber[] line_number_table; // Table of line/numbers pairs - - /* - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use copy() for a physical copy. - */ - public LineNumberTable(LineNumberTable c) { - this(c.getNameIndex(), c.getLength(), c.getLineNumberTable(), c - .getConstantPool()); - } - - /* - * @param name_index Index of name - * - * @param length Content length in bytes - * - * @param line_number_table Table of line/numbers pairs - * - * @param constant_pool Array of constants - */ - public LineNumberTable(int name_index, int length, - LineNumber[] line_number_table, ConstantPool constant_pool) { - super(Constants.ATTR_LINE_NUMBER_TABLE, name_index, length, - constant_pool); - setLineNumberTable(line_number_table); - } - - /** - * Construct object from file stream. - * - * @param name_index - * Index of name - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - * @throws IOException - */ - LineNumberTable(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - this(name_index, length, (LineNumber[]) null, constant_pool); - line_number_table_length = (file.readUnsignedShort()); - line_number_table = new LineNumber[line_number_table_length]; - for (int i = 0; i < line_number_table_length; i++) { - line_number_table[i] = new LineNumber(file); - } - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitLineNumberTable(this); - } - - /** - * Dump line number table attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - file.writeShort(line_number_table_length); - for (int i = 0; i < line_number_table_length; i++) { - line_number_table[i].dump(file); - } - } - - /** - * @return Array of (pc offset, line number) pairs. - */ - public final LineNumber[] getLineNumberTable() { - return line_number_table; - } - - /** - * @param line_number_table - * the line number entries for this table - */ - public final void setLineNumberTable(LineNumber[] line_number_table) { - this.line_number_table = line_number_table; - line_number_table_length = (line_number_table == null) ? 0 - : line_number_table.length; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - StringBuffer buf = new StringBuffer(); - StringBuffer line = new StringBuffer(); - String newLine = System.getProperty("line.separator", "\n"); - for (int i = 0; i < line_number_table_length; i++) { - line.append(line_number_table[i].toString()); - if (i < line_number_table_length - 1) { - line.append(", "); - } - if (line.length() > 72) { - line.append(newLine); - buf.append(line.toString()); - line.setLength(0); - } - } - buf.append(line); - return buf.toString(); - } - - /** - * Map byte code positions to source code lines. - * - * @param pos - * byte code offset - * @return corresponding line in source code - */ - public int getSourceLine(int pos) { - int l = 0, r = line_number_table_length - 1; - if (r < 0) { - return -1; - } - int min_index = -1, min = -1; - /* - * Do a binary search since the array is ordered. - */ - do { - int i = (l + r) / 2; - int j = line_number_table[i].getStartPC(); - if (j == pos) { - return line_number_table[i].getLineNumber(); - } else if (pos < j) { - r = i - 1; - } else { - l = i + 1; - } - /* - * If exact match can't be found (which is the most common case) - * return the line number that corresponds to the greatest index - * less than pos. - */ - if (j < pos && j > min) { - min = j; - min_index = i; - } - } while (l <= r); - /* - * It's possible that we did not find any valid entry for the bytecode - * offset we were looking for. - */ - if (min_index < 0) { - return -1; - } - return line_number_table[min_index].getLineNumber(); - } - - /** - * @return deep copy of this attribute - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - LineNumberTable c = (LineNumberTable) clone(); - c.line_number_table = new LineNumber[line_number_table_length]; - for (int i = 0; i < line_number_table_length; i++) { - c.line_number_table[i] = line_number_table[i].copy(); - } - c.constant_pool = _constant_pool; - return c; - } - - public final int getTableLength() { - return line_number_table_length; - } -} diff --git a/src/org/apache/bcel/classfile/LocalVariable.java b/src/org/apache/bcel/classfile/LocalVariable.java deleted file mode 100644 index 2f5cb16..0000000 --- a/src/org/apache/bcel/classfile/LocalVariable.java +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; -import org.apache.bcel.Constants; - -/** - * This class represents a local variable within a method. It contains its - * scope, name, signature and index on the method's frame. - * - * @version $Id: LocalVariable.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see LocalVariableTable - */ -public final class LocalVariable implements Constants, Cloneable, Node, - Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int start_pc; // Range in which the variable is valid - private int length; - private int name_index; // Index in constant pool of variable name - private int signature_index; // Index of variable signature - private int index; /* - * Variable is `index'th local variable on this method's - * frame. - */ - private ConstantPool constant_pool; - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use copy() for a physical copy. - */ - public LocalVariable(LocalVariable c) { - this(c.getStartPC(), c.getLength(), c.getNameIndex(), c - .getSignatureIndex(), c.getIndex(), c.getConstantPool()); - } - - /** - * Construct object from file stream. - * - * @param file - * Input stream - * @throws IOException - */ - LocalVariable(DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(file.readUnsignedShort(), file.readUnsignedShort(), file - .readUnsignedShort(), file.readUnsignedShort(), file - .readUnsignedShort(), constant_pool); - } - - /** - * @param start_pc - * Range in which the variable - * @param length - * ... is valid - * @param name_index - * Index in constant pool of variable name - * @param signature_index - * Index of variable's signature - * @param index - * Variable is `index'th local variable on the method's frame - * @param constant_pool - * Array of constants - */ - public LocalVariable(int start_pc, int length, int name_index, - int signature_index, int index, ConstantPool constant_pool) { - this.start_pc = start_pc; - this.length = length; - this.name_index = name_index; - this.signature_index = signature_index; - this.index = index; - this.constant_pool = constant_pool; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitLocalVariable(this); - } - - /** - * Dump local variable to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - public final void dump(DataOutputStream file) throws IOException { - file.writeShort(start_pc); - file.writeShort(length); - file.writeShort(name_index); - file.writeShort(signature_index); - file.writeShort(index); - } - - /** - * @return Constant pool used by this object. - */ - public final ConstantPool getConstantPool() { - return constant_pool; - } - - /** - * @return Variable is valid within getStartPC() .. getStartPC()+getLength() - */ - public final int getLength() { - return length; - } - - /** - * @return Variable name. - */ - public final String getName() { - ConstantUtf8 c; - c = (ConstantUtf8) constant_pool.getConstant(name_index, CONSTANT_Utf8); - return c.getBytes(); - } - - /** - * @return Index in constant pool of variable name. - */ - public final int getNameIndex() { - return name_index; - } - - /** - * @return Signature. - */ - public final String getSignature() { - ConstantUtf8 c; - c = (ConstantUtf8) constant_pool.getConstant(signature_index, - CONSTANT_Utf8); - return c.getBytes(); - } - - /** - * @return Index in constant pool of variable signature. - */ - public final int getSignatureIndex() { - return signature_index; - } - - /** - * @return index of register where variable is stored - */ - public final int getIndex() { - return index; - } - - /** - * @return Start of range where he variable is valid - */ - public final int getStartPC() { - return start_pc; - } - - /** - * @param constant_pool - * Constant pool to be used for this object. - */ - public final void setConstantPool(ConstantPool constant_pool) { - this.constant_pool = constant_pool; - } - - /** - * @param length - * the length of this local variable - */ - public final void setLength(int length) { - this.length = length; - } - - /** - * @param name_index - * the index into the constant pool for the name of this variable - */ - public final void setNameIndex(int name_index) { - this.name_index = name_index; - } - - /** - * @param signature_index - * the index into the constant pool for the signature of this - * variable - */ - public final void setSignatureIndex(int signature_index) { - this.signature_index = signature_index; - } - - /** - * @param index - * the index in the local variable table of this variable - */ - public final void setIndex(int index) { - this.index = index; - } - - /** - * @param start_pc - * Specify range where the local variable is valid. - */ - public final void setStartPC(int start_pc) { - this.start_pc = start_pc; - } - - /** - * @return string representation. - */ - @Override - public final String toString() { - String name = getName(), signature = Utility - .signatureToString(getSignature()); - return "LocalVariable(start_pc = " + start_pc + ", length = " + length - + ", index = " + index + ":" + signature + " " + name + ")"; - } - - /** - * @return deep copy of this object - */ - public LocalVariable copy() { - try { - return (LocalVariable) clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } -} diff --git a/src/org/apache/bcel/classfile/LocalVariableTable.java b/src/org/apache/bcel/classfile/LocalVariableTable.java deleted file mode 100644 index 1211614..0000000 --- a/src/org/apache/bcel/classfile/LocalVariableTable.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class represents colection of local variables in a method. This - * attribute is contained in the Code attribute. - * - * @version $Id: LocalVariableTable.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Code - * @see LocalVariable - */ -public class LocalVariableTable extends Attribute { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int local_variable_table_length; // Table of local - private LocalVariable[] local_variable_table; // variables - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use copy() for a physical copy. - */ - public LocalVariableTable(LocalVariableTable c) { - this(c.getNameIndex(), c.getLength(), c.getLocalVariableTable(), c - .getConstantPool()); - } - - /** - * @param name_index - * Index in constant pool to `LocalVariableTable' - * @param length - * Content length in bytes - * @param local_variable_table - * Table of local variables - * @param constant_pool - * Array of constants - */ - public LocalVariableTable(int name_index, int length, - LocalVariable[] local_variable_table, ConstantPool constant_pool) { - super(Constants.ATTR_LOCAL_VARIABLE_TABLE, name_index, length, - constant_pool); - setLocalVariableTable(local_variable_table); - } - - /** - * Construct object from file stream. - * - * @param name_index - * Index in constant pool - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - * @throws IOException - */ - LocalVariableTable(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - this(name_index, length, (LocalVariable[]) null, constant_pool); - local_variable_table_length = (file.readUnsignedShort()); - local_variable_table = new LocalVariable[local_variable_table_length]; - for (int i = 0; i < local_variable_table_length; i++) { - local_variable_table[i] = new LocalVariable(file, constant_pool); - } - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitLocalVariableTable(this); - } - - /** - * Dump local variable table attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - file.writeShort(local_variable_table_length); - for (int i = 0; i < local_variable_table_length; i++) { - local_variable_table[i].dump(file); - } - } - - /** - * @return Array of local variables of method. - */ - public final LocalVariable[] getLocalVariableTable() { - return local_variable_table; - } - - /** - * @return first matching variable using index - * - * @param index - * the variable slot - * - * @return the first LocalVariable that matches the slot or null if not - * found - * - */ - public final LocalVariable getLocalVariable(int index) { - for (int i = 0; i < local_variable_table_length; i++) { - if (local_variable_table[i].getIndex() == index) { - return local_variable_table[i]; - } - } - return null; - } - - /** - * @return matching variable using index when variable is used at supplied - * pc - * - * @param index - * the variable slot - * @param pc - * the current pc that this variable is alive - * - * @return the LocalVariable that matches or null if not found - */ - public final LocalVariable getLocalVariable(int index, int pc) { - for (int i = 0; i < local_variable_table_length; i++) { - if (local_variable_table[i].getIndex() == index) { - int start_pc = local_variable_table[i].getStartPC(); - int end_pc = start_pc + local_variable_table[i].getLength(); - if ((pc >= start_pc) && (pc < end_pc)) { - return local_variable_table[i]; - } - } - } - return null; - } - - public final void setLocalVariableTable(LocalVariable[] local_variable_table) { - this.local_variable_table = local_variable_table; - local_variable_table_length = (local_variable_table == null) ? 0 - : local_variable_table.length; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - StringBuffer buf = new StringBuffer(""); - for (int i = 0; i < local_variable_table_length; i++) { - buf.append(local_variable_table[i].toString()); - if (i < local_variable_table_length - 1) { - buf.append('\n'); - } - } - return buf.toString(); - } - - /** - * @return deep copy of this attribute - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - LocalVariableTable c = (LocalVariableTable) clone(); - c.local_variable_table = new LocalVariable[local_variable_table_length]; - for (int i = 0; i < local_variable_table_length; i++) { - c.local_variable_table[i] = local_variable_table[i].copy(); - } - c.constant_pool = _constant_pool; - return c; - } - - public final int getTableLength() { - return local_variable_table_length; - } -} diff --git a/src/org/apache/bcel/classfile/Method.java b/src/org/apache/bcel/classfile/Method.java deleted file mode 100644 index 7dfc57b..0000000 --- a/src/org/apache/bcel/classfile/Method.java +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.IOException; -import org.apache.bcel.Constants; -import org.apache.bcel.generic.Type; -import org.apache.bcel.util.BCELComparator; - -/** - * This class represents the method info structure, i.e., the representation for - * a method in the class. See JVM specification for details. A method has access - * flags, a name, a signature and a number of attributes. - * - * @version $Id: Method.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class Method extends FieldOrMethod { - - /** - * - */ - private static final long serialVersionUID = 1L; - private static BCELComparator _cmp = new BCELComparator() { - - @Override - public boolean equals(Object o1, Object o2) { - Method THIS = (Method) o1; - Method THAT = (Method) o2; - return THIS.getName().equals(THAT.getName()) - && THIS.getSignature().equals(THAT.getSignature()); - } - - @Override - public int hashCode(Object o) { - Method THIS = (Method) o; - return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); - } - }; - - /** - * Empty constructor, all attributes have to be defined via `setXXX' - * methods. Use at your own risk. - */ - public Method() { - } - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public Method(Method c) { - super(c); - } - - /** - * Construct object from file stream. - * - * @param file - * Input stream - * @throws IOException - * @throws ClassFormatException - */ - Method(DataInputStream file, ConstantPool constant_pool) - throws IOException, ClassFormatException { - super(file, constant_pool); - } - - /** - * @param access_flags - * Access rights of method - * @param name_index - * Points to field name in constant pool - * @param signature_index - * Points to encoded signature - * @param attributes - * Collection of attributes - * @param constant_pool - * Array of constants - */ - public Method(int access_flags, int name_index, int signature_index, - Attribute[] attributes, ConstantPool constant_pool) { - super(access_flags, name_index, signature_index, attributes, - constant_pool); - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitMethod(this); - } - - /** - * @return Code attribute of method, if any - */ - public final Code getCode() { - for (int i = 0; i < attributes_count; i++) { - if (attributes[i] instanceof Code) { - return (Code) attributes[i]; - } - } - return null; - } - - /** - * @return ExceptionTable attribute of method, if any, i.e., list all - * exceptions the method may throw not exception handlers! - */ - public final ExceptionTable getExceptionTable() { - for (int i = 0; i < attributes_count; i++) { - if (attributes[i] instanceof ExceptionTable) { - return (ExceptionTable) attributes[i]; - } - } - return null; - } - - /** - * @return LocalVariableTable of code attribute if any, i.e. the call is - * forwarded to the Code atribute. - */ - public final LocalVariableTable getLocalVariableTable() { - Code code = getCode(); - if (code == null) { - return null; - } - return code.getLocalVariableTable(); - } - - /** - * @return LineNumberTable of code attribute if any, i.e. the call is - * forwarded to the Code atribute. - */ - public final LineNumberTable getLineNumberTable() { - Code code = getCode(); - if (code == null) { - return null; - } - return code.getLineNumberTable(); - } - - /** - * Return string representation close to declaration format, `public static - * void main(String[] args) throws IOException', e.g. - * - * @return String representation of the method. - */ - @Override - public final String toString() { - ConstantUtf8 c; - String name, signature, access; // Short cuts to constant pool - StringBuffer buf; - access = Utility.accessToString(access_flags); - // Get name and signature from constant pool - c = (ConstantUtf8) constant_pool.getConstant(signature_index, - Constants.CONSTANT_Utf8); - signature = c.getBytes(); - c = (ConstantUtf8) constant_pool.getConstant(name_index, - Constants.CONSTANT_Utf8); - name = c.getBytes(); - signature = Utility.methodSignatureToString(signature, name, access, - true, getLocalVariableTable()); - buf = new StringBuffer(signature); - for (int i = 0; i < attributes_count; i++) { - Attribute a = attributes[i]; - if (!((a instanceof Code) || (a instanceof ExceptionTable))) { - buf.append(" [").append(a.toString()).append("]"); - } - } - ExceptionTable e = getExceptionTable(); - if (e != null) { - String str = e.toString(); - if (!str.equals("")) { - buf.append("\n\t\tthrows ").append(str); - } - } - return buf.toString(); - } - - /** - * @return deep copy of this method - */ - public final Method copy(ConstantPool _constant_pool) { - return (Method) copy_(_constant_pool); - } - - /** - * @return return type of method - */ - public Type getReturnType() { - return Type.getReturnType(getSignature()); - } - - /** - * @return array of method argument types - */ - public Type[] getArgumentTypes() { - return Type.getArgumentTypes(getSignature()); - } - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - /** - * @param comparator - * Comparison strategy object - */ - public static void setComparator(BCELComparator comparator) { - _cmp = comparator; - } - - /** - * Return value as defined by given BCELComparator strategy. By default two - * method objects are said to be equal when their names and signatures are - * equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - return _cmp.equals(this, obj); - } - - /** - * Return value as defined by given BCELComparator strategy. By default - * return the hashcode of the method's name XOR signature. - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - return _cmp.hashCode(this); - } -} diff --git a/src/org/apache/bcel/classfile/Node.java b/src/org/apache/bcel/classfile/Node.java deleted file mode 100644 index 0c4f63d..0000000 --- a/src/org/apache/bcel/classfile/Node.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -/** - * Denote class to have an accept method(); - * - * @version $Id: Node.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface Node { - - public void accept(Visitor obj); -} diff --git a/src/org/apache/bcel/classfile/PMGClass.java b/src/org/apache/bcel/classfile/PMGClass.java deleted file mode 100644 index 5fcb92f..0000000 --- a/src/org/apache/bcel/classfile/PMGClass.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from Attribute and represents a reference to a - * PMG attribute. - * - * @version $Id: PMGClass.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class PMGClass extends Attribute { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int pmg_class_index, pmg_index; - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public PMGClass(PMGClass c) { - this(c.getNameIndex(), c.getLength(), c.getPMGIndex(), c - .getPMGClassIndex(), c.getConstantPool()); - } - - /** - * Construct object from file stream. - * - * @param name_index - * Index in constant pool to CONSTANT_Utf8 - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - * @throws IOException - */ - PMGClass(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - this(name_index, length, file.readUnsignedShort(), file - .readUnsignedShort(), constant_pool); - } - - /** - * @param name_index - * Index in constant pool to CONSTANT_Utf8 - * @param length - * Content length in bytes - * @param pmg_index - * index in constant pool for source file name - * @param pmg_class_index - * Index in constant pool to CONSTANT_Utf8 - * @param constant_pool - * Array of constants - */ - public PMGClass(int name_index, int length, int pmg_index, - int pmg_class_index, ConstantPool constant_pool) { - super(Constants.ATTR_PMG, name_index, length, constant_pool); - this.pmg_index = pmg_index; - this.pmg_class_index = pmg_class_index; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - System.err.println("Visiting non-standard PMGClass object"); - } - - /** - * Dump source file attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - file.writeShort(pmg_index); - file.writeShort(pmg_class_index); - } - - /** - * @return Index in constant pool of source file name. - */ - public final int getPMGClassIndex() { - return pmg_class_index; - } - - /** - * @param pmg_class_index - */ - public final void setPMGClassIndex(int pmg_class_index) { - this.pmg_class_index = pmg_class_index; - } - - /** - * @return Index in constant pool of source file name. - */ - public final int getPMGIndex() { - return pmg_index; - } - - /** - * @param pmg_index - */ - public final void setPMGIndex(int pmg_index) { - this.pmg_index = pmg_index; - } - - /** - * @return PMG name. - */ - public final String getPMGName() { - ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant(pmg_index, - Constants.CONSTANT_Utf8); - return c.getBytes(); - } - - /** - * @return PMG class name. - */ - public final String getPMGClassName() { - ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant( - pmg_class_index, Constants.CONSTANT_Utf8); - return c.getBytes(); - } - - /** - * @return String representation - */ - @Override - public final String toString() { - return "PMGClass(" + getPMGName() + ", " + getPMGClassName() + ")"; - } - - /** - * @return deep copy of this attribute - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - return (PMGClass) clone(); - } -} diff --git a/src/org/apache/bcel/classfile/Signature.java b/src/org/apache/bcel/classfile/Signature.java deleted file mode 100644 index 602aff5..0000000 --- a/src/org/apache/bcel/classfile/Signature.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from Attribute and represents a reference to a - * GJ attribute. - * - * @version $Id: Signature.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class Signature extends Attribute { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int signature_index; - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public Signature(Signature c) { - this(c.getNameIndex(), c.getLength(), c.getSignatureIndex(), c - .getConstantPool()); - } - - /** - * Construct object from file stream. - * - * @param name_index - * Index in constant pool to CONSTANT_Utf8 - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - * @throws IOException - */ - Signature(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - this(name_index, length, file.readUnsignedShort(), constant_pool); - } - - /** - * @param name_index - * Index in constant pool to CONSTANT_Utf8 - * @param length - * Content length in bytes - * @param signature_index - * Index in constant pool to CONSTANT_Utf8 - * @param constant_pool - * Array of constants - */ - public Signature(int name_index, int length, int signature_index, - ConstantPool constant_pool) { - super(Constants.ATTR_SIGNATURE, name_index, length, constant_pool); - this.signature_index = signature_index; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - // System.err.println("Visiting non-standard Signature object"); - v.visitSignature(this); - } - - /** - * Dump source file attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - file.writeShort(signature_index); - } - - /** - * @return Index in constant pool of source file name. - */ - public final int getSignatureIndex() { - return signature_index; - } - - /** - * @param signature_index - * the index info the constant pool of this signature - */ - public final void setSignatureIndex(int signature_index) { - this.signature_index = signature_index; - } - - /** - * @return GJ signature. - */ - public final String getSignature() { - ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant( - signature_index, Constants.CONSTANT_Utf8); - return c.getBytes(); - } - - /** - * Extends ByteArrayInputStream to make 'unreading' chars possible. - */ - private static final class MyByteArrayInputStream extends - ByteArrayInputStream { - - MyByteArrayInputStream(String data) { - super(data.getBytes()); - } - - final String getData() { - return new String(buf); - } - - final void unread() { - if (pos > 0) { - pos--; - } - } - } - - private static boolean identStart(int ch) { - return ch == 'T' || ch == 'L'; - } - - private static final void matchIdent(MyByteArrayInputStream in, - StringBuffer buf) { - int ch; - if ((ch = in.read()) == -1) { - throw new RuntimeException("Illegal signature: " + in.getData() - + " no ident, reaching EOF"); - } - // System.out.println("return from ident:" + (char)ch); - if (!identStart(ch)) { - StringBuffer buf2 = new StringBuffer(); - int count = 1; - while (Character.isJavaIdentifierPart((char) ch)) { - buf2.append((char) ch); - count++; - ch = in.read(); - } - if (ch == ':') { // Ok, formal parameter - in.skip("Ljava/lang/Object".length()); - buf.append(buf2); - ch = in.read(); - in.unread(); - // System.out.println("so far:" + buf2 + ":next:" +(char)ch); - } else { - for (int i = 0; i < count; i++) { - in.unread(); - } - } - return; - } - StringBuffer buf2 = new StringBuffer(); - ch = in.read(); - do { - buf2.append((char) ch); - ch = in.read(); - // System.out.println("within ident:"+ (char)ch); - } while ((ch != -1) - && (Character.isJavaIdentifierPart((char) ch) || (ch == '/'))); - buf.append(buf2.toString().replace('/', '.')); - // System.out.println("regular return ident:"+ (char)ch + ":" + buf2); - if (ch != -1) { - in.unread(); - } - } - - private static final void matchGJIdent(MyByteArrayInputStream in, - StringBuffer buf) { - int ch; - matchIdent(in, buf); - ch = in.read(); - if ((ch == '<') || ch == '(') { // Parameterized or method - // System.out.println("Enter <"); - buf.append((char) ch); - matchGJIdent(in, buf); - while (((ch = in.read()) != '>') && (ch != ')')) { // List of - // parameters - if (ch == -1) { - throw new RuntimeException("Illegal signature: " - + in.getData() + " reaching EOF"); - } - // System.out.println("Still no >"); - buf.append(", "); - in.unread(); - matchGJIdent(in, buf); // Recursive call - } - // System.out.println("Exit >"); - buf.append((char) ch); - } else { - in.unread(); - } - ch = in.read(); - if (identStart(ch)) { - in.unread(); - matchGJIdent(in, buf); - } else if (ch == ')') { - in.unread(); - return; - } else if (ch != ';') { - throw new RuntimeException("Illegal signature: " + in.getData() - + " read " + (char) ch); - } - } - - public static String translate(String s) { - // System.out.println("Sig:" + s); - StringBuffer buf = new StringBuffer(); - matchGJIdent(new MyByteArrayInputStream(s), buf); - return buf.toString(); - } - - public static final boolean isFormalParameterList(String s) { - return s.startsWith("<") && (s.indexOf(':') > 0); - } - - public static final boolean isActualParameterList(String s) { - return s.startsWith("L") && s.endsWith(">;"); - } - - /** - * @return String representation - */ - @Override - public final String toString() { - String s = getSignature(); - return "Signature(" + s + ")"; - } - - /** - * @return deep copy of this attribute - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - return (Signature) clone(); - } -} diff --git a/src/org/apache/bcel/classfile/SourceFile.java b/src/org/apache/bcel/classfile/SourceFile.java deleted file mode 100644 index 9f98400..0000000 --- a/src/org/apache/bcel/classfile/SourceFile.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from Attribute and represents a reference to - * the source file of this class. At most one SourceFile attribute should appear - * per classfile. The intention of this class is that it is instantiated from - * the Attribute.readAttribute() method. - * - * @version $Id: SourceFile.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class SourceFile extends Attribute { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int sourcefile_index; - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public SourceFile(SourceFile c) { - this(c.getNameIndex(), c.getLength(), c.getSourceFileIndex(), c - .getConstantPool()); - } - - /** - * Construct object from file stream. - * - * @param name_index - * Index in constant pool to CONSTANT_Utf8 - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - * @throws IOException - */ - SourceFile(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - this(name_index, length, file.readUnsignedShort(), constant_pool); - } - - /** - * @param name_index - * Index in constant pool to CONSTANT_Utf8, which should - * represent the string "SourceFile". - * @param length - * Content length in bytes, the value should be 2. - * @param constant_pool - * The constant pool that this attribute is associated with. - * @param sourcefile_index - * Index in constant pool to CONSTANT_Utf8. This string will be - * interpreted as the name of the file from which this class was - * compiled. It will not be interpreted as indicating the name of - * the directory contqining the file or an absolute path; this - * information has to be supplied the consumer of this attribute - * - in many cases, the JVM. - */ - public SourceFile(int name_index, int length, int sourcefile_index, - ConstantPool constant_pool) { - super(Constants.ATTR_SOURCE_FILE, name_index, length, constant_pool); - this.sourcefile_index = sourcefile_index; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitSourceFile(this); - } - - /** - * Dump source file attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - file.writeShort(sourcefile_index); - } - - /** - * @return Index in constant pool of source file name. - */ - public final int getSourceFileIndex() { - return sourcefile_index; - } - - /** - * @param sourcefile_index - */ - public final void setSourceFileIndex(int sourcefile_index) { - this.sourcefile_index = sourcefile_index; - } - - /** - * @return Source file name. - */ - public final String getSourceFileName() { - ConstantUtf8 c = (ConstantUtf8) constant_pool.getConstant( - sourcefile_index, Constants.CONSTANT_Utf8); - return c.getBytes(); - } - - /** - * @return String representation - */ - @Override - public final String toString() { - return "SourceFile(" + getSourceFileName() + ")"; - } - - /** - * @return deep copy of this attribute - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - return (SourceFile) clone(); - } -} diff --git a/src/org/apache/bcel/classfile/StackMap.java b/src/org/apache/bcel/classfile/StackMap.java deleted file mode 100644 index 0daa12f..0000000 --- a/src/org/apache/bcel/classfile/StackMap.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class represents a stack map attribute used for preverification of Java - * classes for the Java 2 Micro Edition - * (J2ME). This attribute is used by the KVM and contained within the - * Code attribute of a method. See CLDC specification 5.3.1.2 - * - * @version $Id: StackMap.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Code - * @see StackMapEntry - * @see StackMapType - */ -public final class StackMap extends Attribute implements Node { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int map_length; - private StackMapEntry[] map; // Table of stack map entries - - /* - * @param name_index Index of name - * - * @param length Content length in bytes - * - * @param map Table of stack map entries - * - * @param constant_pool Array of constants - */ - public StackMap(int name_index, int length, StackMapEntry[] map, - ConstantPool constant_pool) { - super(Constants.ATTR_STACK_MAP, name_index, length, constant_pool); - setStackMap(map); - } - - /** - * Construct object from file stream. - * - * @param name_index - * Index of name - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - * @throws IOException - */ - StackMap(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - this(name_index, length, (StackMapEntry[]) null, constant_pool); - map_length = file.readUnsignedShort(); - map = new StackMapEntry[map_length]; - for (int i = 0; i < map_length; i++) { - map[i] = new StackMapEntry(file, constant_pool); - } - } - - /** - * Dump line number table attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - file.writeShort(map_length); - for (int i = 0; i < map_length; i++) { - map[i].dump(file); - } - } - - /** - * @return Array of stack map entries - */ - public final StackMapEntry[] getStackMap() { - return map; - } - - /** - * @param map - * Array of stack map entries - */ - public final void setStackMap(StackMapEntry[] map) { - this.map = map; - map_length = (map == null) ? 0 : map.length; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - StringBuffer buf = new StringBuffer("StackMap("); - for (int i = 0; i < map_length; i++) { - buf.append(map[i].toString()); - if (i < map_length - 1) { - buf.append(", "); - } - } - buf.append(')'); - return buf.toString(); - } - - /** - * @return deep copy of this attribute - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - StackMap c = (StackMap) clone(); - c.map = new StackMapEntry[map_length]; - for (int i = 0; i < map_length; i++) { - c.map[i] = map[i].copy(); - } - c.constant_pool = _constant_pool; - return c; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackMap(this); - } - - public final int getMapLength() { - return map_length; - } -} diff --git a/src/org/apache/bcel/classfile/StackMapEntry.java b/src/org/apache/bcel/classfile/StackMapEntry.java deleted file mode 100644 index 61df151..0000000 --- a/src/org/apache/bcel/classfile/StackMapEntry.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -/** - * This class represents a stack map entry recording the types of local - * variables and the the of stack items at a given byte code offset. See CLDC - * specification 5.3.1.2 - * - * @version $Id: StackMapEntry.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see StackMap - * @see StackMapType - */ -public final class StackMapEntry implements Cloneable { - - private int byte_code_offset; - private int number_of_locals; - private StackMapType[] types_of_locals; - private int number_of_stack_items; - private StackMapType[] types_of_stack_items; - private ConstantPool constant_pool; - - /** - * Construct object from file stream. - * - * @param file - * Input stream - * @throws IOException - */ - StackMapEntry(DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(file.readShort(), file.readShort(), null, -1, null, constant_pool); - types_of_locals = new StackMapType[number_of_locals]; - for (int i = 0; i < number_of_locals; i++) { - types_of_locals[i] = new StackMapType(file, constant_pool); - } - number_of_stack_items = file.readShort(); - types_of_stack_items = new StackMapType[number_of_stack_items]; - for (int i = 0; i < number_of_stack_items; i++) { - types_of_stack_items[i] = new StackMapType(file, constant_pool); - } - } - - public StackMapEntry(int byte_code_offset, int number_of_locals, - StackMapType[] types_of_locals, int number_of_stack_items, - StackMapType[] types_of_stack_items, ConstantPool constant_pool) { - this.byte_code_offset = byte_code_offset; - this.number_of_locals = number_of_locals; - this.types_of_locals = types_of_locals; - this.number_of_stack_items = number_of_stack_items; - this.types_of_stack_items = types_of_stack_items; - this.constant_pool = constant_pool; - } - - /** - * Dump stack map entry - * - * @param file - * Output file stream - * @throws IOException - */ - public final void dump(DataOutputStream file) throws IOException { - file.writeShort(byte_code_offset); - file.writeShort(number_of_locals); - for (int i = 0; i < number_of_locals; i++) { - types_of_locals[i].dump(file); - } - file.writeShort(number_of_stack_items); - for (int i = 0; i < number_of_stack_items; i++) { - types_of_stack_items[i].dump(file); - } - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - StringBuffer buf = new StringBuffer(64); - buf.append("(offset=").append(byte_code_offset); - if (number_of_locals > 0) { - buf.append(", locals={"); - for (int i = 0; i < number_of_locals; i++) { - buf.append(types_of_locals[i]); - if (i < number_of_locals - 1) { - buf.append(", "); - } - } - buf.append("}"); - } - if (number_of_stack_items > 0) { - buf.append(", stack items={"); - for (int i = 0; i < number_of_stack_items; i++) { - buf.append(types_of_stack_items[i]); - if (i < number_of_stack_items - 1) { - buf.append(", "); - } - } - buf.append("}"); - } - buf.append(")"); - return buf.toString(); - } - - public void setByteCodeOffset(int b) { - byte_code_offset = b; - } - - public int getByteCodeOffset() { - return byte_code_offset; - } - - public void setNumberOfLocals(int n) { - number_of_locals = n; - } - - public int getNumberOfLocals() { - return number_of_locals; - } - - public void setTypesOfLocals(StackMapType[] t) { - types_of_locals = t; - } - - public StackMapType[] getTypesOfLocals() { - return types_of_locals; - } - - public void setNumberOfStackItems(int n) { - number_of_stack_items = n; - } - - public int getNumberOfStackItems() { - return number_of_stack_items; - } - - public void setTypesOfStackItems(StackMapType[] t) { - types_of_stack_items = t; - } - - public StackMapType[] getTypesOfStackItems() { - return types_of_stack_items; - } - - /** - * @return deep copy of this object - */ - public StackMapEntry copy() { - try { - return (StackMapEntry) clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - public void accept(Visitor v) { - v.visitStackMapEntry(this); - } - - /** - * @return Constant pool used by this object. - */ - public final ConstantPool getConstantPool() { - return constant_pool; - } - - /** - * @param constant_pool - * Constant pool to be used for this object. - */ - public final void setConstantPool(ConstantPool constant_pool) { - this.constant_pool = constant_pool; - } -} diff --git a/src/org/apache/bcel/classfile/StackMapType.java b/src/org/apache/bcel/classfile/StackMapType.java deleted file mode 100644 index 1276b4f..0000000 --- a/src/org/apache/bcel/classfile/StackMapType.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class represents the type of a local variable or item on stack used in - * the StackMap entries. - * - * @version $Id: StackMapType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see StackMapEntry - * @see StackMap - * @see Constants - */ -public final class StackMapType implements Cloneable { - - private byte type; - private int index = -1; // Index to CONSTANT_Class or offset - private ConstantPool constant_pool; - - /** - * Construct object from file stream. - * - * @param file - * Input stream - * @throws IOException - */ - StackMapType(DataInputStream file, ConstantPool constant_pool) - throws IOException { - this(file.readByte(), -1, constant_pool); - if (hasIndex()) { - setIndex(file.readShort()); - } - setConstantPool(constant_pool); - } - - /** - * @param type - * type tag as defined in the Constants interface - * @param index - * index to constant pool, or byte code offset - */ - public StackMapType(byte type, int index, ConstantPool constant_pool) { - setType(type); - setIndex(index); - setConstantPool(constant_pool); - } - - public void setType(byte t) { - if ((t < Constants.ITEM_Bogus) || (t > Constants.ITEM_NewObject)) { - throw new RuntimeException("Illegal type for StackMapType: " + t); - } - type = t; - } - - public byte getType() { - return type; - } - - public void setIndex(int t) { - index = t; - } - - /** - * @return index to constant pool if type == ITEM_Object, or offset in byte - * code, if type == ITEM_NewObject, and -1 otherwise - */ - public int getIndex() { - return index; - } - - /** - * Dump type entries to file. - * - * @param file - * Output file stream - * @throws IOException - */ - public final void dump(DataOutputStream file) throws IOException { - file.writeByte(type); - if (hasIndex()) { - file.writeShort(getIndex()); - } - } - - /** - * @return true, if type is either ITEM_Object or ITEM_NewObject - */ - public final boolean hasIndex() { - return ((type == Constants.ITEM_Object) || (type == Constants.ITEM_NewObject)); - } - - private String printIndex() { - if (type == Constants.ITEM_Object) { - if (index < 0) { - return ", class="; - } - return ", class=" - + constant_pool.constantToString(index, - Constants.CONSTANT_Class); - } else if (type == Constants.ITEM_NewObject) { - return ", offset=" + index; - } else { - return ""; - } - } - - /** - * @return String representation - */ - @Override - public final String toString() { - return "(type=" + Constants.ITEM_NAMES[type] + printIndex() + ")"; - } - - /** - * @return deep copy of this object - */ - public StackMapType copy() { - try { - return (StackMapType) clone(); - } catch (CloneNotSupportedException e) { - } - return null; - } - - /** - * @return Constant pool used by this object. - */ - public final ConstantPool getConstantPool() { - return constant_pool; - } - - /** - * @param constant_pool - * Constant pool to be used for this object. - */ - public final void setConstantPool(ConstantPool constant_pool) { - this.constant_pool = constant_pool; - } -} diff --git a/src/org/apache/bcel/classfile/Synthetic.java b/src/org/apache/bcel/classfile/Synthetic.java deleted file mode 100644 index 1f2c784..0000000 --- a/src/org/apache/bcel/classfile/Synthetic.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; - -/** - * This class is derived from Attribute and declares this class as - * `synthetic', i.e., it needs special handling. The JVM specification states "A - * class member that does not appear in the source code must be marked using a - * Synthetic attribute." It may appear in the ClassFile attribute table, a - * field_info table or a method_info table. This class is intended to be - * instantiated from the Attribute.readAttribute() method. - * - * @version $Id: Synthetic.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Attribute - */ -public final class Synthetic extends Attribute { - - /** - * - */ - private static final long serialVersionUID = 1L; - private byte[] bytes; - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use copy() for a physical copy. - */ - public Synthetic(Synthetic c) { - this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool()); - } - - /** - * @param name_index - * Index in constant pool to CONSTANT_Utf8, which should - * represent the string "Synthetic". - * @param length - * Content length in bytes - should be zero. - * @param bytes - * Attribute contents - * @param constant_pool - * The constant pool this attribute is associated with. - */ - public Synthetic(int name_index, int length, byte[] bytes, - ConstantPool constant_pool) { - super(Constants.ATTR_SYNTHETIC, name_index, length, constant_pool); - this.bytes = bytes; - } - - /** - * Construct object from file stream. - * - * @param name_index - * Index in constant pool to CONSTANT_Utf8 - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - * @throws IOException - */ - Synthetic(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - this(name_index, length, (byte[]) null, constant_pool); - if (length > 0) { - bytes = new byte[length]; - file.readFully(bytes); - System.err.println("Synthetic attribute with length > 0"); - } - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitSynthetic(this); - } - - /** - * Dump source file attribute to file stream in binary format. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - if (length > 0) { - file.write(bytes, 0, length); - } - } - - /** - * @return data bytes. - */ - public final byte[] getBytes() { - return bytes; - } - - /** - * @param bytes - */ - public final void setBytes(byte[] bytes) { - this.bytes = bytes; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - StringBuffer buf = new StringBuffer("Synthetic"); - if (length > 0) { - buf.append(" ").append(Utility.toHexString(bytes)); - } - return buf.toString(); - } - - /** - * @return deep copy of this attribute - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - Synthetic c = (Synthetic) clone(); - if (bytes != null) { - c.bytes = new byte[bytes.length]; - System.arraycopy(bytes, 0, c.bytes, 0, bytes.length); - } - c.constant_pool = _constant_pool; - return c; - } -} diff --git a/src/org/apache/bcel/classfile/Unknown.java b/src/org/apache/bcel/classfile/Unknown.java deleted file mode 100644 index d4ce2f4..0000000 --- a/src/org/apache/bcel/classfile/Unknown.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.apache.bcel.Constants; - -/** - * This class represents a reference to an unknown (i.e., application-specific) - * attribute of a class. It is instantiated from the - * Attribute.readAttribute() method. Applications that need to read in - * application-specific attributes should create an AttributeReader implementation and attach - * it via Attribute.addAttributeReader. - * - * - * @version $Id: Unknown.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @see org.apache.bcel.classfile.Attribute - * @see org.apache.bcel.classfile.AttributeReader - * @author M. Dahm - */ -public final class Unknown extends Attribute { - - /** - * - */ - private static final long serialVersionUID = 1L; - private byte[] bytes; - private String name; - private static Map unknown_attributes = new HashMap(); - - /** - * @return array of unknown attributes, but just one for each kind. - */ - static Unknown[] getUnknownAttributes() { - Unknown[] unknowns = new Unknown[unknown_attributes.size()]; - Iterator entries = unknown_attributes.values().iterator(); - for (int i = 0; entries.hasNext(); i++) { - unknowns[i] = entries.next(); - } - unknown_attributes.clear(); - return unknowns; - } - - /** - * Initialize from another object. Note that both objects use the same - * references (shallow copy). Use clone() for a physical copy. - */ - public Unknown(Unknown c) { - this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool()); - } - - /** - * Create a non-standard attribute. - * - * @param name_index - * Index in constant pool - * @param length - * Content length in bytes - * @param bytes - * Attribute contents - * @param constant_pool - * Array of constants - */ - public Unknown(int name_index, int length, byte[] bytes, - ConstantPool constant_pool) { - super(Constants.ATTR_UNKNOWN, name_index, length, constant_pool); - this.bytes = bytes; - name = ((ConstantUtf8) constant_pool.getConstant(name_index, - Constants.CONSTANT_Utf8)).getBytes(); - unknown_attributes.put(name, this); - } - - /** - * Construct object from file stream. - * - * @param name_index - * Index in constant pool - * @param length - * Content length in bytes - * @param file - * Input stream - * @param constant_pool - * Array of constants - * @throws IOException - */ - Unknown(int name_index, int length, DataInputStream file, - ConstantPool constant_pool) throws IOException { - this(name_index, length, (byte[]) null, constant_pool); - if (length > 0) { - bytes = new byte[length]; - file.readFully(bytes); - } - } - - /** - * Called by objects that are traversing the nodes of the tree implicitely - * defined by the contents of a Java class. I.e., the hierarchy of methods, - * fields, attributes, etc. spawns a tree of objects. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitUnknown(this); - } - - /** - * Dump unknown bytes to file stream. - * - * @param file - * Output file stream - * @throws IOException - */ - @Override - public final void dump(DataOutputStream file) throws IOException { - super.dump(file); - if (length > 0) { - file.write(bytes, 0, length); - } - } - - /** - * @return data bytes. - */ - public final byte[] getBytes() { - return bytes; - } - - /** - * @return name of attribute. - */ - public final String getName() { - return name; - } - - /** - * @param bytes - * the bytes to set - */ - public final void setBytes(byte[] bytes) { - this.bytes = bytes; - } - - /** - * @return String representation. - */ - @Override - public final String toString() { - if (length == 0 || bytes == null) { - return "(Unknown attribute " + name + ")"; - } - String hex; - if (length > 10) { - byte[] tmp = new byte[10]; - System.arraycopy(bytes, 0, tmp, 0, 10); - hex = Utility.toHexString(tmp) + "... (truncated)"; - } else { - hex = Utility.toHexString(bytes); - } - return "(Unknown attribute " + name + ": " + hex + ")"; - } - - /** - * @return deep copy of this attribute - */ - @Override - public Attribute copy(ConstantPool _constant_pool) { - Unknown c = (Unknown) clone(); - if (bytes != null) { - c.bytes = new byte[bytes.length]; - System.arraycopy(bytes, 0, c.bytes, 0, bytes.length); - } - c.constant_pool = _constant_pool; - return c; - } -} diff --git a/src/org/apache/bcel/classfile/Utility.java b/src/org/apache/bcel/classfile/Utility.java deleted file mode 100644 index 86d8c71..0000000 --- a/src/org/apache/bcel/classfile/Utility.java +++ /dev/null @@ -1,1433 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.CharArrayReader; -import java.io.CharArrayWriter; -import java.io.FilterReader; -import java.io.FilterWriter; -import java.io.IOException; -import java.io.PrintStream; -import java.io.PrintWriter; -import java.io.Reader; -import java.io.Writer; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.zip.GZIPInputStream; -import java.util.zip.GZIPOutputStream; - -import org.apache.bcel.Constants; -import org.apache.bcel.util.ByteSequence; - -/** - * Utility functions that do not really belong to any class in particular. - * - * @version $Id: Utility.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class Utility { - - private static int unwrap(ThreadLocal tl) { - return tl.get().intValue(); - } - - private static void wrap(ThreadLocal tl, int value) { - tl.set(new Integer(value)); - } - - private static ThreadLocal consumed_chars = new ThreadLocal() { - - @Override - protected Integer initialValue() { - return new Integer(0); - } - };/* - * How many chars have been consumed during parsing in signatureToString(). - * Read by methodSignatureToString(). Set by side effect,but only - * internally. - */ - private static boolean wide = false; /* - * The `WIDE' instruction is used in the - * byte code to allow 16-bit wide - * indices for local variables. This - * opcode precedes an `ILOAD', e.g.. The - * opcode immediately following takes an - * extra byte which is combined with the - * following byte to form a 16-bit - * value. - */ - - /** - * Convert bit field of flags into string such as `static final'. - * - * @param access_flags - * Access flags - * @return String representation of flags - */ - public static final String accessToString(int access_flags) { - return accessToString(access_flags, false); - } - - /** - * Convert bit field of flags into string such as `static final'. - * - * Special case: Classes compiled with new compilers and with the - * `ACC_SUPER' flag would be said to be "synchronized". This is because SUN - * used the same value for the flags `ACC_SUPER' and `ACC_SYNCHRONIZED'. - * - * @param access_flags - * Access flags - * @param for_class - * access flags are for class qualifiers ? - * @return String representation of flags - */ - public static final String accessToString(int access_flags, - boolean for_class) { - StringBuffer buf = new StringBuffer(); - int p = 0; - for (int i = 0; p < Constants.MAX_ACC_FLAG; i++) { // Loop through known - // flags - p = pow2(i); - if ((access_flags & p) != 0) { - /* - * Special case: Classes compiled with new compilers and with - * the `ACC_SUPER' flag would be said to be "synchronized". This - * is because SUN used the same value for the flags `ACC_SUPER' - * and `ACC_SYNCHRONIZED'. - */ - if (for_class - && ((p == Constants.ACC_SUPER) || (p == Constants.ACC_INTERFACE))) { - continue; - } - buf.append(Constants.ACCESS_NAMES[i]).append(" "); - } - } - return buf.toString().trim(); - } - - /** - * @return "class" or "interface", depending on the ACC_INTERFACE flag - */ - public static final String classOrInterface(int access_flags) { - return ((access_flags & Constants.ACC_INTERFACE) != 0) ? "interface" - : "class"; - } - - /** - * Disassemble a byte array of JVM byte codes starting from code line - * `index' and return the disassembled string representation. Decode only - * `num' opcodes (including their operands), use -1 if you want to decompile - * everything. - * - * @param code - * byte code array - * @param constant_pool - * Array of constants - * @param index - * offset in `code' array - * (number of opcodes, not bytes!) - * @param length - * number of opcodes to decompile, -1 for all - * @param verbose - * be verbose, e.g. print constant pool index - * @return String representation of byte codes - */ - public static final String codeToString(byte[] code, - ConstantPool constant_pool, int index, int length, boolean verbose) { - StringBuffer buf = new StringBuffer(code.length * 20); // Should be - // sufficient - ByteSequence stream = new ByteSequence(code); - try { - for (int i = 0; i < index; i++) { - codeToString(stream, constant_pool, verbose); - } - for (int i = 0; stream.available() > 0; i++) { - if ((length < 0) || (i < length)) { - String indices = fillup(stream.getIndex() + ":", 6, true, - ' '); - buf.append(indices) - .append(codeToString(stream, constant_pool, verbose)) - .append('\n'); - } - } - } catch (IOException e) { - System.out.println(buf.toString()); - e.printStackTrace(); - throw new ClassFormatException("Byte code error: " + e); - } - return buf.toString(); - } - - public static final String codeToString(byte[] code, - ConstantPool constant_pool, int index, int length) { - return codeToString(code, constant_pool, index, length, true); - } - - /** - * Disassemble a stream of byte codes and return the string representation. - * - * @param bytes - * stream of bytes - * @param constant_pool - * Array of constants - * @param verbose - * be verbose, e.g. print constant pool index - * @return String representation of byte code - */ - public static final String codeToString(ByteSequence bytes, - ConstantPool constant_pool, boolean verbose) throws IOException { - short opcode = (short) bytes.readUnsignedByte(); - int default_offset = 0, low, high, npairs; - int index, vindex, constant; - int[] match, jump_table; - int no_pad_bytes = 0, offset; - StringBuffer buf = new StringBuffer(Constants.OPCODE_NAMES[opcode]); - /* - * Special case: Skip (0-3) padding bytes, i.e., the following bytes are - * 4-byte-aligned - */ - if ((opcode == Constants.TABLESWITCH) - || (opcode == Constants.LOOKUPSWITCH)) { - int remainder = bytes.getIndex() % 4; - no_pad_bytes = (remainder == 0) ? 0 : 4 - remainder; - for (int i = 0; i < no_pad_bytes; i++) { - byte b; - if ((b = bytes.readByte()) != 0) { - System.err.println("Warning: Padding byte != 0 in " - + Constants.OPCODE_NAMES[opcode] + ":" + b); - } - } - // Both cases have a field default_offset in common - default_offset = bytes.readInt(); - } - switch (opcode) { - /* - * Table switch has variable length arguments. - */ - case Constants.TABLESWITCH: - low = bytes.readInt(); - high = bytes.readInt(); - offset = bytes.getIndex() - 12 - no_pad_bytes - 1; - default_offset += offset; - buf.append("\tdefault = ").append(default_offset) - .append(", low = ").append(low).append(", high = ") - .append(high).append("("); - jump_table = new int[high - low + 1]; - for (int i = 0; i < jump_table.length; i++) { - jump_table[i] = offset + bytes.readInt(); - buf.append(jump_table[i]); - if (i < jump_table.length - 1) { - buf.append(", "); - } - } - buf.append(")"); - break; - /* - * Lookup switch has variable length arguments. - */ - case Constants.LOOKUPSWITCH: { - npairs = bytes.readInt(); - offset = bytes.getIndex() - 8 - no_pad_bytes - 1; - match = new int[npairs]; - jump_table = new int[npairs]; - default_offset += offset; - buf.append("\tdefault = ").append(default_offset) - .append(", npairs = ").append(npairs).append(" ("); - for (int i = 0; i < npairs; i++) { - match[i] = bytes.readInt(); - jump_table[i] = offset + bytes.readInt(); - buf.append("(").append(match[i]).append(", ") - .append(jump_table[i]).append(")"); - if (i < npairs - 1) { - buf.append(", "); - } - } - buf.append(")"); - } - break; - /* - * Two address bytes + offset from start of byte stream form the jump - * target - */ - case Constants.GOTO: - case Constants.IFEQ: - case Constants.IFGE: - case Constants.IFGT: - case Constants.IFLE: - case Constants.IFLT: - case Constants.JSR: - case Constants.IFNE: - case Constants.IFNONNULL: - case Constants.IFNULL: - case Constants.IF_ACMPEQ: - case Constants.IF_ACMPNE: - case Constants.IF_ICMPEQ: - case Constants.IF_ICMPGE: - case Constants.IF_ICMPGT: - case Constants.IF_ICMPLE: - case Constants.IF_ICMPLT: - case Constants.IF_ICMPNE: - buf.append("\t\t#").append( - (bytes.getIndex() - 1) + bytes.readShort()); - break; - /* - * 32-bit wide jumps - */ - case Constants.GOTO_W: - case Constants.JSR_W: - buf.append("\t\t#").append( - ((bytes.getIndex() - 1) + bytes.readInt())); - break; - /* - * Index byte references local variable (register) - */ - case Constants.ALOAD: - case Constants.ASTORE: - case Constants.DLOAD: - case Constants.DSTORE: - case Constants.FLOAD: - case Constants.FSTORE: - case Constants.ILOAD: - case Constants.ISTORE: - case Constants.LLOAD: - case Constants.LSTORE: - case Constants.RET: - if (wide) { - vindex = bytes.readUnsignedShort(); - wide = false; // Clear flag - } else { - vindex = bytes.readUnsignedByte(); - } - buf.append("\t\t%").append(vindex); - break; - /* - * Remember wide byte which is used to form a 16-bit address in the - * following instruction. Relies on that the method is called again with - * the following opcode. - */ - case Constants.WIDE: - wide = true; - buf.append("\t(wide)"); - break; - /* - * Array of basic type. - */ - case Constants.NEWARRAY: - buf.append("\t\t<").append(Constants.TYPE_NAMES[bytes.readByte()]) - .append(">"); - break; - /* - * Access object/class fields. - */ - case Constants.GETFIELD: - case Constants.GETSTATIC: - case Constants.PUTFIELD: - case Constants.PUTSTATIC: - index = bytes.readUnsignedShort(); - buf.append("\t\t") - .append(constant_pool.constantToString(index, - Constants.CONSTANT_Fieldref)) - .append((verbose ? " (" + index + ")" : "")); - break; - /* - * Operands are references to classes in constant pool - */ - case Constants.NEW: - case Constants.CHECKCAST: - buf.append("\t"); - case Constants.INSTANCEOF: - index = bytes.readUnsignedShort(); - buf.append("\t<") - .append(constant_pool.constantToString(index, - Constants.CONSTANT_Class)).append(">") - .append((verbose ? " (" + index + ")" : "")); - break; - /* - * Operands are references to methods in constant pool - */ - case Constants.INVOKESPECIAL: - case Constants.INVOKESTATIC: - case Constants.INVOKEVIRTUAL: - index = bytes.readUnsignedShort(); - buf.append("\t") - .append(constant_pool.constantToString(index, - Constants.CONSTANT_Methodref)) - .append((verbose ? " (" + index + ")" : "")); - break; - case Constants.INVOKEINTERFACE: - index = bytes.readUnsignedShort(); - int nargs = bytes.readUnsignedByte(); // historical, redundant - buf.append("\t") - .append(constant_pool.constantToString(index, - Constants.CONSTANT_InterfaceMethodref)) - .append(verbose ? " (" + index + ")\t" : "").append(nargs) - .append("\t").append(bytes.readUnsignedByte()); // Last byte - // is a - // reserved - // space - break; - /* - * Operands are references to items in constant pool - */ - case Constants.LDC_W: - case Constants.LDC2_W: - index = bytes.readUnsignedShort(); - buf.append("\t\t") - .append(constant_pool.constantToString(index, constant_pool - .getConstant(index).getTag())) - .append((verbose ? " (" + index + ")" : "")); - break; - case Constants.LDC: - index = bytes.readUnsignedByte(); - buf.append("\t\t") - .append(constant_pool.constantToString(index, constant_pool - .getConstant(index).getTag())) - .append((verbose ? " (" + index + ")" : "")); - break; - /* - * Array of references. - */ - case Constants.ANEWARRAY: - index = bytes.readUnsignedShort(); - buf.append("\t\t<") - .append(compactClassName(constant_pool.getConstantString( - index, Constants.CONSTANT_Class), false)) - .append(">").append((verbose ? " (" + index + ")" : "")); - break; - /* - * Multidimensional array of references. - */ - case Constants.MULTIANEWARRAY: { - index = bytes.readUnsignedShort(); - int dimensions = bytes.readUnsignedByte(); - buf.append("\t<") - .append(compactClassName(constant_pool.getConstantString( - index, Constants.CONSTANT_Class), false)) - .append(">\t").append(dimensions) - .append((verbose ? " (" + index + ")" : "")); - } - break; - /* - * Increment local variable. - */ - case Constants.IINC: - if (wide) { - vindex = bytes.readUnsignedShort(); - constant = bytes.readShort(); - wide = false; - } else { - vindex = bytes.readUnsignedByte(); - constant = bytes.readByte(); - } - buf.append("\t\t%").append(vindex).append("\t").append(constant); - break; - default: - if (Constants.NO_OF_OPERANDS[opcode] > 0) { - for (int i = 0; i < Constants.TYPE_OF_OPERANDS[opcode].length; i++) { - buf.append("\t\t"); - switch (Constants.TYPE_OF_OPERANDS[opcode][i]) { - case Constants.T_BYTE: - buf.append(bytes.readByte()); - break; - case Constants.T_SHORT: - buf.append(bytes.readShort()); - break; - case Constants.T_INT: - buf.append(bytes.readInt()); - break; - default: // Never reached - System.err.println("Unreachable default case reached!"); - System.exit(-1); - } - } - } - } - return buf.toString(); - } - - public static final String codeToString(ByteSequence bytes, - ConstantPool constant_pool) throws IOException { - return codeToString(bytes, constant_pool, true); - } - - /** - * Shorten long class names, java/lang/String becomes - * String. - * - * @param str - * The long class name - * @return Compacted class name - */ - public static final String compactClassName(String str) { - return compactClassName(str, true); - } - - /** - * Shorten long class name str, i.e., chop off the prefix, - * if the class name starts with this string and the flag chopit is - * true. Slashes / are converted to dots .. - * - * @param str - * The long class name - * @param prefix - * The prefix the get rid off - * @param chopit - * Flag that determines whether chopping is executed or not - * @return Compacted class name - */ - public static final String compactClassName(String str, String prefix, - boolean chopit) { - int len = prefix.length(); - str = str.replace('/', '.'); // Is `/' on all systems, even DOS - if (chopit) { - // If string starts with `prefix' and contains no further dots - if (str.startsWith(prefix) - && (str.substring(len).indexOf('.') == -1)) { - str = str.substring(len); - } - } - return str; - } - - /** - * Shorten long class names, java/lang/String becomes - * java.lang.String, e.g.. If chopit is true the - * prefix java.lang is also removed. - * - * @param str - * The long class name - * @param chopit - * Flag that determines whether chopping is executed or not - * @return Compacted class name - */ - public static final String compactClassName(String str, boolean chopit) { - return compactClassName(str, "java.lang.", chopit); - } - - /** - * @return `flag' with bit `i' set to 1 - */ - public static final int setBit(int flag, int i) { - return flag | pow2(i); - } - - /** - * @return `flag' with bit `i' set to 0 - */ - public static final int clearBit(int flag, int i) { - int bit = pow2(i); - return (flag & bit) == 0 ? flag : flag ^ bit; - } - - /** - * @return true, if bit `i' in `flag' is set - */ - public static final boolean isSet(int flag, int i) { - return (flag & pow2(i)) != 0; - } - - /** - * Converts string containing the method return and argument types to a byte - * code method signature. - * - * @param ret - * Return type of method - * @param argv - * Types of method arguments - * @return Byte code representation of method signature - */ - public final static String methodTypeToSignature(String ret, String[] argv) - throws ClassFormatException { - StringBuffer buf = new StringBuffer("("); - String str; - if (argv != null) { - for (int i = 0; i < argv.length; i++) { - str = getSignature(argv[i]); - if (str.endsWith("V")) { - throw new ClassFormatException("Invalid type: " + argv[i]); - } - buf.append(str); - } - } - str = getSignature(ret); - buf.append(")").append(str); - return buf.toString(); - } - - /** - * @param signature - * Method signature - * @return Array of argument types - * @throws ClassFormatException - */ - public static final String[] methodSignatureArgumentTypes(String signature) - throws ClassFormatException { - return methodSignatureArgumentTypes(signature, true); - } - - /** - * @param signature - * Method signature - * @param chopit - * Shorten class names ? - * @return Array of argument types - * @throws ClassFormatException - */ - public static final String[] methodSignatureArgumentTypes(String signature, - boolean chopit) throws ClassFormatException { - List vec = new ArrayList(); - int index; - try { // Read all declarations between for `(' and `)' - if (signature.charAt(0) != '(') { - throw new ClassFormatException("Invalid method signature: " - + signature); - } - index = 1; // current string position - while (signature.charAt(index) != ')') { - vec.add(signatureToString(signature.substring(index), chopit)); - // corrected concurrent private static field acess - index += unwrap(consumed_chars); // update position - } - } catch (StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid method signature: " - + signature); - } - return vec.toArray(new String[vec.size()]); - } - - /** - * @param signature - * Method signature - * @return return type of method - * @throws ClassFormatException - */ - public static final String methodSignatureReturnType(String signature) - throws ClassFormatException { - return methodSignatureReturnType(signature, true); - } - - /** - * @param signature - * Method signature - * @param chopit - * Shorten class names ? - * @return return type of method - * @throws ClassFormatException - */ - public static final String methodSignatureReturnType(String signature, - boolean chopit) throws ClassFormatException { - int index; - String type; - try { - // Read return type after `)' - index = signature.lastIndexOf(')') + 1; - type = signatureToString(signature.substring(index), chopit); - } catch (StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid method signature: " - + signature); - } - return type; - } - - /** - * Converts method signature to string with all class names compacted. - * - * @param signature - * to convert - * @param name - * of method - * @param access - * flags of method - * @return Human readable signature - */ - public static final String methodSignatureToString(String signature, - String name, String access) { - return methodSignatureToString(signature, name, access, true); - } - - public static final String methodSignatureToString(String signature, - String name, String access, boolean chopit) { - return methodSignatureToString(signature, name, access, chopit, null); - } - - /** - * A return type signature represents the return value from a method. It is - * a series of bytes in the following grammar: - * - * ::= | V - * - * The character V indicates that the method returns no value. Otherwise, - * the signature indicates the type of the return value. An argument - * signature represents an argument passed to a method: - * - * ::= - * - * A method signature represents the arguments that the method expects, and - * the value that it returns. ::= () - * ::= * - * - * This method converts such a string into a Java type declaration like - * `void main(String[])' and throws a `ClassFormatException' when the parsed - * type is invalid. - * - * @param signature - * Method signature - * @param name - * Method name - * @param access - * Method access rights - * @return Java type declaration - * @throws ClassFormatException - */ - public static final String methodSignatureToString(String signature, - String name, String access, boolean chopit, LocalVariableTable vars) - throws ClassFormatException { - StringBuffer buf = new StringBuffer("("); - String type; - int index; - int var_index = (access.indexOf("static") >= 0) ? 0 : 1; - try { // Read all declarations between for `(' and `)' - if (signature.charAt(0) != '(') { - throw new ClassFormatException("Invalid method signature: " - + signature); - } - index = 1; // current string position - while (signature.charAt(index) != ')') { - String param_type = signatureToString( - signature.substring(index), chopit); - buf.append(param_type); - if (vars != null) { - LocalVariable l = vars.getLocalVariable(var_index); - if (l != null) { - buf.append(" ").append(l.getName()); - } - } else { - buf.append(" arg").append(var_index); - } - if ("double".equals(param_type) || "long".equals(param_type)) { - var_index += 2; - } else { - var_index++; - } - buf.append(", "); - // corrected concurrent private static field acess - index += unwrap(consumed_chars); // update position - } - index++; // update position - // Read return type after `)' - type = signatureToString(signature.substring(index), chopit); - } catch (StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid method signature: " - + signature); - } - if (buf.length() > 1) { - buf.setLength(buf.length() - 2); - } - buf.append(")"); - return access + ((access.length() > 0) ? " " : "") + // May be an empty - // string - type + " " + name + buf.toString(); - } - - // Guess what this does - private static final int pow2(int n) { - return 1 << n; - } - - /** - * Replace all occurences of old in str with new. - * - * @param str - * String to permute - * @param old - * String to be replaced - * @param new_ - * Replacement string - * @return new String object - */ - public static final String replace(String str, String old, String new_) { - int index, old_index; - StringBuffer buf = new StringBuffer(); - try { - if ((index = str.indexOf(old)) != -1) { // `old' found in str - old_index = 0; // String start offset - // While we have something to replace - while ((index = str.indexOf(old, old_index)) != -1) { - buf.append(str.substring(old_index, index)); // append - // prefix - buf.append(new_); // append replacement - old_index = index + old.length(); // Skip `old'.length chars - } - buf.append(str.substring(old_index)); // append rest of string - str = buf.toString(); - } - } catch (StringIndexOutOfBoundsException e) { // Should not occur - System.err.println(e); - } - return str; - } - - /** - * Converts signature to string with all class names compacted. - * - * @param signature - * to convert - * @return Human readable signature - */ - public static final String signatureToString(String signature) { - return signatureToString(signature, true); - } - - /** - * The field signature represents the value of an argument to a function or - * the value of a variable. It is a series of bytes generated by the - * following grammar: - * - *
-	 *  ::= 
-	 *       ::= ||
-	 *        ::= B|C|D|F|I|J|S|Z
-	 *      ::= L;
-	 *       ::= [
-	 * 
-	 * The meaning of the base types is as follows:
-	 * B byte signed byte
-	 * C char character
-	 * D double double precision IEEE float
-	 * F float single precision IEEE float
-	 * I int integer
-	 * J long long integer
-	 * L; ... an object of the given class
-	 * S short signed short
-	 * Z boolean true or false
-	 * [ ... array
-	 * 
- * - * This method converts this string into a Java type declaration such as - * `String[]' and throws a `ClassFormatException' when the parsed type is - * invalid. - * - * @param signature - * Class signature - * @param chopit - * Flag that determines whether chopping is executed or not - * @return Java type declaration - * @throws ClassFormatException - */ - public static final String signatureToString(String signature, - boolean chopit) { - // corrected concurrent private static field acess - wrap(consumed_chars, 1); // This is the default, read just one char like - // `B' - try { - switch (signature.charAt(0)) { - case 'B': - return "byte"; - case 'C': - return "char"; - case 'D': - return "double"; - case 'F': - return "float"; - case 'I': - return "int"; - case 'J': - return "long"; - case 'L': { // Full class name - int index = signature.indexOf(';'); // Look for closing `;' - if (index < 0) { - throw new ClassFormatException("Invalid signature: " - + signature); - } - // corrected concurrent private static field acess - wrap(consumed_chars, index + 1); // "Lblabla;" `L' and `;' are - // removed - return compactClassName(signature.substring(1, index), chopit); - } - case 'S': - return "short"; - case 'Z': - return "boolean"; - case '[': { // Array declaration - int n; - StringBuffer brackets; - String type; - int consumed_chars; // Shadows global var - brackets = new StringBuffer(); // Accumulate []'s - // Count opening brackets and look for optional size argument - for (n = 0; signature.charAt(n) == '['; n++) { - brackets.append("[]"); - } - consumed_chars = n; // Remember value - // The rest of the string denotes a `' - type = signatureToString(signature.substring(n), chopit); - // corrected concurrent private static field acess - // Utility.consumed_chars += consumed_chars; is replaced by: - int _temp = unwrap(Utility.consumed_chars) + consumed_chars; - wrap(Utility.consumed_chars, _temp); - return type + brackets.toString(); - } - case 'V': - return "void"; - default: - throw new ClassFormatException("Invalid signature: `" - + signature + "'"); - } - } catch (StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid signature: " + e + ":" - + signature); - } - } - - /** - * Parse Java type such as "char", or "java.lang.String[]" and return the - * signature in byte code format, e.g. "C" or "[Ljava/lang/String;" - * respectively. - * - * @param type - * Java type - * @return byte code signature - */ - public static String getSignature(String type) { - StringBuffer buf = new StringBuffer(); - char[] chars = type.toCharArray(); - boolean char_found = false, delim = false; - int index = -1; - loop: for (int i = 0; i < chars.length; i++) { - switch (chars[i]) { - case ' ': - case '\t': - case '\n': - case '\r': - case '\f': - if (char_found) { - delim = true; - } - break; - case '[': - if (!char_found) { - throw new RuntimeException("Illegal type: " + type); - } - index = i; - break loop; - default: - char_found = true; - if (!delim) { - buf.append(chars[i]); - } - } - } - int brackets = 0; - if (index > 0) { - brackets = countBrackets(type.substring(index)); - } - type = buf.toString(); - buf.setLength(0); - for (int i = 0; i < brackets; i++) { - buf.append('['); - } - boolean found = false; - for (int i = Constants.T_BOOLEAN; (i <= Constants.T_VOID) && !found; i++) { - if (Constants.TYPE_NAMES[i].equals(type)) { - found = true; - buf.append(Constants.SHORT_TYPE_NAMES[i]); - } - } - if (!found) { - buf.append('L').append(type.replace('.', '/')).append(';'); - } - return buf.toString(); - } - - private static int countBrackets(String brackets) { - char[] chars = brackets.toCharArray(); - int count = 0; - boolean open = false; - for (int i = 0; i < chars.length; i++) { - switch (chars[i]) { - case '[': - if (open) { - throw new RuntimeException("Illegally nested brackets:" - + brackets); - } - open = true; - break; - case ']': - if (!open) { - throw new RuntimeException("Illegally nested brackets:" - + brackets); - } - open = false; - count++; - break; - default: - // Don't care - } - } - if (open) { - throw new RuntimeException("Illegally nested brackets:" + brackets); - } - return count; - } - - /** - * Return type of method signature as a byte value as defined in - * Constants - * - * @param signature - * in format described above - * @return type of method signature - * @see Constants - */ - public static final byte typeOfMethodSignature(String signature) - throws ClassFormatException { - int index; - try { - if (signature.charAt(0) != '(') { - throw new ClassFormatException("Invalid method signature: " - + signature); - } - index = signature.lastIndexOf(')') + 1; - return typeOfSignature(signature.substring(index)); - } catch (StringIndexOutOfBoundsException e) { - throw new ClassFormatException("Invalid method signature: " - + signature); - } - } - - /** - * Return type of signature as a byte value as defined in Constants - * - * @param signature - * in format described above - * @return type of signature - * @see Constants - */ - public static final byte typeOfSignature(String signature) - throws ClassFormatException { - try { - switch (signature.charAt(0)) { - case 'B': - return Constants.T_BYTE; - case 'C': - return Constants.T_CHAR; - case 'D': - return Constants.T_DOUBLE; - case 'F': - return Constants.T_FLOAT; - case 'I': - return Constants.T_INT; - case 'J': - return Constants.T_LONG; - case 'L': - return Constants.T_REFERENCE; - case '[': - return Constants.T_ARRAY; - case 'V': - return Constants.T_VOID; - case 'Z': - return Constants.T_BOOLEAN; - case 'S': - return Constants.T_SHORT; - default: - throw new ClassFormatException("Invalid method signature: " - + signature); - } - } catch (StringIndexOutOfBoundsException e) { - throw new ClassFormatException("Invalid method signature: " - + signature); - } - } - - /** - * Map opcode names to opcode numbers. E.g., return Constants.ALOAD for - * "aload" - */ - public static short searchOpcode(String name) { - name = name.toLowerCase(Locale.ENGLISH); - for (short i = 0; i < Constants.OPCODE_NAMES.length; i++) { - if (Constants.OPCODE_NAMES[i].equals(name)) { - return i; - } - } - return -1; - } - - /** - * Convert (signed) byte to (unsigned) short value, i.e., all negative - * values become positive. - */ - private static final short byteToShort(byte b) { - return (b < 0) ? (short) (256 + b) : (short) b; - } - - /** - * Convert bytes into hexidecimal string - * - * @return bytes as hexidecimal string, e.g. 00 FA 12 ... - */ - public static final String toHexString(byte[] bytes) { - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < bytes.length; i++) { - short b = byteToShort(bytes[i]); - String hex = Integer.toString(b, 0x10); - if (b < 0x10) { - buf.append('0'); - } - buf.append(hex); - if (i < bytes.length - 1) { - buf.append(' '); - } - } - return buf.toString(); - } - - /** - * Return a string for an integer justified left or right and filled up with - * `fill' characters if necessary. - * - * @param i - * integer to format - * @param length - * length of desired string - * @param left_justify - * format left or right - * @param fill - * fill character - * @return formatted int - */ - public static final String format(int i, int length, boolean left_justify, - char fill) { - return fillup(Integer.toString(i), length, left_justify, fill); - } - - /** - * Fillup char with up to length characters with char `fill' and justify it - * left or right. - * - * @param str - * string to format - * @param length - * length of desired string - * @param left_justify - * format left or right - * @param fill - * fill character - * @return formatted string - */ - public static final String fillup(String str, int length, - boolean left_justify, char fill) { - int len = length - str.length(); - char[] buf = new char[(len < 0) ? 0 : len]; - for (int j = 0; j < buf.length; j++) { - buf[j] = fill; - } - if (left_justify) { - return str + new String(buf); - } - return new String(buf) + str; - } - - static final boolean equals(byte[] a, byte[] b) { - int size; - if ((size = a.length) != b.length) { - return false; - } - for (int i = 0; i < size; i++) { - if (a[i] != b[i]) { - return false; - } - } - return true; - } - - public static final void printArray(PrintStream out, Object[] obj) { - out.println(printArray(obj, true)); - } - - public static final void printArray(PrintWriter out, Object[] obj) { - out.println(printArray(obj, true)); - } - - public static final String printArray(Object[] obj) { - return printArray(obj, true); - } - - public static final String printArray(Object[] obj, boolean braces) { - return printArray(obj, braces, false); - } - - public static final String printArray(Object[] obj, boolean braces, - boolean quote) { - if (obj == null) { - return null; - } - StringBuffer buf = new StringBuffer(); - if (braces) { - buf.append('{'); - } - for (int i = 0; i < obj.length; i++) { - if (obj[i] != null) { - buf.append((quote ? "\"" : "")).append(obj[i].toString()) - .append((quote ? "\"" : "")); - } else { - buf.append("null"); - } - if (i < obj.length - 1) { - buf.append(", "); - } - } - if (braces) { - buf.append('}'); - } - return buf.toString(); - } - - /** - * @return true, if character is one of (a, ... z, A, ... Z, 0, ... 9, _) - */ - public static boolean isJavaIdentifierPart(char ch) { - return ((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) - || ((ch >= '0') && (ch <= '9')) || (ch == '_'); - } - - /** - * Encode byte array it into Java identifier string, i.e., a string that - * only contains the following characters: (a, ... z, A, ... Z, 0, ... 9, _, - * $). The encoding algorithm itself is not too clever: if the current - * byte's ASCII value already is a valid Java identifier part, leave it as - * it is. Otherwise it writes the escape character($) followed by - *

- *

    - *
  • the ASCII value as a hexadecimal string, if the value is not in the - * range 200..247
  • - *
  • a Java identifier char not used in a lowercase hexadecimal string, if - * the value is in the range 200..247
  • - *
      - *

      - * - *

      - * This operation inflates the original byte array by roughly 40-50% - *

      - * - * @param bytes - * the byte array to convert - * @param compress - * use gzip to minimize string - */ - public static String encode(byte[] bytes, boolean compress) - throws IOException { - if (compress) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - GZIPOutputStream gos = new GZIPOutputStream(baos); - gos.write(bytes, 0, bytes.length); - gos.close(); - baos.close(); - bytes = baos.toByteArray(); - } - CharArrayWriter caw = new CharArrayWriter(); - JavaWriter jw = new JavaWriter(caw); - for (int i = 0; i < bytes.length; i++) { - int in = bytes[i] & 0x000000ff; // Normalize to unsigned - jw.write(in); - } - jw.close(); - return caw.toString(); - } - - /** - * Decode a string back to a byte array. - * - * @param s - * the string to convert - * @param uncompress - * use gzip to uncompress the stream of bytes - */ - public static byte[] decode(String s, boolean uncompress) - throws IOException { - char[] chars = s.toCharArray(); - CharArrayReader car = new CharArrayReader(chars); - JavaReader jr = new JavaReader(car); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - int ch; - while ((ch = jr.read()) >= 0) { - bos.write(ch); - } - bos.close(); - car.close(); - jr.close(); - byte[] bytes = bos.toByteArray(); - if (uncompress) { - GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream( - bytes)); - byte[] tmp = new byte[bytes.length * 3]; // Rough estimate - int count = 0; - int b; - while ((b = gis.read()) >= 0) { - tmp[count++] = (byte) b; - } - bytes = new byte[count]; - System.arraycopy(tmp, 0, bytes, 0, count); - } - return bytes; - } - - // A-Z, g-z, _, $ - private static final int FREE_CHARS = 48; - static int[] CHAR_MAP = new int[FREE_CHARS]; - static int[] MAP_CHAR = new int[256]; // Reverse map - private static final char ESCAPE_CHAR = '$'; - static { - int j = 0; - for (int i = 'A'; i <= 'Z'; i++) { - CHAR_MAP[j] = i; - MAP_CHAR[i] = j; - j++; - } - for (int i = 'g'; i <= 'z'; i++) { - CHAR_MAP[j] = i; - MAP_CHAR[i] = j; - j++; - } - CHAR_MAP[j] = '$'; - MAP_CHAR['$'] = j; - j++; - CHAR_MAP[j] = '_'; - MAP_CHAR['_'] = j; - } - - /** - * Decode characters into bytes. Used by decode() - */ - private static class JavaReader extends FilterReader { - - public JavaReader(Reader in) { - super(in); - } - - @Override - public int read() throws IOException { - int b = in.read(); - if (b != ESCAPE_CHAR) { - return b; - } - int i = in.read(); - if (i < 0) { - return -1; - } - if (((i >= '0') && (i <= '9')) || ((i >= 'a') && (i <= 'f'))) { // Normal - // escape - int j = in.read(); - if (j < 0) { - return -1; - } - char[] tmp = { (char) i, (char) j }; - int s = Integer.parseInt(new String(tmp), 16); - return s; - } - return MAP_CHAR[i]; - } - - @Override - public int read(char[] cbuf, int off, int len) throws IOException { - for (int i = 0; i < len; i++) { - cbuf[off + i] = (char) read(); - } - return len; - } - } - - /** - * Encode bytes into valid java identifier characters. Used by encode() - */ - private static class JavaWriter extends FilterWriter { - - public JavaWriter(Writer out) { - super(out); - } - - @Override - public void write(int b) throws IOException { - if (isJavaIdentifierPart((char) b) && (b != ESCAPE_CHAR)) { - out.write(b); - } else { - out.write(ESCAPE_CHAR); // Escape character - // Special escape - if (b >= 0 && b < FREE_CHARS) { - out.write(CHAR_MAP[b]); - } else { // Normal escape - char[] tmp = Integer.toHexString(b).toCharArray(); - if (tmp.length == 1) { - out.write('0'); - out.write(tmp[0]); - } else { - out.write(tmp[0]); - out.write(tmp[1]); - } - } - } - } - - @Override - public void write(char[] cbuf, int off, int len) throws IOException { - for (int i = 0; i < len; i++) { - write(cbuf[off + i]); - } - } - - @Override - public void write(String str, int off, int len) throws IOException { - write(str.toCharArray(), off, len); - } - } - - /** - * Escape all occurences of newline chars '\n', quotes \", etc. - */ - public static final String convertString(String label) { - char[] ch = label.toCharArray(); - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < ch.length; i++) { - switch (ch[i]) { - case '\n': - buf.append("\\n"); - break; - case '\r': - buf.append("\\r"); - break; - case '\"': - buf.append("\\\""); - break; - case '\'': - buf.append("\\'"); - break; - case '\\': - buf.append("\\\\"); - break; - default: - buf.append(ch[i]); - break; - } - } - return buf.toString(); - } -} diff --git a/src/org/apache/bcel/classfile/Visitor.java b/src/org/apache/bcel/classfile/Visitor.java deleted file mode 100644 index cdf0e74..0000000 --- a/src/org/apache/bcel/classfile/Visitor.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.classfile; - -/** - * Interface to make use of the Visitor pattern programming style. I.e. a class - * that implements this interface can traverse the contents of a Java class just - * by calling the `accept' method which all classes have. - * - * @version $Id: Visitor.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface Visitor { - - // public void visitAnnotation(Annotations obj); - // public void visitParameterAnnotation(ParameterAnnotations obj); - // public void visitAnnotationEntry(AnnotationEntry obj); - // public void visitAnnotationDefault(AnnotationDefault obj); - public void visitCode(Code obj); - - public void visitCodeException(CodeException obj); - - public void visitConstantClass(ConstantClass obj); - - public void visitConstantDouble(ConstantDouble obj); - - public void visitConstantFieldref(ConstantFieldref obj); - - public void visitConstantFloat(ConstantFloat obj); - - public void visitConstantInteger(ConstantInteger obj); - - public void visitConstantInterfaceMethodref(ConstantInterfaceMethodref obj); - - public void visitConstantLong(ConstantLong obj); - - public void visitConstantMethodref(ConstantMethodref obj); - - public void visitConstantNameAndType(ConstantNameAndType obj); - - public void visitConstantPool(ConstantPool obj); - - public void visitConstantString(ConstantString obj); - - public void visitConstantUtf8(ConstantUtf8 obj); - - public void visitConstantValue(ConstantValue obj); - - public void visitDeprecated(Deprecated obj); - - public void visitExceptionTable(ExceptionTable obj); - - public void visitField(Field obj); - - public void visitInnerClass(InnerClass obj); - - public void visitInnerClasses(InnerClasses obj); - - public void visitJavaClass(JavaClass obj); - - public void visitLineNumber(LineNumber obj); - - public void visitLineNumberTable(LineNumberTable obj); - - public void visitLocalVariable(LocalVariable obj); - - public void visitLocalVariableTable(LocalVariableTable obj); - - public void visitMethod(Method obj); - - public void visitSignature(Signature obj); - - public void visitSourceFile(SourceFile obj); - - public void visitSynthetic(Synthetic obj); - - public void visitUnknown(Unknown obj); - - public void visitStackMap(StackMap obj); - - public void visitStackMapEntry(StackMapEntry obj); -} diff --git a/src/org/apache/bcel/classfile/package.html b/src/org/apache/bcel/classfile/package.html deleted file mode 100644 index 472c399..0000000 --- a/src/org/apache/bcel/classfile/package.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - -

      -This package contains the classes that describe the structure of a -Java class file and a class file parser. -

      - - diff --git a/src/org/apache/bcel/generic/AALOAD.java b/src/org/apache/bcel/generic/AALOAD.java deleted file mode 100644 index b8ecd6c..0000000 --- a/src/org/apache/bcel/generic/AALOAD.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * AALOAD - Load reference from array - * - *
      - * Stack: ..., arrayref, index -> value
      - * 
      - * - * @version $Id: AALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class AALOAD extends ArrayInstruction implements StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Load reference from array - */ - public AALOAD() { - super(org.apache.bcel.Constants.AALOAD); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitAALOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/AASTORE.java b/src/org/apache/bcel/generic/AASTORE.java deleted file mode 100644 index 8bc1792..0000000 --- a/src/org/apache/bcel/generic/AASTORE.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * AASTORE - Store into reference array - * - *
      - * Stack: ..., arrayref, index, value -> ...
      - * 
      - * - * @version $Id: AASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class AASTORE extends ArrayInstruction implements StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Store into reference array - */ - public AASTORE() { - super(org.apache.bcel.Constants.AASTORE); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitAASTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/ACONST_NULL.java b/src/org/apache/bcel/generic/ACONST_NULL.java deleted file mode 100644 index d996cf0..0000000 --- a/src/org/apache/bcel/generic/ACONST_NULL.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * ACONST_NULL - Push null reference - * - *
      - * Stack: ... -> ..., null
      - * 
      - * - * @version $Id: ACONST_NULL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ACONST_NULL extends Instruction implements PushInstruction, - TypedInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Push null reference - */ - public ACONST_NULL() { - super(org.apache.bcel.Constants.ACONST_NULL, (short) 1); - } - - /** - * @return Type.NULL - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.NULL; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitTypedInstruction(this); - v.visitACONST_NULL(this); - } -} diff --git a/src/org/apache/bcel/generic/ALOAD.java b/src/org/apache/bcel/generic/ALOAD.java deleted file mode 100644 index 7abea0e..0000000 --- a/src/org/apache/bcel/generic/ALOAD.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * ALOAD - Load reference from local variable - * - *
      - * Stack: ... -> ..., objectref
      - * 
      - * - * @version $Id: ALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ALOAD extends LoadInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ALOAD() { - super(org.apache.bcel.Constants.ALOAD, - org.apache.bcel.Constants.ALOAD_0); - } - - /** - * Load reference from local variable - * - * @param n - * index of local variable - */ - public ALOAD(int n) { - super(org.apache.bcel.Constants.ALOAD, - org.apache.bcel.Constants.ALOAD_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - super.accept(v); - v.visitALOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/ANEWARRAY.java b/src/org/apache/bcel/generic/ANEWARRAY.java deleted file mode 100644 index f7e4953..0000000 --- a/src/org/apache/bcel/generic/ANEWARRAY.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.ExceptionConstants; - -/** - * ANEWARRAY - Create new array of references - * - *
      - * Stack: ..., count -> ..., arrayref
      - * 
      - * - * @version $Id: ANEWARRAY.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ANEWARRAY extends CPInstruction implements LoadClass, - AllocationInstruction, ExceptionThrower, StackConsumer, StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ANEWARRAY() { - } - - public ANEWARRAY(int index) { - super(org.apache.bcel.Constants.ANEWARRAY, index); - } - - @Override - public Class[] getExceptions() { - Class[] cs = new Class[1 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; - System.arraycopy( - ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, cs, - 0, - ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.NEGATIVE_ARRAY_SIZE_EXCEPTION; - return cs; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitLoadClass(this); - v.visitAllocationInstruction(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitANEWARRAY(this); - } - - @Override - public ObjectType getLoadClassType(ConstantPoolGen cpg) { - Type t = getType(cpg); - if (t instanceof ArrayType) { - t = ((ArrayType) t).getBasicType(); - } - return (t instanceof ObjectType) ? (ObjectType) t : null; - } -} diff --git a/src/org/apache/bcel/generic/ARETURN.java b/src/org/apache/bcel/generic/ARETURN.java deleted file mode 100644 index dc47ddc..0000000 --- a/src/org/apache/bcel/generic/ARETURN.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * ARETURN - Return reference from method - * - *
      - * Stack: ..., objectref -> <empty>
      - * 
      - * - * @version $Id: ARETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ARETURN extends ReturnInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Return reference from method - */ - public ARETURN() { - super(org.apache.bcel.Constants.ARETURN); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitARETURN(this); - } -} diff --git a/src/org/apache/bcel/generic/ARRAYLENGTH.java b/src/org/apache/bcel/generic/ARRAYLENGTH.java deleted file mode 100644 index 819f252..0000000 --- a/src/org/apache/bcel/generic/ARRAYLENGTH.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * ARRAYLENGTH - Get length of array - * - *
      - * Stack: ..., arrayref -> ..., length
      - * 
      - * - * @version $Id: ARRAYLENGTH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ARRAYLENGTH extends Instruction implements ExceptionThrower, - StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Get length of array - */ - public ARRAYLENGTH() { - super(org.apache.bcel.Constants.ARRAYLENGTH, (short) 1); - } - - /** - * @return exceptions this instruction may cause - */ - @Override - public Class[] getExceptions() { - return new Class[] { org.apache.bcel.ExceptionConstants.NULL_POINTER_EXCEPTION }; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitARRAYLENGTH(this); - } -} diff --git a/src/org/apache/bcel/generic/ASTORE.java b/src/org/apache/bcel/generic/ASTORE.java deleted file mode 100644 index 47e8f1a..0000000 --- a/src/org/apache/bcel/generic/ASTORE.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * ASTORE - Store reference into local variable - * - *
      - * Stack ..., objectref -> ...
      - * 
      - * - * @version $Id: ASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ASTORE extends StoreInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ASTORE() { - super(org.apache.bcel.Constants.ASTORE, - org.apache.bcel.Constants.ASTORE_0); - } - - /** - * Store reference into local variable - * - * @param n - * index of local variable - */ - public ASTORE(int n) { - super(org.apache.bcel.Constants.ASTORE, - org.apache.bcel.Constants.ASTORE_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - super.accept(v); - v.visitASTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/ATHROW.java b/src/org/apache/bcel/generic/ATHROW.java deleted file mode 100644 index b5563b3..0000000 --- a/src/org/apache/bcel/generic/ATHROW.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * ATHROW - Throw exception - * - *
      - * Stack: ..., objectref -> objectref
      - * 
      - * - * @version $Id: ATHROW.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ATHROW extends Instruction implements UnconditionalBranch, - ExceptionThrower { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Throw exception - */ - public ATHROW() { - super(org.apache.bcel.Constants.ATHROW, (short) 1); - } - - /** - * @return exceptions this instruction may cause - */ - @Override - public Class[] getExceptions() { - return new Class[] { org.apache.bcel.ExceptionConstants.THROWABLE }; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitUnconditionalBranch(this); - v.visitExceptionThrower(this); - v.visitATHROW(this); - } -} diff --git a/src/org/apache/bcel/generic/AllocationInstruction.java b/src/org/apache/bcel/generic/AllocationInstruction.java deleted file mode 100644 index a30ab52..0000000 --- a/src/org/apache/bcel/generic/AllocationInstruction.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denote family of instructions that allocates space in the heap. - * - * @version $Id: AllocationInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface AllocationInstruction { -} diff --git a/src/org/apache/bcel/generic/ArithmeticInstruction.java b/src/org/apache/bcel/generic/ArithmeticInstruction.java deleted file mode 100644 index f60c295..0000000 --- a/src/org/apache/bcel/generic/ArithmeticInstruction.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; - -/** - * Super class for the family of arithmetic instructions. - * - * @version $Id: ArithmeticInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class ArithmeticInstruction extends Instruction implements - TypedInstruction, StackProducer, StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ArithmeticInstruction() { - } - - /** - * @param opcode - * of instruction - */ - protected ArithmeticInstruction(short opcode) { - super(opcode, (short) 1); - } - - /** - * @return type associated with the instruction - */ - @Override - public Type getType(ConstantPoolGen cp) { - switch (opcode) { - case Constants.DADD: - case Constants.DDIV: - case Constants.DMUL: - case Constants.DNEG: - case Constants.DREM: - case Constants.DSUB: - return Type.DOUBLE; - case Constants.FADD: - case Constants.FDIV: - case Constants.FMUL: - case Constants.FNEG: - case Constants.FREM: - case Constants.FSUB: - return Type.FLOAT; - case Constants.IADD: - case Constants.IAND: - case Constants.IDIV: - case Constants.IMUL: - case Constants.INEG: - case Constants.IOR: - case Constants.IREM: - case Constants.ISHL: - case Constants.ISHR: - case Constants.ISUB: - case Constants.IUSHR: - case Constants.IXOR: - return Type.INT; - case Constants.LADD: - case Constants.LAND: - case Constants.LDIV: - case Constants.LMUL: - case Constants.LNEG: - case Constants.LOR: - case Constants.LREM: - case Constants.LSHL: - case Constants.LSHR: - case Constants.LSUB: - case Constants.LUSHR: - case Constants.LXOR: - return Type.LONG; - default: // Never reached - throw new ClassGenException("Unknown type " + opcode); - } - } -} diff --git a/src/org/apache/bcel/generic/ArrayInstruction.java b/src/org/apache/bcel/generic/ArrayInstruction.java deleted file mode 100644 index 883c7aa..0000000 --- a/src/org/apache/bcel/generic/ArrayInstruction.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Super class for instructions dealing with array access such as IALOAD. - * - * @version $Id: ArrayInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class ArrayInstruction extends Instruction implements - ExceptionThrower, TypedInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ArrayInstruction() { - } - - /** - * @param opcode - * of instruction - */ - protected ArrayInstruction(short opcode) { - super(opcode, (short) 1); - } - - @Override - public Class[] getExceptions() { - return org.apache.bcel.ExceptionConstants.EXCS_ARRAY_EXCEPTION; - } - - /** - * @return type associated with the instruction - */ - @Override - public Type getType(ConstantPoolGen cp) { - switch (opcode) { - case org.apache.bcel.Constants.IALOAD: - case org.apache.bcel.Constants.IASTORE: - return Type.INT; - case org.apache.bcel.Constants.CALOAD: - case org.apache.bcel.Constants.CASTORE: - return Type.CHAR; - case org.apache.bcel.Constants.BALOAD: - case org.apache.bcel.Constants.BASTORE: - return Type.BYTE; - case org.apache.bcel.Constants.SALOAD: - case org.apache.bcel.Constants.SASTORE: - return Type.SHORT; - case org.apache.bcel.Constants.LALOAD: - case org.apache.bcel.Constants.LASTORE: - return Type.LONG; - case org.apache.bcel.Constants.DALOAD: - case org.apache.bcel.Constants.DASTORE: - return Type.DOUBLE; - case org.apache.bcel.Constants.FALOAD: - case org.apache.bcel.Constants.FASTORE: - return Type.FLOAT; - case org.apache.bcel.Constants.AALOAD: - case org.apache.bcel.Constants.AASTORE: - return Type.OBJECT; - default: - throw new ClassGenException("Oops: unknown case in switch" + opcode); - } - } -} diff --git a/src/org/apache/bcel/generic/ArrayType.java b/src/org/apache/bcel/generic/ArrayType.java deleted file mode 100644 index fda1bc0..0000000 --- a/src/org/apache/bcel/generic/ArrayType.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; - -/** - * Denotes array type, such as int[][] - * - * @version $Id: ArrayType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class ArrayType extends ReferenceType { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int dimensions; - private Type basic_type; - - /** - * Convenience constructor for array type, e.g. int[] - * - * @param type - * array type, e.g. T_INT - */ - public ArrayType(byte type, int dimensions) { - this(BasicType.getType(type), dimensions); - } - - /** - * Convenience constructor for reference array type, e.g. Object[] - * - * @param class_name - * complete name of class (java.lang.String, e.g.) - */ - public ArrayType(String class_name, int dimensions) { - this(new ObjectType(class_name), dimensions); - } - - /** - * Constructor for array of given type - * - * @param type - * type of array (may be an array itself) - */ - public ArrayType(Type type, int dimensions) { - super(Constants.T_ARRAY, ""); - if ((dimensions < 1) || (dimensions > Constants.MAX_BYTE)) { - throw new ClassGenException("Invalid number of dimensions: " - + dimensions); - } - switch (type.getType()) { - case Constants.T_ARRAY: - ArrayType array = (ArrayType) type; - this.dimensions = dimensions + array.dimensions; - basic_type = array.basic_type; - break; - case Constants.T_VOID: - throw new ClassGenException("Invalid type: void[]"); - default: // Basic type or reference - this.dimensions = dimensions; - basic_type = type; - break; - } - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < this.dimensions; i++) { - buf.append('['); - } - buf.append(basic_type.getSignature()); - signature = buf.toString(); - } - - /** - * @return basic type of array, i.e., for int[][][] the basic type is int - */ - public Type getBasicType() { - return basic_type; - } - - /** - * @return element type of array, i.e., for int[][][] the element type is - * int[][] - */ - public Type getElementType() { - if (dimensions == 1) { - return basic_type; - } - return new ArrayType(basic_type, dimensions - 1); - } - - /** - * @return number of dimensions of array - */ - public int getDimensions() { - return dimensions; - } - - /** - * @return a hash code value for the object. - */ - @Override - public int hashCode() { - return basic_type.hashCode() ^ dimensions; - } - - /** - * @return true if both type objects refer to the same array type. - */ - @Override - public boolean equals(Object _type) { - if (_type instanceof ArrayType) { - ArrayType array = (ArrayType) _type; - return (array.dimensions == dimensions) - && array.basic_type.equals(basic_type); - } - return false; - } -} diff --git a/src/org/apache/bcel/generic/BALOAD.java b/src/org/apache/bcel/generic/BALOAD.java deleted file mode 100644 index 9f6d6fe..0000000 --- a/src/org/apache/bcel/generic/BALOAD.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * BALOAD - Load byte or boolean from array - * - *
      - * Stack: ..., arrayref, index -> ..., value
      - * 
      - * - * @version $Id: BALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class BALOAD extends ArrayInstruction implements StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Load byte or boolean from array - */ - public BALOAD() { - super(org.apache.bcel.Constants.BALOAD); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitBALOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/BASTORE.java b/src/org/apache/bcel/generic/BASTORE.java deleted file mode 100644 index cb0aefc..0000000 --- a/src/org/apache/bcel/generic/BASTORE.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * BASTORE - Store into byte or boolean array - * - *
      - * Stack: ..., arrayref, index, value -> ...
      - * 
      - * - * @version $Id: BASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class BASTORE extends ArrayInstruction implements StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Store byte or boolean into array - */ - public BASTORE() { - super(org.apache.bcel.Constants.BASTORE); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitBASTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/BIPUSH.java b/src/org/apache/bcel/generic/BIPUSH.java deleted file mode 100644 index b1412e9..0000000 --- a/src/org/apache/bcel/generic/BIPUSH.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * BIPUSH - Push byte on stack - * - *
      - * Stack: ... -> ..., value
      - * 
      - * - * @version $Id: BIPUSH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class BIPUSH extends Instruction implements ConstantPushInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - private byte b; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - BIPUSH() { - } - - /** - * Push byte on stack - */ - public BIPUSH(byte b) { - super(org.apache.bcel.Constants.BIPUSH, (short) 2); - this.b = b; - } - - /** - * Dump instruction as byte code to stream out. - */ - @Override - public void dump(DataOutputStream out) throws IOException { - super.dump(out); - out.writeByte(b); - } - - /** - * @return mnemonic for instruction - */ - @Override - public String toString(boolean verbose) { - return super.toString(verbose) + " " + b; - } - - /** - * Read needed data (e.g. index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - length = 2; - b = bytes.readByte(); - } - - @Override - public Number getValue() { - return new Integer(b); - } - - /** - * @return Type.BYTE - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.BYTE; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitBIPUSH(this); - } -} diff --git a/src/org/apache/bcel/generic/BREAKPOINT.java b/src/org/apache/bcel/generic/BREAKPOINT.java deleted file mode 100644 index 74e7308..0000000 --- a/src/org/apache/bcel/generic/BREAKPOINT.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * BREAKPOINT, JVM dependent, ignored by default - * - * @version $Id: BREAKPOINT.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class BREAKPOINT extends Instruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public BREAKPOINT() { - super(org.apache.bcel.Constants.BREAKPOINT, (short) 1); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitBREAKPOINT(this); - } -} diff --git a/src/org/apache/bcel/generic/BasicType.java b/src/org/apache/bcel/generic/BasicType.java deleted file mode 100644 index 715039d..0000000 --- a/src/org/apache/bcel/generic/BasicType.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; - -/** - * Denotes basic type such as int. - * - * @version $Id: BasicType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class BasicType extends Type { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Constructor for basic types such as int, long, `void' - * - * @param type - * one of T_INT, T_BOOLEAN, ..., T_VOID - * @see org.apache.bcel.Constants - */ - BasicType(byte type) { - super(type, Constants.SHORT_TYPE_NAMES[type]); - if ((type < Constants.T_BOOLEAN) || (type > Constants.T_VOID)) { - throw new ClassGenException("Invalid type: " + type); - } - } - - public static final BasicType getType(byte type) { - switch (type) { - case Constants.T_VOID: - return VOID; - case Constants.T_BOOLEAN: - return BOOLEAN; - case Constants.T_BYTE: - return BYTE; - case Constants.T_SHORT: - return SHORT; - case Constants.T_CHAR: - return CHAR; - case Constants.T_INT: - return INT; - case Constants.T_LONG: - return LONG; - case Constants.T_DOUBLE: - return DOUBLE; - case Constants.T_FLOAT: - return FLOAT; - default: - throw new ClassGenException("Invalid type: " + type); - } - } - - /** - * @return a hash code value for the object. - */ - @Override - public int hashCode() { - return type; - } - - /** - * @return true if both type objects refer to the same type - */ - @Override - public boolean equals(Object _type) { - return (_type instanceof BasicType) ? ((BasicType) _type).type == this.type - : false; - } -} diff --git a/src/org/apache/bcel/generic/BranchHandle.java b/src/org/apache/bcel/generic/BranchHandle.java deleted file mode 100644 index bb946d6..0000000 --- a/src/org/apache/bcel/generic/BranchHandle.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * BranchHandle is returned by specialized InstructionList.append() whenever a - * BranchInstruction is appended. This is useful when the target of this - * instruction is not known at time of creation and must be set later via - * setTarget(). - * - * @see InstructionHandle - * @see Instruction - * @see InstructionList - * @version $Id: BranchHandle.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class BranchHandle extends InstructionHandle { - - /** - * - */ - private static final long serialVersionUID = 1L; - private BranchInstruction bi; // An alias in fact, but saves lots of casts - - private BranchHandle(BranchInstruction i) { - super(i); - bi = i; - } - - /** - * Factory methods. - */ - private static BranchHandle bh_list = null; // List of reusable handles - - static final BranchHandle getBranchHandle(BranchInstruction i) { - if (bh_list == null) { - return new BranchHandle(i); - } - BranchHandle bh = bh_list; - bh_list = (BranchHandle) bh.next; - bh.setInstruction(i); - return bh; - } - - /** - * Handle adds itself to the list of resuable handles. - */ - @Override - protected void addHandle() { - next = bh_list; - bh_list = this; - } - - /* - * Override InstructionHandle methods: delegate to branch instruction. - * Through this overriding all access to the private i_position field should - * be prevented. - */ - @Override - public int getPosition() { - return bi.position; - } - - @Override - void setPosition(int pos) { - i_position = bi.position = pos; - } - - @Override - protected int updatePosition(int offset, int max_offset) { - int x = bi.updatePosition(offset, max_offset); - i_position = bi.position; - return x; - } - - /** - * Pass new target to instruction. - */ - public void setTarget(InstructionHandle ih) { - bi.setTarget(ih); - } - - /** - * Update target of instruction. - */ - public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { - bi.updateTarget(old_ih, new_ih); - } - - /** - * @return target of instruction. - */ - public InstructionHandle getTarget() { - return bi.getTarget(); - } - - /** - * Set new contents. Old instruction is disposed and may not be used - * anymore. - */ - @Override - public void setInstruction(Instruction i) { - super.setInstruction(i); - if (!(i instanceof BranchInstruction)) { - throw new ClassGenException("Assigning " + i - + " to branch handle which is not a branch instruction"); - } - bi = (BranchInstruction) i; - } -} diff --git a/src/org/apache/bcel/generic/BranchInstruction.java b/src/org/apache/bcel/generic/BranchInstruction.java deleted file mode 100644 index 2864a05..0000000 --- a/src/org/apache/bcel/generic/BranchInstruction.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * Abstract super class for branching instructions like GOTO, IFEQ, etc.. Branch - * instructions may have a variable length, namely GOTO, JSR, LOOKUPSWITCH and - * TABLESWITCH. - * - * @see InstructionList - * @version $Id: BranchInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class BranchInstruction extends Instruction implements - InstructionTargeter { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected int index; // Branch target relative to this instruction - protected InstructionHandle target; // Target object in instruction list - protected int position; // Byte code offset - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - BranchInstruction() { - } - - /** - * Common super constructor - * - * @param opcode - * Instruction opcode - * @param target - * instruction to branch to - */ - protected BranchInstruction(short opcode, InstructionHandle target) { - super(opcode, (short) 3); - setTarget(target); - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); - index = getTargetOffset(); - if (Math.abs(index) >= 32767) { - throw new ClassGenException( - "Branch target offset too large for short"); - } - out.writeShort(index); // May be negative, i.e., point backwards - } - - /** - * @param _target - * branch target - * @return the offset to `target' relative to this instruction - */ - protected int getTargetOffset(InstructionHandle _target) { - if (_target == null) { - throw new ClassGenException("Target of " + super.toString(true) - + " is invalid null handle"); - } - int t = _target.getPosition(); - if (t < 0) { - throw new ClassGenException( - "Invalid branch target position offset for " - + super.toString(true) + ":" + t + ":" + _target); - } - return t - position; - } - - /** - * @return the offset to this instruction's target - */ - protected int getTargetOffset() { - return getTargetOffset(target); - } - - /** - * Called by InstructionList.setPositions when setting the position for - * every instruction. In the presence of variable length instructions - * `setPositions' performs multiple passes over the instruction list to - * calculate the correct (byte) positions and offsets by calling this - * function. - * - * @param offset - * additional offset caused by preceding (variable length) - * instructions - * @param max_offset - * the maximum offset that may be caused by these instructions - * @return additional offset caused by possible change of this instruction's - * length - */ - protected int updatePosition(int offset, int max_offset) { - position += offset; - return 0; - } - - /** - * Long output format: - * - * <position in byte code> <name of opcode> "["<opcode - * number>"]" "("<length of instruction>")" "<"<target - * instruction>">" "@"<branch target offset> - * - * @param verbose - * long/short format switch - * @return mnemonic for instruction - */ - @Override - public String toString(boolean verbose) { - String s = super.toString(verbose); - String t = "null"; - if (verbose) { - if (target != null) { - if (target.getInstruction() == this) { - t = ""; - } else if (target.getInstruction() == null) { - t = ""; - } else { - t = target.getInstruction().toString(false); // Avoid - // circles - } - } - } else { - if (target != null) { - index = getTargetOffset(); - t = "" + (index + position); - } - } - return s + " -> " + t; - } - - /** - * Read needed data (e.g. index) from file. Conversion to a - * InstructionHandle is done in InstructionList(byte[]). - * - * @param bytes - * input stream - * @param wide - * wide prefix? - * @see InstructionList - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - length = 3; - index = bytes.readShort(); - } - - /** - * @return target offset in byte code - */ - public final int getIndex() { - return index; - } - - /** - * @return target of branch instruction - */ - public InstructionHandle getTarget() { - return target; - } - - /** - * Set branch target - * - * @param target - * branch target - */ - public void setTarget(InstructionHandle target) { - notifyTarget(this.target, target, this); - this.target = target; - } - - /** - * Used by BranchInstruction, LocalVariableGen, CodeExceptionGen - */ - static final void notifyTarget(InstructionHandle old_ih, - InstructionHandle new_ih, InstructionTargeter t) { - if (old_ih != null) { - old_ih.removeTargeter(t); - } - if (new_ih != null) { - new_ih.addTargeter(t); - } - } - - /** - * @param old_ih - * old target - * @param new_ih - * new target - */ - @Override - public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { - if (target == old_ih) { - setTarget(new_ih); - } else { - throw new ClassGenException("Not targeting " + old_ih + ", but " - + target); - } - } - - /** - * @return true, if ih is target of this instruction - */ - @Override - public boolean containsTarget(InstructionHandle ih) { - return (target == ih); - } - - /** - * Inform target that it's not targeted anymore. - */ - @Override - void dispose() { - setTarget(null); - index = -1; - position = -1; - } -} diff --git a/src/org/apache/bcel/generic/CALOAD.java b/src/org/apache/bcel/generic/CALOAD.java deleted file mode 100644 index 50839af..0000000 --- a/src/org/apache/bcel/generic/CALOAD.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * CALOAD - Load char from array - * - *
      - * Stack: ..., arrayref, index -> ..., value
      - * 
      - * - * @version $Id: CALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class CALOAD extends ArrayInstruction implements StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Load char from array - */ - public CALOAD() { - super(org.apache.bcel.Constants.CALOAD); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitCALOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/CASTORE.java b/src/org/apache/bcel/generic/CASTORE.java deleted file mode 100644 index 77d1c34..0000000 --- a/src/org/apache/bcel/generic/CASTORE.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * CASTORE - Store into char array - * - *
      - * Stack: ..., arrayref, index, value -> ...
      - * 
      - * - * @version $Id: CASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class CASTORE extends ArrayInstruction implements StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Store char into array - */ - public CASTORE() { - super(org.apache.bcel.Constants.CASTORE); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitCASTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/CHECKCAST.java b/src/org/apache/bcel/generic/CHECKCAST.java deleted file mode 100644 index 08882b1..0000000 --- a/src/org/apache/bcel/generic/CHECKCAST.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.ExceptionConstants; - -/** - * CHECKCAST - Check whether object is of given type - * - *
      - * Stack: ..., objectref -> ..., objectref
      - * 
      - * - * @version $Id: CHECKCAST.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class CHECKCAST extends CPInstruction implements LoadClass, - ExceptionThrower, StackProducer, StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - CHECKCAST() { - } - - /** - * Check whether object is of given type - * - * @param index - * index to class in constant pool - */ - public CHECKCAST(int index) { - super(org.apache.bcel.Constants.CHECKCAST, index); - } - - /** - * @return exceptions this instruction may cause - */ - @Override - public Class[] getExceptions() { - Class[] cs = new Class[1 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; - System.arraycopy( - ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, cs, - 0, - ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.CLASS_CAST_EXCEPTION; - return cs; - } - - @Override - public ObjectType getLoadClassType(ConstantPoolGen cpg) { - Type t = getType(cpg); - if (t instanceof ArrayType) { - t = ((ArrayType) t).getBasicType(); - } - return (t instanceof ObjectType) ? (ObjectType) t : null; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitLoadClass(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitCHECKCAST(this); - } -} diff --git a/src/org/apache/bcel/generic/CPInstruction.java b/src/org/apache/bcel/generic/CPInstruction.java deleted file mode 100644 index 6efe659..0000000 --- a/src/org/apache/bcel/generic/CPInstruction.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.classfile.Constant; -import org.apache.bcel.classfile.ConstantClass; -import org.apache.bcel.classfile.ConstantPool; -import org.apache.bcel.util.ByteSequence; - -/** - * Abstract super class for instructions that use an index into the constant - * pool such as LDC, INVOKEVIRTUAL, etc. - * - * @see ConstantPoolGen - * @see LDC - * @see INVOKEVIRTUAL - * - * @version $Id: CPInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class CPInstruction extends Instruction implements - TypedInstruction, IndexedInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected int index; // index to constant pool - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - CPInstruction() { - } - - /** - * @param index - * to constant pool - */ - protected CPInstruction(short opcode, int index) { - super(opcode, (short) 3); - setIndex(index); - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); - out.writeShort(index); - } - - /** - * Long output format: - * - * <name of opcode> "["<opcode number>"]" "("<length of - * instruction>")" "<"< constant pool index>">" - * - * @param verbose - * long/short format switch - * @return mnemonic for instruction - */ - @Override - public String toString(boolean verbose) { - return super.toString(verbose) + " " + index; - } - - /** - * @return mnemonic for instruction with symbolic references resolved - */ - @Override - public String toString(ConstantPool cp) { - Constant c = cp.getConstant(index); - String str = cp.constantToString(c); - if (c instanceof ConstantClass) { - str = str.replace('.', '/'); - } - return org.apache.bcel.Constants.OPCODE_NAMES[opcode] + " " + str; - } - - /** - * Read needed data (i.e., index) from file. - * - * @param bytes - * input stream - * @param wide - * wide prefix? - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - setIndex(bytes.readUnsignedShort()); - length = 3; - } - - /** - * @return index in constant pool referred by this instruction. - */ - @Override - public final int getIndex() { - return index; - } - - /** - * Set the index to constant pool. - * - * @param index - * in constant pool. - */ - @Override - public void setIndex(int index) { - if (index < 0) { - throw new ClassGenException("Negative index value: " + index); - } - this.index = index; - } - - /** - * @return type related with this instruction. - */ - @Override - public Type getType(ConstantPoolGen cpg) { - ConstantPool cp = cpg.getConstantPool(); - String name = cp.getConstantString(index, - org.apache.bcel.Constants.CONSTANT_Class); - if (!name.startsWith("[")) { - name = "L" + name + ";"; - } - return Type.getType(name); - } -} diff --git a/src/org/apache/bcel/generic/ClassGen.java b/src/org/apache/bcel/generic/ClassGen.java deleted file mode 100644 index c9d3d14..0000000 --- a/src/org/apache/bcel/generic/ClassGen.java +++ /dev/null @@ -1,556 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.apache.bcel.Constants; -import org.apache.bcel.classfile.AccessFlags; -import org.apache.bcel.classfile.Attribute; -import org.apache.bcel.classfile.ConstantPool; -import org.apache.bcel.classfile.Field; -import org.apache.bcel.classfile.JavaClass; -import org.apache.bcel.classfile.Method; -import org.apache.bcel.classfile.SourceFile; -import org.apache.bcel.util.BCELComparator; - -/** - * Template class for building up a java class. May be initialized with an - * existing java class (file). - * - * @see JavaClass - * @version $Id: ClassGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ClassGen extends AccessFlags implements Cloneable { - - /** - * - */ - private static final long serialVersionUID = 1L; - /* - * Corresponds to the fields found in a JavaClass object. - */ - private String class_name, super_class_name, file_name; - private int class_name_index = -1, superclass_name_index = -1; - private int major = Constants.MAJOR_1_1, minor = Constants.MINOR_1_1; - private ConstantPoolGen cp; // Template for building up constant pool - // ArrayLists instead of arrays to gather fields, methods, etc. - private List field_vec = new ArrayList(); - private List method_vec = new ArrayList(); - private List attribute_vec = new ArrayList(); - private List interface_vec = new ArrayList(); - private static BCELComparator _cmp = new BCELComparator() { - - @Override - public boolean equals(Object o1, Object o2) { - ClassGen THIS = (ClassGen) o1; - ClassGen THAT = (ClassGen) o2; - return THIS.getClassName().equals(THAT.getClassName()); - } - - @Override - public int hashCode(Object o) { - ClassGen THIS = (ClassGen) o; - return THIS.getClassName().hashCode(); - } - }; - - /** - * Convenience constructor to set up some important values initially. - * - * @param class_name - * fully qualified class name - * @param super_class_name - * fully qualified superclass name - * @param file_name - * source file name - * @param access_flags - * access qualifiers - * @param interfaces - * implemented interfaces - * @param cp - * constant pool to use - */ - public ClassGen(String class_name, String super_class_name, - String file_name, int access_flags, String[] interfaces, - ConstantPoolGen cp) { - this.class_name = class_name; - this.super_class_name = super_class_name; - this.file_name = file_name; - this.access_flags = access_flags; - this.cp = cp; - // Put everything needed by default into the constant pool and the - // vectors - if (file_name != null) { - addAttribute(new SourceFile(cp.addUtf8("SourceFile"), 2, - cp.addUtf8(file_name), cp.getConstantPool())); - } - class_name_index = cp.addClass(class_name); - superclass_name_index = cp.addClass(super_class_name); - if (interfaces != null) { - for (int i = 0; i < interfaces.length; i++) { - addInterface(interfaces[i]); - } - } - } - - /** - * Convenience constructor to set up some important values initially. - * - * @param class_name - * fully qualified class name - * @param super_class_name - * fully qualified superclass name - * @param file_name - * source file name - * @param access_flags - * access qualifiers - * @param interfaces - * implemented interfaces - */ - public ClassGen(String class_name, String super_class_name, - String file_name, int access_flags, String[] interfaces) { - this(class_name, super_class_name, file_name, access_flags, interfaces, - new ConstantPoolGen()); - } - - /** - * Initialize with existing class. - * - * @param clazz - * JavaClass object (e.g. read from file) - */ - public ClassGen(JavaClass clazz) { - class_name_index = clazz.getClassNameIndex(); - superclass_name_index = clazz.getSuperclassNameIndex(); - class_name = clazz.getClassName(); - super_class_name = clazz.getSuperclassName(); - file_name = clazz.getSourceFileName(); - access_flags = clazz.getAccessFlags(); - cp = new ConstantPoolGen(clazz.getConstantPool()); - major = clazz.getMajor(); - minor = clazz.getMinor(); - Attribute[] attributes = clazz.getAttributes(); - Method[] methods = clazz.getMethods(); - Field[] fields = clazz.getFields(); - String[] interfaces = clazz.getInterfaceNames(); - for (int i = 0; i < interfaces.length; i++) { - addInterface(interfaces[i]); - } - for (int i = 0; i < attributes.length; i++) { - addAttribute(attributes[i]); - } - for (int i = 0; i < methods.length; i++) { - addMethod(methods[i]); - } - for (int i = 0; i < fields.length; i++) { - addField(fields[i]); - } - } - - /** - * @return the (finally) built up Java class object. - */ - public JavaClass getJavaClass() { - int[] interfaces = getInterfaces(); - Field[] fields = getFields(); - Method[] methods = getMethods(); - Attribute[] attributes = getAttributes(); - // Must be last since the above calls may still add something to it - ConstantPool _cp = this.cp.getFinalConstantPool(); - return new JavaClass(class_name_index, superclass_name_index, - file_name, major, minor, access_flags, _cp, interfaces, fields, - methods, attributes); - } - - /** - * Add an interface to this class, i.e., this class has to implement it. - * - * @param name - * interface to implement (fully qualified class name) - */ - public void addInterface(String name) { - interface_vec.add(name); - } - - /** - * Remove an interface from this class. - * - * @param name - * interface to remove (fully qualified name) - */ - public void removeInterface(String name) { - interface_vec.remove(name); - } - - /** - * @return major version number of class file - */ - public int getMajor() { - return major; - } - - /** - * Set major version number of class file, default value is 45 (JDK 1.1) - * - * @param major - * major version number - */ - public void setMajor(int major) { - this.major = major; - } - - /** - * Set minor version number of class file, default value is 3 (JDK 1.1) - * - * @param minor - * minor version number - */ - public void setMinor(int minor) { - this.minor = minor; - } - - /** - * @return minor version number of class file - */ - public int getMinor() { - return minor; - } - - /** - * Add an attribute to this class. - * - * @param a - * attribute to add - */ - public void addAttribute(Attribute a) { - attribute_vec.add(a); - } - - /** - * Add a method to this class. - * - * @param m - * method to add - */ - public void addMethod(Method m) { - method_vec.add(m); - } - - /** - * Convenience method. - * - * Add an empty constructor to this class that does nothing but calling - * super(). - * - * @param access_flags - * rights for constructor - */ - public void addEmptyConstructor(int access_flags) { - InstructionList il = new InstructionList(); - il.append(InstructionConstants.THIS); // Push `this' - il.append(new INVOKESPECIAL(cp.addMethodref(super_class_name, "", - "()V"))); - il.append(InstructionConstants.RETURN); - MethodGen mg = new MethodGen(access_flags, Type.VOID, Type.NO_ARGS, - null, "", class_name, il, cp); - mg.setMaxStack(1); - addMethod(mg.getMethod()); - } - - /** - * Add a field to this class. - * - * @param f - * field to add - */ - public void addField(Field f) { - field_vec.add(f); - } - - public boolean containsField(Field f) { - return field_vec.contains(f); - } - - /** - * @return field object with given name, or null - */ - public Field containsField(String name) { - for (Iterator e = field_vec.iterator(); e.hasNext();) { - Field f = e.next(); - if (f.getName().equals(name)) { - return f; - } - } - return null; - } - - /** - * @return method object with given name and signature, or null - */ - public Method containsMethod(String name, String signature) { - for (Iterator e = method_vec.iterator(); e.hasNext();) { - Method m = e.next(); - if (m.getName().equals(name) && m.getSignature().equals(signature)) { - return m; - } - } - return null; - } - - /** - * Remove an attribute from this class. - * - * @param a - * attribute to remove - */ - public void removeAttribute(Attribute a) { - attribute_vec.remove(a); - } - - /** - * Remove a method from this class. - * - * @param m - * method to remove - */ - public void removeMethod(Method m) { - method_vec.remove(m); - } - - /** - * Replace given method with new one. If the old one does not exist add the - * new_ method to the class anyway. - */ - public void replaceMethod(Method old, Method new_) { - if (new_ == null) { - throw new ClassGenException("Replacement method must not be null"); - } - int i = method_vec.indexOf(old); - if (i < 0) { - method_vec.add(new_); - } else { - method_vec.set(i, new_); - } - } - - /** - * Replace given field with new one. If the old one does not exist add the - * new_ field to the class anyway. - */ - public void replaceField(Field old, Field new_) { - if (new_ == null) { - throw new ClassGenException("Replacement method must not be null"); - } - int i = field_vec.indexOf(old); - if (i < 0) { - field_vec.add(new_); - } else { - field_vec.set(i, new_); - } - } - - /** - * Remove a field to this class. - * - * @param f - * field to remove - */ - public void removeField(Field f) { - field_vec.remove(f); - } - - public String getClassName() { - return class_name; - } - - public String getSuperclassName() { - return super_class_name; - } - - public String getFileName() { - return file_name; - } - - public void setClassName(String name) { - class_name = name.replace('/', '.'); - class_name_index = cp.addClass(name); - } - - public void setSuperclassName(String name) { - super_class_name = name.replace('/', '.'); - superclass_name_index = cp.addClass(name); - } - - public Method[] getMethods() { - return method_vec.toArray(new Method[method_vec.size()]); - } - - public void setMethods(Method[] methods) { - method_vec.clear(); - for (int m = 0; m < methods.length; m++) { - addMethod(methods[m]); - } - } - - public void setMethodAt(Method method, int pos) { - method_vec.set(pos, method); - } - - public Method getMethodAt(int pos) { - return method_vec.get(pos); - } - - public String[] getInterfaceNames() { - int size = interface_vec.size(); - String[] interfaces = new String[size]; - interface_vec.toArray(interfaces); - return interfaces; - } - - public int[] getInterfaces() { - int size = interface_vec.size(); - int[] interfaces = new int[size]; - for (int i = 0; i < size; i++) { - interfaces[i] = cp.addClass(interface_vec.get(i)); - } - return interfaces; - } - - public Field[] getFields() { - return field_vec.toArray(new Field[field_vec.size()]); - } - - public Attribute[] getAttributes() { - return attribute_vec.toArray(new Attribute[attribute_vec.size()]); - } - - public ConstantPoolGen getConstantPool() { - return cp; - } - - public void setConstantPool(ConstantPoolGen constant_pool) { - cp = constant_pool; - } - - public void setClassNameIndex(int class_name_index) { - this.class_name_index = class_name_index; - class_name = cp.getConstantPool() - .getConstantString(class_name_index, Constants.CONSTANT_Class) - .replace('/', '.'); - } - - public void setSuperclassNameIndex(int superclass_name_index) { - this.superclass_name_index = superclass_name_index; - super_class_name = cp - .getConstantPool() - .getConstantString(superclass_name_index, - Constants.CONSTANT_Class).replace('/', '.'); - } - - public int getSuperclassNameIndex() { - return superclass_name_index; - } - - public int getClassNameIndex() { - return class_name_index; - } - - private ArrayList observers; - - /** - * Add observer for this object. - */ - public void addObserver(ClassObserver o) { - if (observers == null) { - observers = new ArrayList(); - } - observers.add(o); - } - - /** - * Remove observer for this object. - */ - public void removeObserver(ClassObserver o) { - if (observers != null) { - observers.remove(o); - } - } - - /** - * Call notify() method on all observers. This method is not called - * automatically whenever the state has changed, but has to be called by the - * user after he has finished editing the object. - */ - public void update() { - if (observers != null) { - for (Iterator e = observers.iterator(); e.hasNext();) { - e.next().notify(this); - } - } - } - - @Override - public Object clone() { - try { - return super.clone(); - } catch (CloneNotSupportedException e) { - System.err.println(e); - return null; - } - } - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - /** - * @param comparator - * Comparison strategy object - */ - public static void setComparator(BCELComparator comparator) { - _cmp = comparator; - } - - /** - * Return value as defined by given BCELComparator strategy. By default two - * ClassGen objects are said to be equal when their class names are equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - return _cmp.equals(this, obj); - } - - /** - * Return value as defined by given BCELComparator strategy. By default - * return the hashcode of the class name. - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - return _cmp.hashCode(this); - } -} diff --git a/src/org/apache/bcel/generic/ClassGenException.java b/src/org/apache/bcel/generic/ClassGenException.java deleted file mode 100644 index 8848b1b..0000000 --- a/src/org/apache/bcel/generic/ClassGenException.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Thrown on internal errors. Extends RuntimeException so it hasn't to be - * declared in the throws clause every time. - * - * @version $Id: ClassGenException.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ClassGenException extends RuntimeException { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public ClassGenException() { - super(); - } - - public ClassGenException(String s) { - super(s); - } -} diff --git a/src/org/apache/bcel/generic/ClassObserver.java b/src/org/apache/bcel/generic/ClassObserver.java deleted file mode 100644 index ce63df1..0000000 --- a/src/org/apache/bcel/generic/ClassObserver.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Implement this interface if you're interested in changes to a ClassGen object - * and register yourself with addObserver(). - * - * @version $Id: ClassObserver.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface ClassObserver { - - public void notify(ClassGen clazz); -} diff --git a/src/org/apache/bcel/generic/CodeExceptionGen.java b/src/org/apache/bcel/generic/CodeExceptionGen.java deleted file mode 100644 index 5ccfba0..0000000 --- a/src/org/apache/bcel/generic/CodeExceptionGen.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.classfile.CodeException; - -/** - * This class represents an exception handler, i.e., specifies the region where - * a handler is active and an instruction where the actual handling is done. - * pool as parameters. Opposed to the JVM specification the end of the handled - * region is set to be inclusive, i.e. all instructions between start and end - * are protected including the start and end instructions (handles) themselves. - * The end of the region is automatically mapped to be exclusive when calling - * getCodeException(), i.e., there is no difference semantically. - * - * @version $Id: CodeExceptionGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see MethodGen - * @see CodeException - * @see InstructionHandle - */ -public final class CodeExceptionGen implements InstructionTargeter, Cloneable, - java.io.Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - private InstructionHandle start_pc; - private InstructionHandle end_pc; - private InstructionHandle handler_pc; - private ObjectType catch_type; - - /** - * Add an exception handler, i.e., specify region where a handler is active - * and an instruction where the actual handling is done. - * - * @param start_pc - * Start of handled region (inclusive) - * @param end_pc - * End of handled region (inclusive) - * @param handler_pc - * Where handling is done - * @param catch_type - * which exception is handled, null for ANY - */ - public CodeExceptionGen(InstructionHandle start_pc, - InstructionHandle end_pc, InstructionHandle handler_pc, - ObjectType catch_type) { - setStartPC(start_pc); - setEndPC(end_pc); - setHandlerPC(handler_pc); - this.catch_type = catch_type; - } - - /** - * Get CodeException object.
      - * - * This relies on that the instruction list has already been dumped to byte - * code or or that the `setPositions' methods has been called for the - * instruction list. - * - * @param cp - * constant pool - */ - public CodeException getCodeException(ConstantPoolGen cp) { - return new CodeException(start_pc.getPosition(), end_pc.getPosition() - + end_pc.getInstruction().getLength(), - handler_pc.getPosition(), (catch_type == null) ? 0 - : cp.addClass(catch_type)); - } - - /* - * Set start of handler - * - * @param start_pc Start of handled region (inclusive) - */ - public void setStartPC(InstructionHandle start_pc) { - BranchInstruction.notifyTarget(this.start_pc, start_pc, this); - this.start_pc = start_pc; - } - - /* - * Set end of handler - * - * @param end_pc End of handled region (inclusive) - */ - public void setEndPC(InstructionHandle end_pc) { - BranchInstruction.notifyTarget(this.end_pc, end_pc, this); - this.end_pc = end_pc; - } - - /* - * Set handler code - * - * @param handler_pc Start of handler - */ - public void setHandlerPC(InstructionHandle handler_pc) { - BranchInstruction.notifyTarget(this.handler_pc, handler_pc, this); - this.handler_pc = handler_pc; - } - - /** - * @param old_ih - * old target, either start or end - * @param new_ih - * new target - */ - @Override - public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { - boolean targeted = false; - if (start_pc == old_ih) { - targeted = true; - setStartPC(new_ih); - } - if (end_pc == old_ih) { - targeted = true; - setEndPC(new_ih); - } - if (handler_pc == old_ih) { - targeted = true; - setHandlerPC(new_ih); - } - if (!targeted) { - throw new ClassGenException("Not targeting " + old_ih + ", but {" - + start_pc + ", " + end_pc + ", " + handler_pc + "}"); - } - } - - /** - * @return true, if ih is target of this handler - */ - @Override - public boolean containsTarget(InstructionHandle ih) { - return (start_pc == ih) || (end_pc == ih) || (handler_pc == ih); - } - - /** Sets the type of the Exception to catch. Set 'null' for ANY. */ - public void setCatchType(ObjectType catch_type) { - this.catch_type = catch_type; - } - - /** Gets the type of the Exception to catch, 'null' for ANY. */ - public ObjectType getCatchType() { - return catch_type; - } - - /** - * @return start of handled region (inclusive) - */ - public InstructionHandle getStartPC() { - return start_pc; - } - - /** - * @return end of handled region (inclusive) - */ - public InstructionHandle getEndPC() { - return end_pc; - } - - /** - * @return start of handler - */ - public InstructionHandle getHandlerPC() { - return handler_pc; - } - - @Override - public String toString() { - return "CodeExceptionGen(" + start_pc + ", " + end_pc + ", " - + handler_pc + ")"; - } - - @Override - public Object clone() { - try { - return super.clone(); - } catch (CloneNotSupportedException e) { - System.err.println(e); - return null; - } - } -} diff --git a/src/org/apache/bcel/generic/CompoundInstruction.java b/src/org/apache/bcel/generic/CompoundInstruction.java deleted file mode 100644 index 2ad6f3a..0000000 --- a/src/org/apache/bcel/generic/CompoundInstruction.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Wrapper class for `compound' operations, virtual instructions that don't - * exist as byte code, but give a useful meaning. For example, the (virtual) - * PUSH instruction takes an arbitray argument and produces the appropiate code - * at dump time (ICONST, LDC, BIPUSH, ...). Also you can use the SWITCH - * instruction as a useful template for either LOOKUPSWITCH or TABLESWITCH. - * - * The interface provides the possibilty for the user to write `templates' or - * `macros' for such reuseable code patterns. - * - * @version $Id: CompoundInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see PUSH - * @see SWITCH - */ -public interface CompoundInstruction { - - public InstructionList getInstructionList(); -} diff --git a/src/org/apache/bcel/generic/ConstantPoolGen.java b/src/org/apache/bcel/generic/ConstantPoolGen.java deleted file mode 100644 index 96fe39b..0000000 --- a/src/org/apache/bcel/generic/ConstantPoolGen.java +++ /dev/null @@ -1,804 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.bcel.Constants; -import org.apache.bcel.classfile.Constant; -import org.apache.bcel.classfile.ConstantCP; -import org.apache.bcel.classfile.ConstantClass; -import org.apache.bcel.classfile.ConstantDouble; -import org.apache.bcel.classfile.ConstantFieldref; -import org.apache.bcel.classfile.ConstantFloat; -import org.apache.bcel.classfile.ConstantInteger; -import org.apache.bcel.classfile.ConstantInterfaceMethodref; -import org.apache.bcel.classfile.ConstantLong; -import org.apache.bcel.classfile.ConstantMethodref; -import org.apache.bcel.classfile.ConstantNameAndType; -import org.apache.bcel.classfile.ConstantPool; -import org.apache.bcel.classfile.ConstantString; -import org.apache.bcel.classfile.ConstantUtf8; - -/** - * This class is used to build up a constant pool. The user adds constants via - * `addXXX' methods, `addString', `addClass', etc.. These methods return an - * index into the constant pool. Finally, `getFinalConstantPool()' returns the - * constant pool built up. Intermediate versions of the constant pool can be - * obtained with `getConstantPool()'. A constant pool has capacity for - * Constants.MAX_SHORT entries. Note that the first (0) is used by the JVM and - * that Double and Long constants need two slots. - * - * @version $Id: ConstantPoolGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constant - */ -public class ConstantPoolGen implements java.io.Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected int size = 1024; // Inital size, sufficient in most cases - protected Constant[] constants = new Constant[size]; - protected int index = 1; // First entry (0) used by JVM - private static final String METHODREF_DELIM = ":"; - private static final String IMETHODREF_DELIM = "#"; - private static final String FIELDREF_DELIM = "&"; - private static final String NAT_DELIM = "%"; - - private static class Index implements java.io.Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - int index; - - Index(int i) { - index = i; - } - } - - /** - * Initialize with given array of constants. - * - * @param cs - * array of given constants, new ones will be appended - */ - public ConstantPoolGen(Constant[] cs) { - if (cs.length > size) { - size = cs.length; - constants = new Constant[size]; - } - System.arraycopy(cs, 0, constants, 0, cs.length); - if (cs.length > 0) { - index = cs.length; - } - for (int i = 1; i < index; i++) { - Constant c = constants[i]; - if (c instanceof ConstantString) { - ConstantString s = (ConstantString) c; - ConstantUtf8 u8 = (ConstantUtf8) constants[s.getStringIndex()]; - String key = u8.getBytes(); - if (!string_table.containsKey(key)) { - string_table.put(key, new Index(i)); - } - } else if (c instanceof ConstantClass) { - ConstantClass s = (ConstantClass) c; - ConstantUtf8 u8 = (ConstantUtf8) constants[s.getNameIndex()]; - String key = u8.getBytes(); - if (!class_table.containsKey(key)) { - class_table.put(key, new Index(i)); - } - } else if (c instanceof ConstantNameAndType) { - ConstantNameAndType n = (ConstantNameAndType) c; - ConstantUtf8 u8 = (ConstantUtf8) constants[n.getNameIndex()]; - ConstantUtf8 u8_2 = (ConstantUtf8) constants[n - .getSignatureIndex()]; - String key = u8.getBytes() + NAT_DELIM + u8_2.getBytes(); - if (!n_a_t_table.containsKey(key)) { - n_a_t_table.put(key, new Index(i)); - } - } else if (c instanceof ConstantUtf8) { - ConstantUtf8 u = (ConstantUtf8) c; - String key = u.getBytes(); - if (!utf8_table.containsKey(key)) { - utf8_table.put(key, new Index(i)); - } - } else if (c instanceof ConstantCP) { - ConstantCP m = (ConstantCP) c; - ConstantClass clazz = (ConstantClass) constants[m - .getClassIndex()]; - ConstantNameAndType n = (ConstantNameAndType) constants[m - .getNameAndTypeIndex()]; - ConstantUtf8 u8 = (ConstantUtf8) constants[clazz.getNameIndex()]; - String class_name = u8.getBytes().replace('/', '.'); - u8 = (ConstantUtf8) constants[n.getNameIndex()]; - String method_name = u8.getBytes(); - u8 = (ConstantUtf8) constants[n.getSignatureIndex()]; - String signature = u8.getBytes(); - String delim = METHODREF_DELIM; - if (c instanceof ConstantInterfaceMethodref) { - delim = IMETHODREF_DELIM; - } else if (c instanceof ConstantFieldref) { - delim = FIELDREF_DELIM; - } - String key = class_name + delim + method_name + delim - + signature; - if (!cp_table.containsKey(key)) { - cp_table.put(key, new Index(i)); - } - } - } - } - - /** - * Initialize with given constant pool. - */ - public ConstantPoolGen(ConstantPool cp) { - this(cp.getConstantPool()); - } - - /** - * Create empty constant pool. - */ - public ConstantPoolGen() { - } - - /** - * Resize internal array of constants. - */ - protected void adjustSize() { - if (index + 3 >= size) { - Constant[] cs = constants; - size *= 2; - constants = new Constant[size]; - System.arraycopy(cs, 0, constants, 0, index); - } - } - - private Map string_table = new HashMap(); - - /** - * Look for ConstantString in ConstantPool containing String `str'. - * - * @param str - * String to search for - * @return index on success, -1 otherwise - */ - public int lookupString(String str) { - Index index = string_table.get(str); - return (index != null) ? index.index : -1; - } - - /** - * Add a new String constant to the ConstantPool, if it is not already in - * there. - * - * @param str - * String to add - * @return index of entry - */ - public int addString(String str) { - int ret; - if ((ret = lookupString(str)) != -1) { - return ret; // Already in CP - } - int utf8 = addUtf8(str); - adjustSize(); - ConstantString s = new ConstantString(utf8); - ret = index; - constants[index++] = s; - if (!string_table.containsKey(str)) { - string_table.put(str, new Index(ret)); - } - return ret; - } - - private Map class_table = new HashMap(); - - /** - * Look for ConstantClass in ConstantPool named `str'. - * - * @param str - * String to search for - * @return index on success, -1 otherwise - */ - public int lookupClass(String str) { - Index index = class_table.get(str.replace('.', '/')); - return (index != null) ? index.index : -1; - } - - private int addClass_(String clazz) { - int ret; - if ((ret = lookupClass(clazz)) != -1) { - return ret; // Already in CP - } - adjustSize(); - ConstantClass c = new ConstantClass(addUtf8(clazz)); - ret = index; - constants[index++] = c; - if (!class_table.containsKey(clazz)) { - class_table.put(clazz, new Index(ret)); - } - return ret; - } - - /** - * Add a new Class reference to the ConstantPool, if it is not already in - * there. - * - * @param str - * Class to add - * @return index of entry - */ - public int addClass(String str) { - return addClass_(str.replace('.', '/')); - } - - /** - * Add a new Class reference to the ConstantPool for a given type. - * - * @param type - * Class to add - * @return index of entry - */ - public int addClass(ObjectType type) { - return addClass(type.getClassName()); - } - - /** - * Add a reference to an array class (e.g. String[][]) as needed by - * MULTIANEWARRAY instruction, e.g. to the ConstantPool. - * - * @param type - * type of array class - * @return index of entry - */ - public int addArrayClass(ArrayType type) { - return addClass_(type.getSignature()); - } - - /** - * Look for ConstantInteger in ConstantPool. - * - * @param n - * integer number to look for - * @return index on success, -1 otherwise - */ - public int lookupInteger(int n) { - for (int i = 1; i < index; i++) { - if (constants[i] instanceof ConstantInteger) { - ConstantInteger c = (ConstantInteger) constants[i]; - if (c.getBytes() == n) { - return i; - } - } - } - return -1; - } - - /** - * Add a new Integer constant to the ConstantPool, if it is not already in - * there. - * - * @param n - * integer number to add - * @return index of entry - */ - public int addInteger(int n) { - int ret; - if ((ret = lookupInteger(n)) != -1) { - return ret; // Already in CP - } - adjustSize(); - ret = index; - constants[index++] = new ConstantInteger(n); - return ret; - } - - /** - * Look for ConstantFloat in ConstantPool. - * - * @param n - * Float number to look for - * @return index on success, -1 otherwise - */ - public int lookupFloat(float n) { - int bits = Float.floatToIntBits(n); - for (int i = 1; i < index; i++) { - if (constants[i] instanceof ConstantFloat) { - ConstantFloat c = (ConstantFloat) constants[i]; - if (Float.floatToIntBits(c.getBytes()) == bits) { - return i; - } - } - } - return -1; - } - - /** - * Add a new Float constant to the ConstantPool, if it is not already in - * there. - * - * @param n - * Float number to add - * @return index of entry - */ - public int addFloat(float n) { - int ret; - if ((ret = lookupFloat(n)) != -1) { - return ret; // Already in CP - } - adjustSize(); - ret = index; - constants[index++] = new ConstantFloat(n); - return ret; - } - - private Map utf8_table = new HashMap(); - - /** - * Look for ConstantUtf8 in ConstantPool. - * - * @param n - * Utf8 string to look for - * @return index on success, -1 otherwise - */ - public int lookupUtf8(String n) { - Index index = utf8_table.get(n); - return (index != null) ? index.index : -1; - } - - /** - * Add a new Utf8 constant to the ConstantPool, if it is not already in - * there. - * - * @param n - * Utf8 string to add - * @return index of entry - */ - public int addUtf8(String n) { - int ret; - if ((ret = lookupUtf8(n)) != -1) { - return ret; // Already in CP - } - adjustSize(); - ret = index; - constants[index++] = new ConstantUtf8(n); - if (!utf8_table.containsKey(n)) { - utf8_table.put(n, new Index(ret)); - } - return ret; - } - - /** - * Look for ConstantLong in ConstantPool. - * - * @param n - * Long number to look for - * @return index on success, -1 otherwise - */ - public int lookupLong(long n) { - for (int i = 1; i < index; i++) { - if (constants[i] instanceof ConstantLong) { - ConstantLong c = (ConstantLong) constants[i]; - if (c.getBytes() == n) { - return i; - } - } - } - return -1; - } - - /** - * Add a new long constant to the ConstantPool, if it is not already in - * there. - * - * @param n - * Long number to add - * @return index of entry - */ - public int addLong(long n) { - int ret; - if ((ret = lookupLong(n)) != -1) { - return ret; // Already in CP - } - adjustSize(); - ret = index; - constants[index] = new ConstantLong(n); - index += 2; // Wastes one entry according to spec - return ret; - } - - /** - * Look for ConstantDouble in ConstantPool. - * - * @param n - * Double number to look for - * @return index on success, -1 otherwise - */ - public int lookupDouble(double n) { - long bits = Double.doubleToLongBits(n); - for (int i = 1; i < index; i++) { - if (constants[i] instanceof ConstantDouble) { - ConstantDouble c = (ConstantDouble) constants[i]; - if (Double.doubleToLongBits(c.getBytes()) == bits) { - return i; - } - } - } - return -1; - } - - /** - * Add a new double constant to the ConstantPool, if it is not already in - * there. - * - * @param n - * Double number to add - * @return index of entry - */ - public int addDouble(double n) { - int ret; - if ((ret = lookupDouble(n)) != -1) { - return ret; // Already in CP - } - adjustSize(); - ret = index; - constants[index] = new ConstantDouble(n); - index += 2; // Wastes one entry according to spec - return ret; - } - - private Map n_a_t_table = new HashMap(); - - /** - * Look for ConstantNameAndType in ConstantPool. - * - * @param name - * of variable/method - * @param signature - * of variable/method - * @return index on success, -1 otherwise - */ - public int lookupNameAndType(String name, String signature) { - Index _index = n_a_t_table.get(name + NAT_DELIM + signature); - return (_index != null) ? _index.index : -1; - } - - /** - * Add a new NameAndType constant to the ConstantPool if it is not already - * in there. - * - * @param name - * Name string to add - * @param signature - * signature string to add - * @return index of entry - */ - public int addNameAndType(String name, String signature) { - int ret; - int name_index, signature_index; - if ((ret = lookupNameAndType(name, signature)) != -1) { - return ret; // Already in CP - } - adjustSize(); - name_index = addUtf8(name); - signature_index = addUtf8(signature); - ret = index; - constants[index++] = new ConstantNameAndType(name_index, - signature_index); - String key = name + NAT_DELIM + signature; - if (!n_a_t_table.containsKey(key)) { - n_a_t_table.put(key, new Index(ret)); - } - return ret; - } - - private Map cp_table = new HashMap(); - - /** - * Look for ConstantMethodref in ConstantPool. - * - * @param class_name - * Where to find method - * @param method_name - * Guess what - * @param signature - * return and argument types - * @return index on success, -1 otherwise - */ - public int lookupMethodref(String class_name, String method_name, - String signature) { - Index index = cp_table.get(class_name + METHODREF_DELIM + method_name - + METHODREF_DELIM + signature); - return (index != null) ? index.index : -1; - } - - public int lookupMethodref(MethodGen method) { - return lookupMethodref(method.getClassName(), method.getName(), - method.getSignature()); - } - - /** - * Add a new Methodref constant to the ConstantPool, if it is not already in - * there. - * - * @param class_name - * class name string to add - * @param method_name - * method name string to add - * @param signature - * method signature string to add - * @return index of entry - */ - public int addMethodref(String class_name, String method_name, - String signature) { - int ret, class_index, name_and_type_index; - if ((ret = lookupMethodref(class_name, method_name, signature)) != -1) { - return ret; // Already in CP - } - adjustSize(); - name_and_type_index = addNameAndType(method_name, signature); - class_index = addClass(class_name); - ret = index; - constants[index++] = new ConstantMethodref(class_index, - name_and_type_index); - String key = class_name + METHODREF_DELIM + method_name - + METHODREF_DELIM + signature; - if (!cp_table.containsKey(key)) { - cp_table.put(key, new Index(ret)); - } - return ret; - } - - public int addMethodref(MethodGen method) { - return addMethodref(method.getClassName(), method.getName(), - method.getSignature()); - } - - /** - * Look for ConstantInterfaceMethodref in ConstantPool. - * - * @param class_name - * Where to find method - * @param method_name - * Guess what - * @param signature - * return and argument types - * @return index on success, -1 otherwise - */ - public int lookupInterfaceMethodref(String class_name, String method_name, - String signature) { - Index index = cp_table.get(class_name + IMETHODREF_DELIM + method_name - + IMETHODREF_DELIM + signature); - return (index != null) ? index.index : -1; - } - - public int lookupInterfaceMethodref(MethodGen method) { - return lookupInterfaceMethodref(method.getClassName(), - method.getName(), method.getSignature()); - } - - /** - * Add a new InterfaceMethodref constant to the ConstantPool, if it is not - * already in there. - * - * @param class_name - * class name string to add - * @param method_name - * method name string to add - * @param signature - * signature string to add - * @return index of entry - */ - public int addInterfaceMethodref(String class_name, String method_name, - String signature) { - int ret, class_index, name_and_type_index; - if ((ret = lookupInterfaceMethodref(class_name, method_name, signature)) != -1) { - return ret; // Already in CP - } - adjustSize(); - class_index = addClass(class_name); - name_and_type_index = addNameAndType(method_name, signature); - ret = index; - constants[index++] = new ConstantInterfaceMethodref(class_index, - name_and_type_index); - String key = class_name + IMETHODREF_DELIM + method_name - + IMETHODREF_DELIM + signature; - if (!cp_table.containsKey(key)) { - cp_table.put(key, new Index(ret)); - } - return ret; - } - - public int addInterfaceMethodref(MethodGen method) { - return addInterfaceMethodref(method.getClassName(), method.getName(), - method.getSignature()); - } - - /** - * Look for ConstantFieldref in ConstantPool. - * - * @param class_name - * Where to find method - * @param field_name - * Guess what - * @param signature - * return and argument types - * @return index on success, -1 otherwise - */ - public int lookupFieldref(String class_name, String field_name, - String signature) { - Index index = cp_table.get(class_name + FIELDREF_DELIM + field_name - + FIELDREF_DELIM + signature); - return (index != null) ? index.index : -1; - } - - /** - * Add a new Fieldref constant to the ConstantPool, if it is not already in - * there. - * - * @param class_name - * class name string to add - * @param field_name - * field name string to add - * @param signature - * signature string to add - * @return index of entry - */ - public int addFieldref(String class_name, String field_name, - String signature) { - int ret; - int class_index, name_and_type_index; - if ((ret = lookupFieldref(class_name, field_name, signature)) != -1) { - return ret; // Already in CP - } - adjustSize(); - class_index = addClass(class_name); - name_and_type_index = addNameAndType(field_name, signature); - ret = index; - constants[index++] = new ConstantFieldref(class_index, - name_and_type_index); - String key = class_name + FIELDREF_DELIM + field_name + FIELDREF_DELIM - + signature; - if (!cp_table.containsKey(key)) { - cp_table.put(key, new Index(ret)); - } - return ret; - } - - /** - * @param i - * index in constant pool - * @return constant pool entry at index i - */ - public Constant getConstant(int i) { - return constants[i]; - } - - /** - * Use with care! - * - * @param i - * index in constant pool - * @param c - * new constant pool entry at index i - */ - public void setConstant(int i, Constant c) { - constants[i] = c; - } - - /** - * @return intermediate constant pool - */ - public ConstantPool getConstantPool() { - return new ConstantPool(constants); - } - - /** - * @return current size of constant pool - */ - public int getSize() { - return index; - } - - /** - * @return constant pool with proper length - */ - public ConstantPool getFinalConstantPool() { - Constant[] cs = new Constant[index]; - System.arraycopy(constants, 0, cs, 0, index); - return new ConstantPool(cs); - } - - /** - * @return String representation. - */ - @Override - public String toString() { - StringBuffer buf = new StringBuffer(); - for (int i = 1; i < index; i++) { - buf.append(i).append(")").append(constants[i]).append("\n"); - } - return buf.toString(); - } - - /** - * Import constant from another ConstantPool and return new index. - */ - public int addConstant(Constant c, ConstantPoolGen cp) { - Constant[] constants = cp.getConstantPool().getConstantPool(); - switch (c.getTag()) { - case Constants.CONSTANT_String: { - ConstantString s = (ConstantString) c; - ConstantUtf8 u8 = (ConstantUtf8) constants[s.getStringIndex()]; - return addString(u8.getBytes()); - } - case Constants.CONSTANT_Class: { - ConstantClass s = (ConstantClass) c; - ConstantUtf8 u8 = (ConstantUtf8) constants[s.getNameIndex()]; - return addClass(u8.getBytes()); - } - case Constants.CONSTANT_NameAndType: { - ConstantNameAndType n = (ConstantNameAndType) c; - ConstantUtf8 u8 = (ConstantUtf8) constants[n.getNameIndex()]; - ConstantUtf8 u8_2 = (ConstantUtf8) constants[n.getSignatureIndex()]; - return addNameAndType(u8.getBytes(), u8_2.getBytes()); - } - case Constants.CONSTANT_Utf8: - return addUtf8(((ConstantUtf8) c).getBytes()); - case Constants.CONSTANT_Double: - return addDouble(((ConstantDouble) c).getBytes()); - case Constants.CONSTANT_Float: - return addFloat(((ConstantFloat) c).getBytes()); - case Constants.CONSTANT_Long: - return addLong(((ConstantLong) c).getBytes()); - case Constants.CONSTANT_Integer: - return addInteger(((ConstantInteger) c).getBytes()); - case Constants.CONSTANT_InterfaceMethodref: - case Constants.CONSTANT_Methodref: - case Constants.CONSTANT_Fieldref: { - ConstantCP m = (ConstantCP) c; - ConstantClass clazz = (ConstantClass) constants[m.getClassIndex()]; - ConstantNameAndType n = (ConstantNameAndType) constants[m - .getNameAndTypeIndex()]; - ConstantUtf8 u8 = (ConstantUtf8) constants[clazz.getNameIndex()]; - String class_name = u8.getBytes().replace('/', '.'); - u8 = (ConstantUtf8) constants[n.getNameIndex()]; - String name = u8.getBytes(); - u8 = (ConstantUtf8) constants[n.getSignatureIndex()]; - String signature = u8.getBytes(); - switch (c.getTag()) { - case Constants.CONSTANT_InterfaceMethodref: - return addInterfaceMethodref(class_name, name, signature); - case Constants.CONSTANT_Methodref: - return addMethodref(class_name, name, signature); - case Constants.CONSTANT_Fieldref: - return addFieldref(class_name, name, signature); - default: // Never reached - throw new RuntimeException("Unknown constant type " + c); - } - } - default: // Never reached - throw new RuntimeException("Unknown constant type " + c); - } - } -} diff --git a/src/org/apache/bcel/generic/ConstantPushInstruction.java b/src/org/apache/bcel/generic/ConstantPushInstruction.java deleted file mode 100644 index 7fcfea8..0000000 --- a/src/org/apache/bcel/generic/ConstantPushInstruction.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denotes a push instruction that produces a literal on the stack such as - * SIPUSH, BIPUSH, ICONST, etc. - * - * @version $Id: ConstantPushInstruction.java 386056 2006-03-15 11:31:56Z tcurdt - * $ - * @author M. Dahm - * - * @see ICONST - * @see SIPUSH - */ -public interface ConstantPushInstruction extends PushInstruction, - TypedInstruction { - - public Number getValue(); -} diff --git a/src/org/apache/bcel/generic/ConversionInstruction.java b/src/org/apache/bcel/generic/ConversionInstruction.java deleted file mode 100644 index 1cc400a..0000000 --- a/src/org/apache/bcel/generic/ConversionInstruction.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; - -/** - * Super class for the x2y family of instructions. - * - * @version $Id: ConversionInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class ConversionInstruction extends Instruction implements - TypedInstruction, StackProducer, StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ConversionInstruction() { - } - - /** - * @param opcode - * opcode of instruction - */ - protected ConversionInstruction(short opcode) { - super(opcode, (short) 1); - } - - /** - * @return type associated with the instruction - */ - @Override - public Type getType(ConstantPoolGen cp) { - switch (opcode) { - case Constants.D2I: - case Constants.F2I: - case Constants.L2I: - return Type.INT; - case Constants.D2F: - case Constants.I2F: - case Constants.L2F: - return Type.FLOAT; - case Constants.D2L: - case Constants.F2L: - case Constants.I2L: - return Type.LONG; - case Constants.F2D: - case Constants.I2D: - case Constants.L2D: - return Type.DOUBLE; - case Constants.I2B: - return Type.BYTE; - case Constants.I2C: - return Type.CHAR; - case Constants.I2S: - return Type.SHORT; - default: // Never reached - throw new ClassGenException("Unknown type " + opcode); - } - } -} diff --git a/src/org/apache/bcel/generic/D2F.java b/src/org/apache/bcel/generic/D2F.java deleted file mode 100644 index 8f733cb..0000000 --- a/src/org/apache/bcel/generic/D2F.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * D2F - Convert double to float - * - *
      - * Stack: ..., value.word1, value.word2 -> ..., result
      - * 
      - * - * @version $Id: D2F.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class D2F extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Convert double to float - */ - public D2F() { - super(org.apache.bcel.Constants.D2F); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitD2F(this); - } -} diff --git a/src/org/apache/bcel/generic/D2I.java b/src/org/apache/bcel/generic/D2I.java deleted file mode 100644 index d18b4c4..0000000 --- a/src/org/apache/bcel/generic/D2I.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * D2I - Convert double to int - * - *
      - * Stack: ..., value.word1, value.word2 -> ..., result
      - * 
      - * - * @version $Id: D2I.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class D2I extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Convert double to int - */ - public D2I() { - super(org.apache.bcel.Constants.D2I); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitD2I(this); - } -} diff --git a/src/org/apache/bcel/generic/D2L.java b/src/org/apache/bcel/generic/D2L.java deleted file mode 100644 index 39b653b..0000000 --- a/src/org/apache/bcel/generic/D2L.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * D2L - Convert double to long - * - *
      - * Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: D2L.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class D2L extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Convert double to long - */ - public D2L() { - super(org.apache.bcel.Constants.D2L); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitD2L(this); - } -} diff --git a/src/org/apache/bcel/generic/DADD.java b/src/org/apache/bcel/generic/DADD.java deleted file mode 100644 index 28b0625..0000000 --- a/src/org/apache/bcel/generic/DADD.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DADD - Add doubles - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result.word1, result1.word2 - * - * @version $Id: DADD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DADD extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Add doubles - */ - public DADD() { - super(org.apache.bcel.Constants.DADD); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDADD(this); - } -} diff --git a/src/org/apache/bcel/generic/DALOAD.java b/src/org/apache/bcel/generic/DALOAD.java deleted file mode 100644 index 1f91fd7..0000000 --- a/src/org/apache/bcel/generic/DALOAD.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DALOAD - Load double from array - * - *
      - * Stack: ..., arrayref, index -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: DALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DALOAD extends ArrayInstruction implements StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Load double from array - */ - public DALOAD() { - super(org.apache.bcel.Constants.DALOAD); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitDALOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/DASTORE.java b/src/org/apache/bcel/generic/DASTORE.java deleted file mode 100644 index 18b4166..0000000 --- a/src/org/apache/bcel/generic/DASTORE.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DASTORE - Store into double array - * - *
      - * Stack: ..., arrayref, index, value.word1, value.word2 -> ...
      - * 
      - * - * @version $Id: DASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DASTORE extends ArrayInstruction implements StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Store double into array - */ - public DASTORE() { - super(org.apache.bcel.Constants.DASTORE); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitDASTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/DCMPG.java b/src/org/apache/bcel/generic/DCMPG.java deleted file mode 100644 index ab68ced..0000000 --- a/src/org/apache/bcel/generic/DCMPG.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DCMPG - Compare doubles: value1 > value2 - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result - * - * @version $Id: DCMPG.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DCMPG extends Instruction implements TypedInstruction, - StackProducer, StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public DCMPG() { - super(org.apache.bcel.Constants.DCMPG, (short) 1); - } - - /** - * @return Type.DOUBLE - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.DOUBLE; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitDCMPG(this); - } -} diff --git a/src/org/apache/bcel/generic/DCMPL.java b/src/org/apache/bcel/generic/DCMPL.java deleted file mode 100644 index f3d98fd..0000000 --- a/src/org/apache/bcel/generic/DCMPL.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DCMPL - Compare doubles: value1 < value2 - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result - * - * @version $Id: DCMPL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DCMPL extends Instruction implements TypedInstruction, - StackProducer, StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public DCMPL() { - super(org.apache.bcel.Constants.DCMPL, (short) 1); - } - - /** - * @return Type.DOUBLE - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.DOUBLE; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitDCMPL(this); - } -} diff --git a/src/org/apache/bcel/generic/DCONST.java b/src/org/apache/bcel/generic/DCONST.java deleted file mode 100644 index 6fa8ad8..0000000 --- a/src/org/apache/bcel/generic/DCONST.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DCONST - Push 0.0 or 1.0, other values cause an exception - * - *
      - * Stack: ... -> ...,
      - * 
      - * - * @version $Id: DCONST.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DCONST extends Instruction implements ConstantPushInstruction, - TypedInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - private double value; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - DCONST() { - } - - public DCONST(double f) { - super(org.apache.bcel.Constants.DCONST_0, (short) 1); - if (f == 0.0) { - opcode = org.apache.bcel.Constants.DCONST_0; - } else if (f == 1.0) { - opcode = org.apache.bcel.Constants.DCONST_1; - } else { - throw new ClassGenException( - "DCONST can be used only for 0.0 and 1.0: " + f); - } - value = f; - } - - @Override - public Number getValue() { - return new Double(value); - } - - /** - * @return Type.DOUBLE - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.DOUBLE; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitDCONST(this); - } -} diff --git a/src/org/apache/bcel/generic/DDIV.java b/src/org/apache/bcel/generic/DDIV.java deleted file mode 100644 index 8df2367..0000000 --- a/src/org/apache/bcel/generic/DDIV.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DDIV - Divide doubles - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result.word1, result.word2 - * - * @version $Id: DDIV.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DDIV extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Divide doubles - */ - public DDIV() { - super(org.apache.bcel.Constants.DDIV); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDDIV(this); - } -} diff --git a/src/org/apache/bcel/generic/DLOAD.java b/src/org/apache/bcel/generic/DLOAD.java deleted file mode 100644 index c7a6cbb..0000000 --- a/src/org/apache/bcel/generic/DLOAD.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DLOAD - Load double from local variable - * - *
      - * Stack ... -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: DLOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DLOAD extends LoadInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - DLOAD() { - super(org.apache.bcel.Constants.DLOAD, - org.apache.bcel.Constants.DLOAD_0); - } - - /** - * Load double from local variable - * - * @param n - * index of local variable - */ - public DLOAD(int n) { - super(org.apache.bcel.Constants.DLOAD, - org.apache.bcel.Constants.DLOAD_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - super.accept(v); - v.visitDLOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/DMUL.java b/src/org/apache/bcel/generic/DMUL.java deleted file mode 100644 index 130f5df..0000000 --- a/src/org/apache/bcel/generic/DMUL.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DMUL - Multiply doubles - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result.word1, result.word2 - * - * @version $Id: DMUL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DMUL extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Multiply doubles - */ - public DMUL() { - super(org.apache.bcel.Constants.DMUL); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDMUL(this); - } -} diff --git a/src/org/apache/bcel/generic/DNEG.java b/src/org/apache/bcel/generic/DNEG.java deleted file mode 100644 index 8046d70..0000000 --- a/src/org/apache/bcel/generic/DNEG.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DNEG - Negate double - * - *
      - * Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: DNEG.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DNEG extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public DNEG() { - super(org.apache.bcel.Constants.DNEG); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDNEG(this); - } -} diff --git a/src/org/apache/bcel/generic/DREM.java b/src/org/apache/bcel/generic/DREM.java deleted file mode 100644 index 84599f0..0000000 --- a/src/org/apache/bcel/generic/DREM.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DREM - Remainder of doubles - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result.word1, result.word2 - * - * @version $Id: DREM.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DREM extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Remainder of doubles - */ - public DREM() { - super(org.apache.bcel.Constants.DREM); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDREM(this); - } -} diff --git a/src/org/apache/bcel/generic/DRETURN.java b/src/org/apache/bcel/generic/DRETURN.java deleted file mode 100644 index 1bf6d16..0000000 --- a/src/org/apache/bcel/generic/DRETURN.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DRETURN - Return double from method - * - *
      - * Stack: ..., value.word1, value.word2 -> <empty>
      - * 
      - * - * @version $Id: DRETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DRETURN extends ReturnInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Return double from method - */ - public DRETURN() { - super(org.apache.bcel.Constants.DRETURN); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitDRETURN(this); - } -} diff --git a/src/org/apache/bcel/generic/DSTORE.java b/src/org/apache/bcel/generic/DSTORE.java deleted file mode 100644 index 1040e06..0000000 --- a/src/org/apache/bcel/generic/DSTORE.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DSTORE - Store double into local variable - * - *
      - * Stack: ..., value.word1, value.word2 -> ...
      - * 
      - * - * @version $Id: DSTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DSTORE extends StoreInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - DSTORE() { - super(org.apache.bcel.Constants.DSTORE, - org.apache.bcel.Constants.DSTORE_0); - } - - /** - * Store double into local variable - * - * @param n - * index of local variable - */ - public DSTORE(int n) { - super(org.apache.bcel.Constants.DSTORE, - org.apache.bcel.Constants.DSTORE_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - super.accept(v); - v.visitDSTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/DSUB.java b/src/org/apache/bcel/generic/DSUB.java deleted file mode 100644 index 63a6f7b..0000000 --- a/src/org/apache/bcel/generic/DSUB.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DSUB - Substract doubles - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result.word1, result.word2 - * - * @version $Id: DSUB.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DSUB extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Substract doubles - */ - public DSUB() { - super(org.apache.bcel.Constants.DSUB); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitDSUB(this); - } -} diff --git a/src/org/apache/bcel/generic/DUP.java b/src/org/apache/bcel/generic/DUP.java deleted file mode 100644 index 7726a0a..0000000 --- a/src/org/apache/bcel/generic/DUP.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DUP - Duplicate top operand stack word - * - *
      - * Stack: ..., word -> ..., word, word
      - * 
      - * - * @version $Id: DUP.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DUP extends StackInstruction implements PushInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public DUP() { - super(org.apache.bcel.Constants.DUP); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitStackInstruction(this); - v.visitDUP(this); - } -} diff --git a/src/org/apache/bcel/generic/DUP2.java b/src/org/apache/bcel/generic/DUP2.java deleted file mode 100644 index e33c39f..0000000 --- a/src/org/apache/bcel/generic/DUP2.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DUP2 - Duplicate two top operand stack words - * - *
      - * Stack: ..., word2, word1 -> ..., word2, word1, word2, word1
      - * 
      - * - * @version $Id: DUP2.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DUP2 extends StackInstruction implements PushInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public DUP2() { - super(org.apache.bcel.Constants.DUP2); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitStackInstruction(this); - v.visitDUP2(this); - } -} diff --git a/src/org/apache/bcel/generic/DUP2_X1.java b/src/org/apache/bcel/generic/DUP2_X1.java deleted file mode 100644 index b35b991..0000000 --- a/src/org/apache/bcel/generic/DUP2_X1.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DUP2_X1 - Duplicate two top operand stack words and put three down - * - *
      - * Stack: ..., word3, word2, word1 -> ..., word2, word1, word3, word2, word1
      - * 
      - * - * @version $Id: DUP2_X1.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DUP2_X1 extends StackInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public DUP2_X1() { - super(org.apache.bcel.Constants.DUP2_X1); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackInstruction(this); - v.visitDUP2_X1(this); - } -} diff --git a/src/org/apache/bcel/generic/DUP2_X2.java b/src/org/apache/bcel/generic/DUP2_X2.java deleted file mode 100644 index f4bd487..0000000 --- a/src/org/apache/bcel/generic/DUP2_X2.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DUP2_X2 - Duplicate two top operand stack words and put four down - * - *
      - * Stack: ..., word4, word3, word2, word1 -> ..., word2, word1, word4, word3, word2, word1
      - * 
      - * - * @version $Id: DUP2_X2.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DUP2_X2 extends StackInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public DUP2_X2() { - super(org.apache.bcel.Constants.DUP2_X2); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackInstruction(this); - v.visitDUP2_X2(this); - } -} diff --git a/src/org/apache/bcel/generic/DUP_X1.java b/src/org/apache/bcel/generic/DUP_X1.java deleted file mode 100644 index 22a20da..0000000 --- a/src/org/apache/bcel/generic/DUP_X1.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DUP_X1 - Duplicate top operand stack word and put two down - * - *
      - * Stack: ..., word2, word1 -> ..., word1, word2, word1
      - * 
      - * - * @version $Id: DUP_X1.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DUP_X1 extends StackInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public DUP_X1() { - super(org.apache.bcel.Constants.DUP_X1); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackInstruction(this); - v.visitDUP_X1(this); - } -} diff --git a/src/org/apache/bcel/generic/DUP_X2.java b/src/org/apache/bcel/generic/DUP_X2.java deleted file mode 100644 index 0b94197..0000000 --- a/src/org/apache/bcel/generic/DUP_X2.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * DUP_X2 - Duplicate top operand stack word and put three down - * - *
      - * Stack: ..., word3, word2, word1 -> ..., word1, word3, word2, word1
      - * 
      - * - * @version $Id: DUP_X2.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class DUP_X2 extends StackInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public DUP_X2() { - super(org.apache.bcel.Constants.DUP_X2); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackInstruction(this); - v.visitDUP_X2(this); - } -} diff --git a/src/org/apache/bcel/generic/EmptyVisitor.java b/src/org/apache/bcel/generic/EmptyVisitor.java deleted file mode 100644 index b56c77b..0000000 --- a/src/org/apache/bcel/generic/EmptyVisitor.java +++ /dev/null @@ -1,746 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Supplies empty method bodies to be overridden by subclasses. - * - * @version $Id: EmptyVisitor.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class EmptyVisitor implements Visitor { - - @Override - public void visitStackInstruction(StackInstruction obj) { - } - - @Override - public void visitLocalVariableInstruction(LocalVariableInstruction obj) { - } - - @Override - public void visitBranchInstruction(BranchInstruction obj) { - } - - @Override - public void visitLoadClass(LoadClass obj) { - } - - @Override - public void visitFieldInstruction(FieldInstruction obj) { - } - - @Override - public void visitIfInstruction(IfInstruction obj) { - } - - @Override - public void visitConversionInstruction(ConversionInstruction obj) { - } - - @Override - public void visitPopInstruction(PopInstruction obj) { - } - - @Override - public void visitJsrInstruction(JsrInstruction obj) { - } - - @Override - public void visitGotoInstruction(GotoInstruction obj) { - } - - @Override - public void visitStoreInstruction(StoreInstruction obj) { - } - - @Override - public void visitTypedInstruction(TypedInstruction obj) { - } - - @Override - public void visitSelect(Select obj) { - } - - @Override - public void visitUnconditionalBranch(UnconditionalBranch obj) { - } - - @Override - public void visitPushInstruction(PushInstruction obj) { - } - - @Override - public void visitArithmeticInstruction(ArithmeticInstruction obj) { - } - - @Override - public void visitCPInstruction(CPInstruction obj) { - } - - @Override - public void visitInvokeInstruction(InvokeInstruction obj) { - } - - @Override - public void visitArrayInstruction(ArrayInstruction obj) { - } - - @Override - public void visitAllocationInstruction(AllocationInstruction obj) { - } - - @Override - public void visitReturnInstruction(ReturnInstruction obj) { - } - - @Override - public void visitFieldOrMethod(FieldOrMethod obj) { - } - - @Override - public void visitConstantPushInstruction(ConstantPushInstruction obj) { - } - - @Override - public void visitExceptionThrower(ExceptionThrower obj) { - } - - @Override - public void visitLoadInstruction(LoadInstruction obj) { - } - - @Override - public void visitVariableLengthInstruction(VariableLengthInstruction obj) { - } - - @Override - public void visitStackProducer(StackProducer obj) { - } - - @Override - public void visitStackConsumer(StackConsumer obj) { - } - - @Override - public void visitACONST_NULL(ACONST_NULL obj) { - } - - @Override - public void visitGETSTATIC(GETSTATIC obj) { - } - - @Override - public void visitIF_ICMPLT(IF_ICMPLT obj) { - } - - @Override - public void visitMONITOREXIT(MONITOREXIT obj) { - } - - @Override - public void visitIFLT(IFLT obj) { - } - - @Override - public void visitLSTORE(LSTORE obj) { - } - - @Override - public void visitPOP2(POP2 obj) { - } - - @Override - public void visitBASTORE(BASTORE obj) { - } - - @Override - public void visitISTORE(ISTORE obj) { - } - - @Override - public void visitCHECKCAST(CHECKCAST obj) { - } - - @Override - public void visitFCMPG(FCMPG obj) { - } - - @Override - public void visitI2F(I2F obj) { - } - - @Override - public void visitATHROW(ATHROW obj) { - } - - @Override - public void visitDCMPL(DCMPL obj) { - } - - @Override - public void visitARRAYLENGTH(ARRAYLENGTH obj) { - } - - @Override - public void visitDUP(DUP obj) { - } - - @Override - public void visitINVOKESTATIC(INVOKESTATIC obj) { - } - - @Override - public void visitLCONST(LCONST obj) { - } - - @Override - public void visitDREM(DREM obj) { - } - - @Override - public void visitIFGE(IFGE obj) { - } - - @Override - public void visitCALOAD(CALOAD obj) { - } - - @Override - public void visitLASTORE(LASTORE obj) { - } - - @Override - public void visitI2D(I2D obj) { - } - - @Override - public void visitDADD(DADD obj) { - } - - @Override - public void visitINVOKESPECIAL(INVOKESPECIAL obj) { - } - - @Override - public void visitIAND(IAND obj) { - } - - @Override - public void visitPUTFIELD(PUTFIELD obj) { - } - - @Override - public void visitILOAD(ILOAD obj) { - } - - @Override - public void visitDLOAD(DLOAD obj) { - } - - @Override - public void visitDCONST(DCONST obj) { - } - - @Override - public void visitNEW(NEW obj) { - } - - @Override - public void visitIFNULL(IFNULL obj) { - } - - @Override - public void visitLSUB(LSUB obj) { - } - - @Override - public void visitL2I(L2I obj) { - } - - @Override - public void visitISHR(ISHR obj) { - } - - @Override - public void visitTABLESWITCH(TABLESWITCH obj) { - } - - @Override - public void visitIINC(IINC obj) { - } - - @Override - public void visitDRETURN(DRETURN obj) { - } - - @Override - public void visitFSTORE(FSTORE obj) { - } - - @Override - public void visitDASTORE(DASTORE obj) { - } - - @Override - public void visitIALOAD(IALOAD obj) { - } - - @Override - public void visitDDIV(DDIV obj) { - } - - @Override - public void visitIF_ICMPGE(IF_ICMPGE obj) { - } - - @Override - public void visitLAND(LAND obj) { - } - - @Override - public void visitIDIV(IDIV obj) { - } - - @Override - public void visitLOR(LOR obj) { - } - - @Override - public void visitCASTORE(CASTORE obj) { - } - - @Override - public void visitFREM(FREM obj) { - } - - @Override - public void visitLDC(LDC obj) { - } - - @Override - public void visitBIPUSH(BIPUSH obj) { - } - - @Override - public void visitDSTORE(DSTORE obj) { - } - - @Override - public void visitF2L(F2L obj) { - } - - @Override - public void visitFMUL(FMUL obj) { - } - - @Override - public void visitLLOAD(LLOAD obj) { - } - - @Override - public void visitJSR(JSR obj) { - } - - @Override - public void visitFSUB(FSUB obj) { - } - - @Override - public void visitSASTORE(SASTORE obj) { - } - - @Override - public void visitALOAD(ALOAD obj) { - } - - @Override - public void visitDUP2_X2(DUP2_X2 obj) { - } - - @Override - public void visitRETURN(RETURN obj) { - } - - @Override - public void visitDALOAD(DALOAD obj) { - } - - @Override - public void visitSIPUSH(SIPUSH obj) { - } - - @Override - public void visitDSUB(DSUB obj) { - } - - @Override - public void visitL2F(L2F obj) { - } - - @Override - public void visitIF_ICMPGT(IF_ICMPGT obj) { - } - - @Override - public void visitF2D(F2D obj) { - } - - @Override - public void visitI2L(I2L obj) { - } - - @Override - public void visitIF_ACMPNE(IF_ACMPNE obj) { - } - - @Override - public void visitPOP(POP obj) { - } - - @Override - public void visitI2S(I2S obj) { - } - - @Override - public void visitIFEQ(IFEQ obj) { - } - - @Override - public void visitSWAP(SWAP obj) { - } - - @Override - public void visitIOR(IOR obj) { - } - - @Override - public void visitIREM(IREM obj) { - } - - @Override - public void visitIASTORE(IASTORE obj) { - } - - @Override - public void visitNEWARRAY(NEWARRAY obj) { - } - - @Override - public void visitINVOKEINTERFACE(INVOKEINTERFACE obj) { - } - - @Override - public void visitINEG(INEG obj) { - } - - @Override - public void visitLCMP(LCMP obj) { - } - - @Override - public void visitJSR_W(JSR_W obj) { - } - - @Override - public void visitMULTIANEWARRAY(MULTIANEWARRAY obj) { - } - - @Override - public void visitDUP_X2(DUP_X2 obj) { - } - - @Override - public void visitSALOAD(SALOAD obj) { - } - - @Override - public void visitIFNONNULL(IFNONNULL obj) { - } - - @Override - public void visitDMUL(DMUL obj) { - } - - @Override - public void visitIFNE(IFNE obj) { - } - - @Override - public void visitIF_ICMPLE(IF_ICMPLE obj) { - } - - @Override - public void visitLDC2_W(LDC2_W obj) { - } - - @Override - public void visitGETFIELD(GETFIELD obj) { - } - - @Override - public void visitLADD(LADD obj) { - } - - @Override - public void visitNOP(NOP obj) { - } - - @Override - public void visitFALOAD(FALOAD obj) { - } - - @Override - public void visitINSTANCEOF(INSTANCEOF obj) { - } - - @Override - public void visitIFLE(IFLE obj) { - } - - @Override - public void visitLXOR(LXOR obj) { - } - - @Override - public void visitLRETURN(LRETURN obj) { - } - - @Override - public void visitFCONST(FCONST obj) { - } - - @Override - public void visitIUSHR(IUSHR obj) { - } - - @Override - public void visitBALOAD(BALOAD obj) { - } - - @Override - public void visitDUP2(DUP2 obj) { - } - - @Override - public void visitIF_ACMPEQ(IF_ACMPEQ obj) { - } - - @Override - public void visitIMPDEP1(IMPDEP1 obj) { - } - - @Override - public void visitMONITORENTER(MONITORENTER obj) { - } - - @Override - public void visitLSHL(LSHL obj) { - } - - @Override - public void visitDCMPG(DCMPG obj) { - } - - @Override - public void visitD2L(D2L obj) { - } - - @Override - public void visitIMPDEP2(IMPDEP2 obj) { - } - - @Override - public void visitL2D(L2D obj) { - } - - @Override - public void visitRET(RET obj) { - } - - @Override - public void visitIFGT(IFGT obj) { - } - - @Override - public void visitIXOR(IXOR obj) { - } - - @Override - public void visitINVOKEVIRTUAL(INVOKEVIRTUAL obj) { - } - - @Override - public void visitFASTORE(FASTORE obj) { - } - - @Override - public void visitIRETURN(IRETURN obj) { - } - - @Override - public void visitIF_ICMPNE(IF_ICMPNE obj) { - } - - @Override - public void visitFLOAD(FLOAD obj) { - } - - @Override - public void visitLDIV(LDIV obj) { - } - - @Override - public void visitPUTSTATIC(PUTSTATIC obj) { - } - - @Override - public void visitAALOAD(AALOAD obj) { - } - - @Override - public void visitD2I(D2I obj) { - } - - @Override - public void visitIF_ICMPEQ(IF_ICMPEQ obj) { - } - - @Override - public void visitAASTORE(AASTORE obj) { - } - - @Override - public void visitARETURN(ARETURN obj) { - } - - @Override - public void visitDUP2_X1(DUP2_X1 obj) { - } - - @Override - public void visitFNEG(FNEG obj) { - } - - @Override - public void visitGOTO_W(GOTO_W obj) { - } - - @Override - public void visitD2F(D2F obj) { - } - - @Override - public void visitGOTO(GOTO obj) { - } - - @Override - public void visitISUB(ISUB obj) { - } - - @Override - public void visitF2I(F2I obj) { - } - - @Override - public void visitDNEG(DNEG obj) { - } - - @Override - public void visitICONST(ICONST obj) { - } - - @Override - public void visitFDIV(FDIV obj) { - } - - @Override - public void visitI2B(I2B obj) { - } - - @Override - public void visitLNEG(LNEG obj) { - } - - @Override - public void visitLREM(LREM obj) { - } - - @Override - public void visitIMUL(IMUL obj) { - } - - @Override - public void visitIADD(IADD obj) { - } - - @Override - public void visitLSHR(LSHR obj) { - } - - @Override - public void visitLOOKUPSWITCH(LOOKUPSWITCH obj) { - } - - @Override - public void visitDUP_X1(DUP_X1 obj) { - } - - @Override - public void visitFCMPL(FCMPL obj) { - } - - @Override - public void visitI2C(I2C obj) { - } - - @Override - public void visitLMUL(LMUL obj) { - } - - @Override - public void visitLUSHR(LUSHR obj) { - } - - @Override - public void visitISHL(ISHL obj) { - } - - @Override - public void visitLALOAD(LALOAD obj) { - } - - @Override - public void visitASTORE(ASTORE obj) { - } - - @Override - public void visitANEWARRAY(ANEWARRAY obj) { - } - - @Override - public void visitFRETURN(FRETURN obj) { - } - - @Override - public void visitFADD(FADD obj) { - } - - @Override - public void visitBREAKPOINT(BREAKPOINT obj) { - } -} diff --git a/src/org/apache/bcel/generic/ExceptionThrower.java b/src/org/apache/bcel/generic/ExceptionThrower.java deleted file mode 100644 index 706e2c8..0000000 --- a/src/org/apache/bcel/generic/ExceptionThrower.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denote an instruction that may throw a run-time or a linking exception (or - * both) during execution. This is not quite the truth as such; because all - * instructions may throw an java.lang.VirtualMachineError. These exceptions are - * omitted. - * - * The Lava Language Specification specifies exactly which RUN-TIME and - * which LINKING exceptions each instruction may throw which is reflected - * by the implementers. Due to the structure of the JVM specification, it may be - * possible that an Instruction implementing this interface returns a Class[] of - * size 0. - * - * Please note that we speak of an "exception" here when we mean any "Throwable" - * object; so this term is equally used for "Exception" and "Error" objects. - * - * @version $Id: ExceptionThrower.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author Enver Haase - */ -public interface ExceptionThrower { - - public java.lang.Class[] getExceptions(); -} diff --git a/src/org/apache/bcel/generic/F2D.java b/src/org/apache/bcel/generic/F2D.java deleted file mode 100644 index a924f43..0000000 --- a/src/org/apache/bcel/generic/F2D.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * F2D - Convert float to double - * - *
      - * Stack: ..., value -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: F2D.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class F2D extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Convert float to double - */ - public F2D() { - super(org.apache.bcel.Constants.F2D); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitF2D(this); - } -} diff --git a/src/org/apache/bcel/generic/F2I.java b/src/org/apache/bcel/generic/F2I.java deleted file mode 100644 index 31126f0..0000000 --- a/src/org/apache/bcel/generic/F2I.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * F2I - Convert float to int - * - *
      - * Stack: ..., value -> ..., result
      - * 
      - * - * @version $Id: F2I.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class F2I extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Convert float to int - */ - public F2I() { - super(org.apache.bcel.Constants.F2I); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitF2I(this); - } -} diff --git a/src/org/apache/bcel/generic/F2L.java b/src/org/apache/bcel/generic/F2L.java deleted file mode 100644 index a0bd284..0000000 --- a/src/org/apache/bcel/generic/F2L.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * F2L - Convert float to long - * - *
      - * Stack: ..., value -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: F2L.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class F2L extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Convert float to long - */ - public F2L() { - super(org.apache.bcel.Constants.F2L); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitF2L(this); - } -} diff --git a/src/org/apache/bcel/generic/FADD.java b/src/org/apache/bcel/generic/FADD.java deleted file mode 100644 index e08e360..0000000 --- a/src/org/apache/bcel/generic/FADD.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FADD - Add floats - * - *
      - * Stack: ..., value1, value2 -> result
      - * 
      - * - * @version $Id: FADD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FADD extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Add floats - */ - public FADD() { - super(org.apache.bcel.Constants.FADD); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFADD(this); - } -} diff --git a/src/org/apache/bcel/generic/FALOAD.java b/src/org/apache/bcel/generic/FALOAD.java deleted file mode 100644 index c718f6a..0000000 --- a/src/org/apache/bcel/generic/FALOAD.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FALOAD - Load float from array - * - *
      - * Stack: ..., arrayref, index -> ..., value
      - * 
      - * - * @version $Id: FALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FALOAD extends ArrayInstruction implements StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Load float from array - */ - public FALOAD() { - super(org.apache.bcel.Constants.FALOAD); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitFALOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/FASTORE.java b/src/org/apache/bcel/generic/FASTORE.java deleted file mode 100644 index 4e8e13e..0000000 --- a/src/org/apache/bcel/generic/FASTORE.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FASTORE - Store into float array - * - *
      - * Stack: ..., arrayref, index, value -> ...
      - * 
      - * - * @version $Id: FASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FASTORE extends ArrayInstruction implements StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Store float into array - */ - public FASTORE() { - super(org.apache.bcel.Constants.FASTORE); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitFASTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/FCMPG.java b/src/org/apache/bcel/generic/FCMPG.java deleted file mode 100644 index da9504c..0000000 --- a/src/org/apache/bcel/generic/FCMPG.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FCMPG - Compare floats: value1 > value2 - * - *
      - * Stack: ..., value1, value2 -> ..., result
      - * 
      - * - * @version $Id: FCMPG.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FCMPG extends Instruction implements TypedInstruction, - StackProducer, StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public FCMPG() { - super(org.apache.bcel.Constants.FCMPG, (short) 1); - } - - /** - * @return Type.FLOAT - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.FLOAT; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitFCMPG(this); - } -} diff --git a/src/org/apache/bcel/generic/FCMPL.java b/src/org/apache/bcel/generic/FCMPL.java deleted file mode 100644 index 5ca6078..0000000 --- a/src/org/apache/bcel/generic/FCMPL.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FCMPL - Compare floats: value1 < value2 - * - *
      - * Stack: ..., value1, value2 -> ..., result
      - * 
      - * - * @version $Id: FCMPL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FCMPL extends Instruction implements TypedInstruction, - StackProducer, StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public FCMPL() { - super(org.apache.bcel.Constants.FCMPL, (short) 1); - } - - /** - * @return Type.FLOAT - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.FLOAT; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitFCMPL(this); - } -} diff --git a/src/org/apache/bcel/generic/FCONST.java b/src/org/apache/bcel/generic/FCONST.java deleted file mode 100644 index 3f0c2dd..0000000 --- a/src/org/apache/bcel/generic/FCONST.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FCONST - Push 0.0, 1.0 or 2.0, other values cause an exception - * - *
      - * Stack: ... -> ...,
      - * 
      - * - * @version $Id: FCONST.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FCONST extends Instruction implements ConstantPushInstruction, - TypedInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - private float value; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FCONST() { - } - - public FCONST(float f) { - super(org.apache.bcel.Constants.FCONST_0, (short) 1); - if (f == 0.0) { - opcode = org.apache.bcel.Constants.FCONST_0; - } else if (f == 1.0) { - opcode = org.apache.bcel.Constants.FCONST_1; - } else if (f == 2.0) { - opcode = org.apache.bcel.Constants.FCONST_2; - } else { - throw new ClassGenException( - "FCONST can be used only for 0.0, 1.0 and 2.0: " + f); - } - value = f; - } - - @Override - public Number getValue() { - return new Float(value); - } - - /** - * @return Type.FLOAT - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.FLOAT; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitFCONST(this); - } -} diff --git a/src/org/apache/bcel/generic/FDIV.java b/src/org/apache/bcel/generic/FDIV.java deleted file mode 100644 index 5d8a840..0000000 --- a/src/org/apache/bcel/generic/FDIV.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FDIV - Divide floats - * - *
      - * Stack: ..., value1, value2 -> result
      - * 
      - * - * @version $Id: FDIV.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FDIV extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Divide floats - */ - public FDIV() { - super(org.apache.bcel.Constants.FDIV); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFDIV(this); - } -} diff --git a/src/org/apache/bcel/generic/FLOAD.java b/src/org/apache/bcel/generic/FLOAD.java deleted file mode 100644 index 5781361..0000000 --- a/src/org/apache/bcel/generic/FLOAD.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FLOAD - Load float from local variable - * - *
      - * Stack ... -> ..., result
      - * 
      - * - * @version $Id: FLOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FLOAD extends LoadInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FLOAD() { - super(org.apache.bcel.Constants.FLOAD, - org.apache.bcel.Constants.FLOAD_0); - } - - /** - * Load float from local variable - * - * @param n - * index of local variable - */ - public FLOAD(int n) { - super(org.apache.bcel.Constants.FLOAD, - org.apache.bcel.Constants.FLOAD_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - super.accept(v); - v.visitFLOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/FMUL.java b/src/org/apache/bcel/generic/FMUL.java deleted file mode 100644 index 90c21b0..0000000 --- a/src/org/apache/bcel/generic/FMUL.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FMUL - Multiply floats - * - *
      - * Stack: ..., value1, value2 -> result
      - * 
      - * - * @version $Id: FMUL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FMUL extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Multiply floats - */ - public FMUL() { - super(org.apache.bcel.Constants.FMUL); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFMUL(this); - } -} diff --git a/src/org/apache/bcel/generic/FNEG.java b/src/org/apache/bcel/generic/FNEG.java deleted file mode 100644 index fe31946..0000000 --- a/src/org/apache/bcel/generic/FNEG.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FNEG - Negate float - * - *
      - * Stack: ..., value -> ..., result
      - * 
      - * - * @version $Id: FNEG.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FNEG extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public FNEG() { - super(org.apache.bcel.Constants.FNEG); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFNEG(this); - } -} diff --git a/src/org/apache/bcel/generic/FREM.java b/src/org/apache/bcel/generic/FREM.java deleted file mode 100644 index 4ded950..0000000 --- a/src/org/apache/bcel/generic/FREM.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FREM - Remainder of floats - * - *
      - * Stack: ..., value1, value2 -> result
      - * 
      - * - * @version $Id: FREM.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FREM extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Remainder of floats - */ - public FREM() { - super(org.apache.bcel.Constants.FREM); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFREM(this); - } -} diff --git a/src/org/apache/bcel/generic/FRETURN.java b/src/org/apache/bcel/generic/FRETURN.java deleted file mode 100644 index 0946b65..0000000 --- a/src/org/apache/bcel/generic/FRETURN.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FRETURN - Return float from method - * - *
      - * Stack: ..., value -> <empty>
      - * 
      - * - * @version $Id: FRETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FRETURN extends ReturnInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Return float from method - */ - public FRETURN() { - super(org.apache.bcel.Constants.FRETURN); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitFRETURN(this); - } -} diff --git a/src/org/apache/bcel/generic/FSTORE.java b/src/org/apache/bcel/generic/FSTORE.java deleted file mode 100644 index fe0b2b7..0000000 --- a/src/org/apache/bcel/generic/FSTORE.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FSTORE - Store float into local variable - * - *
      - * Stack: ..., value -> ...
      - * 
      - * - * @version $Id: FSTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FSTORE extends StoreInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FSTORE() { - super(org.apache.bcel.Constants.FSTORE, - org.apache.bcel.Constants.FSTORE_0); - } - - /** - * Store float into local variable - * - * @param n - * index of local variable - */ - public FSTORE(int n) { - super(org.apache.bcel.Constants.FSTORE, - org.apache.bcel.Constants.FSTORE_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - super.accept(v); - v.visitFSTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/FSUB.java b/src/org/apache/bcel/generic/FSUB.java deleted file mode 100644 index 7aab799..0000000 --- a/src/org/apache/bcel/generic/FSUB.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * FSUB - Substract floats - * - *
      - * Stack: ..., value1, value2 -> result
      - * 
      - * - * @version $Id: FSUB.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class FSUB extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Substract floats - */ - public FSUB() { - super(org.apache.bcel.Constants.FSUB); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitFSUB(this); - } -} diff --git a/src/org/apache/bcel/generic/FieldGen.java b/src/org/apache/bcel/generic/FieldGen.java deleted file mode 100644 index 71658e2..0000000 --- a/src/org/apache/bcel/generic/FieldGen.java +++ /dev/null @@ -1,356 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import org.apache.bcel.Constants; -import org.apache.bcel.classfile.Attribute; -import org.apache.bcel.classfile.Constant; -import org.apache.bcel.classfile.ConstantObject; -import org.apache.bcel.classfile.ConstantPool; -import org.apache.bcel.classfile.ConstantValue; -import org.apache.bcel.classfile.Field; -import org.apache.bcel.classfile.Utility; -import org.apache.bcel.util.BCELComparator; - -/** - * Template class for building up a field. The only extraordinary thing one can - * do is to add a constant value attribute to a field (which must of course be - * compatible with to the declared type). - * - * @version $Id: FieldGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Field - */ -public class FieldGen extends FieldGenOrMethodGen { - - /** - * - */ - private static final long serialVersionUID = 1L; - private Object value = null; - private static BCELComparator _cmp = new BCELComparator() { - - @Override - public boolean equals(Object o1, Object o2) { - FieldGen THIS = (FieldGen) o1; - FieldGen THAT = (FieldGen) o2; - return THIS.getName().equals(THAT.getName()) - && THIS.getSignature().equals(THAT.getSignature()); - } - - @Override - public int hashCode(Object o) { - FieldGen THIS = (FieldGen) o; - return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); - } - }; - - /** - * Declare a field. If it is static (isStatic() == true) and has a basic - * type like int or String it may have an initial value associated with it - * as defined by setInitValue(). - * - * @param access_flags - * access qualifiers - * @param type - * field type - * @param name - * field name - * @param cp - * constant pool - */ - public FieldGen(int access_flags, Type type, String name, ConstantPoolGen cp) { - setAccessFlags(access_flags); - setType(type); - setName(name); - setConstantPool(cp); - } - - /** - * Instantiate from existing field. - * - * @param field - * Field object - * @param cp - * constant pool (must contain the same entries as the field's - * constant pool) - */ - public FieldGen(Field field, ConstantPoolGen cp) { - this(field.getAccessFlags(), Type.getType(field.getSignature()), field - .getName(), cp); - Attribute[] attrs = field.getAttributes(); - for (int i = 0; i < attrs.length; i++) { - if (attrs[i] instanceof ConstantValue) { - setValue(((ConstantValue) attrs[i]).getConstantValueIndex()); - } else { - addAttribute(attrs[i]); - } - } - } - - private void setValue(int index) { - ConstantPool cp = this.cp.getConstantPool(); - Constant c = cp.getConstant(index); - value = ((ConstantObject) c).getConstantValue(cp); - } - - /** - * Set (optional) initial value of field, otherwise it will be set to - * null/0/false by the JVM automatically. - */ - public void setInitValue(String str) { - checkType(new ObjectType("java.lang.String")); - if (str != null) { - value = str; - } - } - - public void setInitValue(long l) { - checkType(Type.LONG); - if (l != 0L) { - value = new Long(l); - } - } - - public void setInitValue(int i) { - checkType(Type.INT); - if (i != 0) { - value = new Integer(i); - } - } - - public void setInitValue(short s) { - checkType(Type.SHORT); - if (s != 0) { - value = new Integer(s); - } - } - - public void setInitValue(char c) { - checkType(Type.CHAR); - if (c != 0) { - value = new Integer(c); - } - } - - public void setInitValue(byte b) { - checkType(Type.BYTE); - if (b != 0) { - value = new Integer(b); - } - } - - public void setInitValue(boolean b) { - checkType(Type.BOOLEAN); - if (b) { - value = new Integer(1); - } - } - - public void setInitValue(float f) { - checkType(Type.FLOAT); - if (f != 0.0) { - value = new Float(f); - } - } - - public void setInitValue(double d) { - checkType(Type.DOUBLE); - if (d != 0.0) { - value = new Double(d); - } - } - - /** - * Remove any initial value. - */ - public void cancelInitValue() { - value = null; - } - - private void checkType(Type atype) { - if (type == null) { - throw new ClassGenException( - "You haven't defined the type of the field yet"); - } - if (!isFinal()) { - throw new ClassGenException( - "Only final fields may have an initial value!"); - } - if (!type.equals(atype)) { - throw new ClassGenException("Types are not compatible: " + type - + " vs. " + atype); - } - } - - /** - * Get field object after having set up all necessary values. - */ - public Field getField() { - String signature = getSignature(); - int name_index = cp.addUtf8(name); - int signature_index = cp.addUtf8(signature); - if (value != null) { - checkType(type); - int index = addConstant(); - addAttribute(new ConstantValue(cp.addUtf8("ConstantValue"), 2, - index, cp.getConstantPool())); - } - return new Field(access_flags, name_index, signature_index, - getAttributes(), cp.getConstantPool()); - } - - private int addConstant() { - switch (type.getType()) { - case Constants.T_INT: - case Constants.T_CHAR: - case Constants.T_BYTE: - case Constants.T_BOOLEAN: - case Constants.T_SHORT: - return cp.addInteger(((Integer) value).intValue()); - case Constants.T_FLOAT: - return cp.addFloat(((Float) value).floatValue()); - case Constants.T_DOUBLE: - return cp.addDouble(((Double) value).doubleValue()); - case Constants.T_LONG: - return cp.addLong(((Long) value).longValue()); - case Constants.T_REFERENCE: - return cp.addString(((String) value)); - default: - throw new RuntimeException("Oops: Unhandled : " + type.getType()); - } - } - - @Override - public String getSignature() { - return type.getSignature(); - } - - private List observers; - - /** - * Add observer for this object. - */ - public void addObserver(FieldObserver o) { - if (observers == null) { - observers = new ArrayList(); - } - observers.add(o); - } - - /** - * Remove observer for this object. - */ - public void removeObserver(FieldObserver o) { - if (observers != null) { - observers.remove(o); - } - } - - /** - * Call notify() method on all observers. This method is not called - * automatically whenever the state has changed, but has to be called by the - * user after he has finished editing the object. - */ - public void update() { - if (observers != null) { - for (Iterator e = observers.iterator(); e.hasNext();) { - e.next().notify(this); - } - } - } - - public String getInitValue() { - if (value != null) { - return value.toString(); - } else { - return null; - } - } - - /** - * Return string representation close to declaration format, `public static - * final short MAX = 100', e.g.. - * - * @return String representation of field - */ - @Override - public final String toString() { - String name, signature, access; // Short cuts to constant pool - access = Utility.accessToString(access_flags); - access = access.equals("") ? "" : (access + " "); - signature = type.toString(); - name = getName(); - StringBuffer buf = new StringBuffer(32); - buf.append(access).append(signature).append(" ").append(name); - String value = getInitValue(); - if (value != null) { - buf.append(" = ").append(value); - } - return buf.toString(); - } - - /** - * @return deep copy of this field - */ - public FieldGen copy(ConstantPoolGen cp) { - FieldGen fg = (FieldGen) clone(); - fg.setConstantPool(cp); - return fg; - } - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - /** - * @param comparator - * Comparison strategy object - */ - public static void setComparator(BCELComparator comparator) { - _cmp = comparator; - } - - /** - * Return value as defined by given BCELComparator strategy. By default two - * FieldGen objects are said to be equal when their names and signatures are - * equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - return _cmp.equals(this, obj); - } - - /** - * Return value as defined by given BCELComparator strategy. By default - * return the hashcode of the field's name XOR signature. - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - return _cmp.hashCode(this); - } -} diff --git a/src/org/apache/bcel/generic/FieldGenOrMethodGen.java b/src/org/apache/bcel/generic/FieldGenOrMethodGen.java deleted file mode 100644 index 172d0a6..0000000 --- a/src/org/apache/bcel/generic/FieldGenOrMethodGen.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.util.ArrayList; -import java.util.List; -import org.apache.bcel.Constants; -import org.apache.bcel.classfile.AccessFlags; -import org.apache.bcel.classfile.Attribute; - -/** - * Super class for FieldGen and MethodGen objects, since they have some methods - * in common! - * - * @version $Id: FieldGenOrMethodGen.java 410087 2006-05-29 12:12:19Z tcurdt $ - * @author M. Dahm - */ -public abstract class FieldGenOrMethodGen extends AccessFlags implements - NamedAndTyped, Cloneable { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected String name; - protected Type type; - protected ConstantPoolGen cp; - private List attribute_vec = new ArrayList(); - - protected FieldGenOrMethodGen() { - } - - @Override - public void setType(Type type) { - if (type.getType() == Constants.T_ADDRESS) { - throw new IllegalArgumentException("Type can not be " + type); - } - this.type = type; - } - - @Override - public Type getType() { - return type; - } - - /** - * @return name of method/field. - */ - @Override - public String getName() { - return name; - } - - @Override - public void setName(String name) { - this.name = name; - } - - public ConstantPoolGen getConstantPool() { - return cp; - } - - public void setConstantPool(ConstantPoolGen cp) { - this.cp = cp; - } - - /** - * Add an attribute to this method. Currently, the JVM knows about the - * `Code', `ConstantValue', `Synthetic' and `Exceptions' attributes. Other - * attributes will be ignored by the JVM but do no harm. - * - * @param a - * attribute to be added - */ - public void addAttribute(Attribute a) { - attribute_vec.add(a); - } - - /** - * Remove an attribute. - */ - public void removeAttribute(Attribute a) { - attribute_vec.remove(a); - } - - /** - * Remove all attributes. - */ - public void removeAttributes() { - attribute_vec.clear(); - } - - /** - * @return all attributes of this method. - */ - public Attribute[] getAttributes() { - Attribute[] attributes = new Attribute[attribute_vec.size()]; - attribute_vec.toArray(attributes); - return attributes; - } - - /** - * @return signature of method/field. - */ - public abstract String getSignature(); - - @Override - public Object clone() { - try { - return super.clone(); - } catch (CloneNotSupportedException e) { - System.err.println(e); - return null; - } - } -} diff --git a/src/org/apache/bcel/generic/FieldInstruction.java b/src/org/apache/bcel/generic/FieldInstruction.java deleted file mode 100644 index 936be24..0000000 --- a/src/org/apache/bcel/generic/FieldInstruction.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.classfile.ConstantPool; - -/** - * Super class for the GET/PUTxxx family of instructions. - * - * @version $Id: FieldInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class FieldInstruction extends FieldOrMethod implements - TypedInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FieldInstruction() { - } - - /** - * @param index - * to constant pool - */ - protected FieldInstruction(short opcode, int index) { - super(opcode, index); - } - - /** - * @return mnemonic for instruction with symbolic references resolved - */ - @Override - public String toString(ConstantPool cp) { - return org.apache.bcel.Constants.OPCODE_NAMES[opcode] - + " " - + cp.constantToString(index, - org.apache.bcel.Constants.CONSTANT_Fieldref); - } - - /** - * @return size of field (1 or 2) - */ - protected int getFieldSize(ConstantPoolGen cpg) { - return getType(cpg).getSize(); - } - - /** - * @return return type of referenced field - */ - @Override - public Type getType(ConstantPoolGen cpg) { - return getFieldType(cpg); - } - - /** - * @return type of field - */ - public Type getFieldType(ConstantPoolGen cpg) { - return Type.getType(getSignature(cpg)); - } - - /** - * @return name of referenced field. - */ - public String getFieldName(ConstantPoolGen cpg) { - return getName(cpg); - } -} diff --git a/src/org/apache/bcel/generic/FieldObserver.java b/src/org/apache/bcel/generic/FieldObserver.java deleted file mode 100644 index 9ec13b4..0000000 --- a/src/org/apache/bcel/generic/FieldObserver.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Imnplement this interface if you're interested in changes to a FieldGen - * object and register yourself with addObserver(). - * - * @version $Id: FieldObserver.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface FieldObserver { - - public void notify(FieldGen field); -} diff --git a/src/org/apache/bcel/generic/FieldOrMethod.java b/src/org/apache/bcel/generic/FieldOrMethod.java deleted file mode 100644 index 9599221..0000000 --- a/src/org/apache/bcel/generic/FieldOrMethod.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.classfile.ConstantCP; -import org.apache.bcel.classfile.ConstantNameAndType; -import org.apache.bcel.classfile.ConstantPool; -import org.apache.bcel.classfile.ConstantUtf8; - -/** - * Super class for InvokeInstruction and FieldInstruction, since they have some - * methods in common! - * - * @version $Id: FieldOrMethod.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class FieldOrMethod extends CPInstruction implements LoadClass { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - FieldOrMethod() { - } - - /** - * @param index - * to constant pool - */ - protected FieldOrMethod(short opcode, int index) { - super(opcode, index); - } - - /** - * @return signature of referenced method/field. - */ - public String getSignature(ConstantPoolGen cpg) { - ConstantPool cp = cpg.getConstantPool(); - ConstantCP cmr = (ConstantCP) cp.getConstant(index); - ConstantNameAndType cnat = (ConstantNameAndType) cp.getConstant(cmr - .getNameAndTypeIndex()); - return ((ConstantUtf8) cp.getConstant(cnat.getSignatureIndex())) - .getBytes(); - } - - /** - * @return name of referenced method/field. - */ - public String getName(ConstantPoolGen cpg) { - ConstantPool cp = cpg.getConstantPool(); - ConstantCP cmr = (ConstantCP) cp.getConstant(index); - ConstantNameAndType cnat = (ConstantNameAndType) cp.getConstant(cmr - .getNameAndTypeIndex()); - return ((ConstantUtf8) cp.getConstant(cnat.getNameIndex())).getBytes(); - } - - /** - * @return name of the referenced class/interface - */ - public String getClassName(ConstantPoolGen cpg) { - ConstantPool cp = cpg.getConstantPool(); - ConstantCP cmr = (ConstantCP) cp.getConstant(index); - String className = cp.getConstantString(cmr.getClassIndex(), - org.apache.bcel.Constants.CONSTANT_Class); - if (className.startsWith("[")) { - // Turn array classes into java.lang.Object. - return "java.lang.Object"; - } - return className.replace('/', '.'); - } - - /** - * @return type of the referenced class/interface - * @deprecated If the instruction references an array class, the ObjectType - * returned will be invalid. Use getReferenceType() instead. - */ - @Deprecated - public ObjectType getClassType(ConstantPoolGen cpg) { - return new ObjectType(getClassName(cpg)); - } - - /** - * Return the reference type representing the class, interface, or array - * class referenced by the instruction. - * - * @param cpg - * the ConstantPoolGen used to create the instruction - * @return an ObjectType (if the referenced class type is a class or - * interface), or an ArrayType (if the referenced class type is an - * array class) - */ - public ReferenceType getReferenceType(ConstantPoolGen cpg) { - ConstantPool cp = cpg.getConstantPool(); - ConstantCP cmr = (ConstantCP) cp.getConstant(index); - String className = cp.getConstantString(cmr.getClassIndex(), - org.apache.bcel.Constants.CONSTANT_Class); - if (className.startsWith("[")) { - return (ArrayType) Type.getType(className); - } else { - className = className.replace('/', '.'); - return new ObjectType(className); - } - } - - /** - * @return type of the referenced class/interface - */ - @Override - public ObjectType getLoadClassType(ConstantPoolGen cpg) { - return getClassType(cpg); - } -} diff --git a/src/org/apache/bcel/generic/GETFIELD.java b/src/org/apache/bcel/generic/GETFIELD.java deleted file mode 100644 index d72d012..0000000 --- a/src/org/apache/bcel/generic/GETFIELD.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; -import org.apache.bcel.ExceptionConstants; - -/** - * GETFIELD - Fetch field from object - * - *
      - * Stack: ..., objectref -> ..., value
      - * 
      - * - * OR - * - *
      - * Stack: ..., objectref -> ..., value.word1, value.word2
      - * 
      - * - * @version $Id: GETFIELD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class GETFIELD extends FieldInstruction implements ExceptionThrower, - StackConsumer, StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GETFIELD() { - } - - public GETFIELD(int index) { - super(Constants.GETFIELD, index); - } - - @Override - public int produceStack(ConstantPoolGen cpg) { - return getFieldSize(cpg); - } - - @Override - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, - 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; - return cs; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitFieldInstruction(this); - v.visitGETFIELD(this); - } -} diff --git a/src/org/apache/bcel/generic/GETSTATIC.java b/src/org/apache/bcel/generic/GETSTATIC.java deleted file mode 100644 index 61c2975..0000000 --- a/src/org/apache/bcel/generic/GETSTATIC.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; -import org.apache.bcel.ExceptionConstants; - -/** - * GETSTATIC - Fetch static field from class - * - *
      - * Stack: ..., -> ..., value
      - * 
      - * - * OR - * - *
      - * Stack: ..., -> ..., value.word1, value.word2
      - * 
      - * - * @version $Id: GETSTATIC.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class GETSTATIC extends FieldInstruction implements PushInstruction, - ExceptionThrower { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GETSTATIC() { - } - - public GETSTATIC(int index) { - super(Constants.GETSTATIC, index); - } - - @Override - public int produceStack(ConstantPoolGen cpg) { - return getFieldSize(cpg); - } - - @Override - public Class[] getExceptions() { - Class[] cs = new Class[1 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, - 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - return cs; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitFieldInstruction(this); - v.visitGETSTATIC(this); - } -} diff --git a/src/org/apache/bcel/generic/GOTO.java b/src/org/apache/bcel/generic/GOTO.java deleted file mode 100644 index 9dc4d7d..0000000 --- a/src/org/apache/bcel/generic/GOTO.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -/** - * GOTO - Branch always (to relative offset, not absolute address) - * - * @version $Id: GOTO.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class GOTO extends GotoInstruction implements VariableLengthInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GOTO() { - } - - public GOTO(InstructionHandle target) { - super(org.apache.bcel.Constants.GOTO, target); - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - index = getTargetOffset(); - if (opcode == org.apache.bcel.Constants.GOTO) { - super.dump(out); - } else { // GOTO_W - index = getTargetOffset(); - out.writeByte(opcode); - out.writeInt(index); - } - } - - /** - * Called in pass 2 of InstructionList.setPositions() in order to update the - * branch target, that may shift due to variable length instructions. - */ - @Override - protected int updatePosition(int offset, int max_offset) { - int i = getTargetOffset(); // Depending on old position value - position += offset; // Position may be shifted by preceding expansions - if (Math.abs(i) >= (32767 - max_offset)) { // to large for short - // (estimate) - opcode = org.apache.bcel.Constants.GOTO_W; - length = 5; - return 2; // 5 - 3 - } - return 0; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitVariableLengthInstruction(this); - v.visitUnconditionalBranch(this); - v.visitBranchInstruction(this); - v.visitGotoInstruction(this); - v.visitGOTO(this); - } -} diff --git a/src/org/apache/bcel/generic/GOTO_W.java b/src/org/apache/bcel/generic/GOTO_W.java deleted file mode 100644 index 228d95e..0000000 --- a/src/org/apache/bcel/generic/GOTO_W.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * GOTO_W - Branch always (to relative offset, not absolute address) - * - * @version $Id: GOTO_W.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class GOTO_W extends GotoInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GOTO_W() { - } - - public GOTO_W(InstructionHandle target) { - super(org.apache.bcel.Constants.GOTO_W, target); - length = 5; - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - index = getTargetOffset(); - out.writeByte(opcode); - out.writeInt(index); - } - - /** - * Read needed data (e.g. index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - index = bytes.readInt(); - length = 5; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitUnconditionalBranch(this); - v.visitBranchInstruction(this); - v.visitGotoInstruction(this); - v.visitGOTO_W(this); - } -} diff --git a/src/org/apache/bcel/generic/GotoInstruction.java b/src/org/apache/bcel/generic/GotoInstruction.java deleted file mode 100644 index b0ceb55..0000000 --- a/src/org/apache/bcel/generic/GotoInstruction.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Super class for GOTO - * - * @version $Id: GotoInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class GotoInstruction extends BranchInstruction implements - UnconditionalBranch { - - /** - * - */ - private static final long serialVersionUID = 1L; - - GotoInstruction(short opcode, InstructionHandle target) { - super(opcode, target); - } - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - GotoInstruction() { - } -} diff --git a/src/org/apache/bcel/generic/I2B.java b/src/org/apache/bcel/generic/I2B.java deleted file mode 100644 index 1f609d4..0000000 --- a/src/org/apache/bcel/generic/I2B.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * I2B - Convert int to byte - * - *
      - * Stack: ..., value -> ..., result
      - * 
      - * - * @version $Id: I2B.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class I2B extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Convert int to byte - */ - public I2B() { - super(org.apache.bcel.Constants.I2B); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2B(this); - } -} diff --git a/src/org/apache/bcel/generic/I2C.java b/src/org/apache/bcel/generic/I2C.java deleted file mode 100644 index 87c7ee2..0000000 --- a/src/org/apache/bcel/generic/I2C.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * I2C - Convert int to char - * - *
      - * Stack: ..., value -> ..., result
      - * 
      - * - * @version $Id: I2C.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class I2C extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Convert int to char - */ - public I2C() { - super(org.apache.bcel.Constants.I2C); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2C(this); - } -} diff --git a/src/org/apache/bcel/generic/I2D.java b/src/org/apache/bcel/generic/I2D.java deleted file mode 100644 index 434685d..0000000 --- a/src/org/apache/bcel/generic/I2D.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * I2D - Convert int to double - * - *
      - * Stack: ..., value -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: I2D.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class I2D extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Convert int to double - */ - public I2D() { - super(org.apache.bcel.Constants.I2D); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2D(this); - } -} diff --git a/src/org/apache/bcel/generic/I2F.java b/src/org/apache/bcel/generic/I2F.java deleted file mode 100644 index e4ffa33..0000000 --- a/src/org/apache/bcel/generic/I2F.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * I2F - Convert int to float - * - *
      - * Stack: ..., value -> ..., result
      - * 
      - * - * @version $Id: I2F.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class I2F extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Convert int to float - */ - public I2F() { - super(org.apache.bcel.Constants.I2F); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2F(this); - } -} diff --git a/src/org/apache/bcel/generic/I2L.java b/src/org/apache/bcel/generic/I2L.java deleted file mode 100644 index f63e22d..0000000 --- a/src/org/apache/bcel/generic/I2L.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * I2L - Convert int to long - * - *
      - * Stack: ..., value -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: I2L.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class I2L extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Convert int to long - */ - public I2L() { - super(org.apache.bcel.Constants.I2L); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2L(this); - } -} diff --git a/src/org/apache/bcel/generic/I2S.java b/src/org/apache/bcel/generic/I2S.java deleted file mode 100644 index 492d3ef..0000000 --- a/src/org/apache/bcel/generic/I2S.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * I2S - Convert int to short - * - *
      - * Stack: ..., value -> ..., result
      - * 
      - * - * @version $Id: I2S.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class I2S extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public I2S() { - super(org.apache.bcel.Constants.I2S); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitI2S(this); - } -} diff --git a/src/org/apache/bcel/generic/IADD.java b/src/org/apache/bcel/generic/IADD.java deleted file mode 100644 index ad8bbcf..0000000 --- a/src/org/apache/bcel/generic/IADD.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IADD - Add ints - * - *
      - * Stack: ..., value1, value2 -> result
      - * 
      - * - * @version $Id: IADD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IADD extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Add ints - */ - public IADD() { - super(org.apache.bcel.Constants.IADD); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIADD(this); - } -} diff --git a/src/org/apache/bcel/generic/IALOAD.java b/src/org/apache/bcel/generic/IALOAD.java deleted file mode 100644 index 1e43cf9..0000000 --- a/src/org/apache/bcel/generic/IALOAD.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IALOAD - Load int from array - * - *
      - * Stack: ..., arrayref, index -> ..., value
      - * 
      - * - * @version $Id: IALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IALOAD extends ArrayInstruction implements StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Load int from array - */ - public IALOAD() { - super(org.apache.bcel.Constants.IALOAD); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitIALOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/IAND.java b/src/org/apache/bcel/generic/IAND.java deleted file mode 100644 index 85ab840..0000000 --- a/src/org/apache/bcel/generic/IAND.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IAND - Bitwise AND int - * - *
      - * Stack: ..., value1, value2 -> ..., result
      - * 
      - * - * @version $Id: IAND.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IAND extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public IAND() { - super(org.apache.bcel.Constants.IAND); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIAND(this); - } -} diff --git a/src/org/apache/bcel/generic/IASTORE.java b/src/org/apache/bcel/generic/IASTORE.java deleted file mode 100644 index 0a159db..0000000 --- a/src/org/apache/bcel/generic/IASTORE.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IASTORE - Store into int array - * - *
      - * Stack: ..., arrayref, index, value -> ...
      - * 
      - * - * @version $Id: IASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IASTORE extends ArrayInstruction implements StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Store into int array - */ - public IASTORE() { - super(org.apache.bcel.Constants.IASTORE); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitIASTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/ICONST.java b/src/org/apache/bcel/generic/ICONST.java deleted file mode 100644 index 6eab6d5..0000000 --- a/src/org/apache/bcel/generic/ICONST.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * ICONST - Push value between -1, ..., 5, other values cause an exception - * - *
      - * Stack: ... -> ...,
      - * 
      - * - * @version $Id: ICONST.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ICONST extends Instruction implements ConstantPushInstruction, - TypedInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int value; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ICONST() { - } - - public ICONST(int i) { - super(org.apache.bcel.Constants.ICONST_0, (short) 1); - if ((i >= -1) && (i <= 5)) { - opcode = (short) (org.apache.bcel.Constants.ICONST_0 + i); // Even - // works - // for i - // == -1 - } else { - throw new ClassGenException( - "ICONST can be used only for value between -1 and 5: " + i); - } - value = i; - } - - @Override - public Number getValue() { - return new Integer(value); - } - - /** - * @return Type.INT - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.INT; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitICONST(this); - } -} diff --git a/src/org/apache/bcel/generic/IDIV.java b/src/org/apache/bcel/generic/IDIV.java deleted file mode 100644 index db8cfeb..0000000 --- a/src/org/apache/bcel/generic/IDIV.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IDIV - Divide ints - * - *
      - * Stack: ..., value1, value2 -> result
      - * 
      - * - * @version $Id: IDIV.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IDIV extends ArithmeticInstruction implements ExceptionThrower { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Divide ints - */ - public IDIV() { - super(org.apache.bcel.Constants.IDIV); - } - - /** - * @return exceptions this instruction may cause - */ - @Override - public Class[] getExceptions() { - return new Class[] { org.apache.bcel.ExceptionConstants.ARITHMETIC_EXCEPTION }; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIDIV(this); - } -} diff --git a/src/org/apache/bcel/generic/IFEQ.java b/src/org/apache/bcel/generic/IFEQ.java deleted file mode 100644 index 90f05a0..0000000 --- a/src/org/apache/bcel/generic/IFEQ.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IFEQ - Branch if int comparison with zero succeeds - * - *
      - * Stack: ..., value -> ...
      - * 
      - * - * @version $Id: IFEQ.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFEQ extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFEQ() { - } - - public IFEQ(InstructionHandle target) { - super(org.apache.bcel.Constants.IFEQ, target); - } - - /** - * @return negation of instruction, e.g. IFEQ.negate() == IFNE - */ - @Override - public IfInstruction negate() { - return new IFNE(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFEQ(this); - } -} diff --git a/src/org/apache/bcel/generic/IFGE.java b/src/org/apache/bcel/generic/IFGE.java deleted file mode 100644 index 93a4314..0000000 --- a/src/org/apache/bcel/generic/IFGE.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IFGE - Branch if int comparison with zero succeeds - * - *
      - * Stack: ..., value -> ...
      - * 
      - * - * @version $Id: IFGE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFGE extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFGE() { - } - - public IFGE(InstructionHandle target) { - super(org.apache.bcel.Constants.IFGE, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IFLT(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFGE(this); - } -} diff --git a/src/org/apache/bcel/generic/IFGT.java b/src/org/apache/bcel/generic/IFGT.java deleted file mode 100644 index 1b74414..0000000 --- a/src/org/apache/bcel/generic/IFGT.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IFGT - Branch if int comparison with zero succeeds - * - *
      - * Stack: ..., value -> ...
      - * 
      - * - * @version $Id: IFGT.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFGT extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFGT() { - } - - public IFGT(InstructionHandle target) { - super(org.apache.bcel.Constants.IFGT, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IFLE(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFGT(this); - } -} diff --git a/src/org/apache/bcel/generic/IFLE.java b/src/org/apache/bcel/generic/IFLE.java deleted file mode 100644 index 61326d6..0000000 --- a/src/org/apache/bcel/generic/IFLE.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IFLE - Branch if int comparison with zero succeeds - * - *
      - * Stack: ..., value -> ...
      - * 
      - * - * @version $Id: IFLE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFLE extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFLE() { - } - - public IFLE(InstructionHandle target) { - super(org.apache.bcel.Constants.IFLE, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IFGT(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFLE(this); - } -} diff --git a/src/org/apache/bcel/generic/IFLT.java b/src/org/apache/bcel/generic/IFLT.java deleted file mode 100644 index 62c323c..0000000 --- a/src/org/apache/bcel/generic/IFLT.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IFLT - Branch if int comparison with zero succeeds - * - *
      - * Stack: ..., value -> ...
      - * 
      - * - * @version $Id: IFLT.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFLT extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFLT() { - } - - public IFLT(InstructionHandle target) { - super(org.apache.bcel.Constants.IFLT, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IFGE(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFLT(this); - } -} diff --git a/src/org/apache/bcel/generic/IFNE.java b/src/org/apache/bcel/generic/IFNE.java deleted file mode 100644 index b76f955..0000000 --- a/src/org/apache/bcel/generic/IFNE.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IFNE - Branch if int comparison with zero succeeds - * - *
      - * Stack: ..., value -> ...
      - * 
      - * - * @version $Id: IFNE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFNE extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFNE() { - } - - public IFNE(InstructionHandle target) { - super(org.apache.bcel.Constants.IFNE, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IFEQ(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFNE(this); - } -} diff --git a/src/org/apache/bcel/generic/IFNONNULL.java b/src/org/apache/bcel/generic/IFNONNULL.java deleted file mode 100644 index 8513726..0000000 --- a/src/org/apache/bcel/generic/IFNONNULL.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IFNONNULL - Branch if reference is not null - * - *
      - * Stack: ..., reference -> ...
      - * 
      - * - * @version $Id: IFNONNULL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFNONNULL extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFNONNULL() { - } - - public IFNONNULL(InstructionHandle target) { - super(org.apache.bcel.Constants.IFNONNULL, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IFNULL(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFNONNULL(this); - } -} diff --git a/src/org/apache/bcel/generic/IFNULL.java b/src/org/apache/bcel/generic/IFNULL.java deleted file mode 100644 index 4936f2c..0000000 --- a/src/org/apache/bcel/generic/IFNULL.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IFNULL - Branch if reference is not null - * - *
      - * Stack: ..., reference -> ...
      - * 
      - * - * @version $Id: IFNULL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IFNULL extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IFNULL() { - } - - public IFNULL(InstructionHandle target) { - super(org.apache.bcel.Constants.IFNULL, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IFNONNULL(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIFNULL(this); - } -} diff --git a/src/org/apache/bcel/generic/IF_ACMPEQ.java b/src/org/apache/bcel/generic/IF_ACMPEQ.java deleted file mode 100644 index ac61b05..0000000 --- a/src/org/apache/bcel/generic/IF_ACMPEQ.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IF_ACMPEQ - Branch if reference comparison succeeds - * - *
      - * Stack: ..., value1, value2 -> ...
      - * 
      - * - * @version $Id: IF_ACMPEQ.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ACMPEQ extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ACMPEQ() { - } - - public IF_ACMPEQ(InstructionHandle target) { - super(org.apache.bcel.Constants.IF_ACMPEQ, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IF_ACMPNE(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ACMPEQ(this); - } -} diff --git a/src/org/apache/bcel/generic/IF_ACMPNE.java b/src/org/apache/bcel/generic/IF_ACMPNE.java deleted file mode 100644 index ddb4a4d..0000000 --- a/src/org/apache/bcel/generic/IF_ACMPNE.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IF_ACMPNE - Branch if reference comparison doesn't succeed - * - *
      - * Stack: ..., value1, value2 -> ...
      - * 
      - * - * @version $Id: IF_ACMPNE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ACMPNE extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ACMPNE() { - } - - public IF_ACMPNE(InstructionHandle target) { - super(org.apache.bcel.Constants.IF_ACMPNE, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IF_ACMPEQ(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ACMPNE(this); - } -} diff --git a/src/org/apache/bcel/generic/IF_ICMPEQ.java b/src/org/apache/bcel/generic/IF_ICMPEQ.java deleted file mode 100644 index d7dfb4d..0000000 --- a/src/org/apache/bcel/generic/IF_ICMPEQ.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IF_ICMPEQ - Branch if int comparison succeeds - * - *
      - * Stack: ..., value1, value2 -> ...
      - * 
      - * - * @version $Id: IF_ICMPEQ.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ICMPEQ extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPEQ() { - } - - public IF_ICMPEQ(InstructionHandle target) { - super(org.apache.bcel.Constants.IF_ICMPEQ, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IF_ICMPNE(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPEQ(this); - } -} diff --git a/src/org/apache/bcel/generic/IF_ICMPGE.java b/src/org/apache/bcel/generic/IF_ICMPGE.java deleted file mode 100644 index 7d30e01..0000000 --- a/src/org/apache/bcel/generic/IF_ICMPGE.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IF_ICMPGE - Branch if int comparison succeeds - * - *
      - * Stack: ..., value1, value2 -> ...
      - * 
      - * - * @version $Id: IF_ICMPGE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ICMPGE extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPGE() { - } - - public IF_ICMPGE(InstructionHandle target) { - super(org.apache.bcel.Constants.IF_ICMPGE, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IF_ICMPLT(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPGE(this); - } -} diff --git a/src/org/apache/bcel/generic/IF_ICMPGT.java b/src/org/apache/bcel/generic/IF_ICMPGT.java deleted file mode 100644 index cc907ad..0000000 --- a/src/org/apache/bcel/generic/IF_ICMPGT.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IF_ICMPGT - Branch if int comparison succeeds - * - *
      - * Stack: ..., value1, value2 -> ...
      - * 
      - * - * @version $Id: IF_ICMPGT.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ICMPGT extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPGT() { - } - - public IF_ICMPGT(InstructionHandle target) { - super(org.apache.bcel.Constants.IF_ICMPGT, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IF_ICMPLE(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPGT(this); - } -} diff --git a/src/org/apache/bcel/generic/IF_ICMPLE.java b/src/org/apache/bcel/generic/IF_ICMPLE.java deleted file mode 100644 index 0e30a5f..0000000 --- a/src/org/apache/bcel/generic/IF_ICMPLE.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IF_ICMPLE - Branch if int comparison succeeds - * - *
      - * Stack: ..., value1, value2 -> ...
      - * 
      - * - * @version $Id: IF_ICMPLE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ICMPLE extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPLE() { - } - - public IF_ICMPLE(InstructionHandle target) { - super(org.apache.bcel.Constants.IF_ICMPLE, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IF_ICMPGT(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPLE(this); - } -} diff --git a/src/org/apache/bcel/generic/IF_ICMPLT.java b/src/org/apache/bcel/generic/IF_ICMPLT.java deleted file mode 100644 index 9ebabcd..0000000 --- a/src/org/apache/bcel/generic/IF_ICMPLT.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IF_ICMPLT - Branch if int comparison succeeds - * - *
      - * Stack: ..., value1, value2 -> ...
      - * 
      - * - * @version $Id: IF_ICMPLT.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ICMPLT extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPLT() { - } - - public IF_ICMPLT(InstructionHandle target) { - super(org.apache.bcel.Constants.IF_ICMPLT, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IF_ICMPGE(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPLT(this); - } -} diff --git a/src/org/apache/bcel/generic/IF_ICMPNE.java b/src/org/apache/bcel/generic/IF_ICMPNE.java deleted file mode 100644 index ca67f6c..0000000 --- a/src/org/apache/bcel/generic/IF_ICMPNE.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IF_ICMPNE - Branch if int comparison doesn't succeed - * - *
      - * Stack: ..., value1, value2 -> ...
      - * 
      - * - * @version $Id: IF_ICMPNE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IF_ICMPNE extends IfInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IF_ICMPNE() { - } - - public IF_ICMPNE(InstructionHandle target) { - super(org.apache.bcel.Constants.IF_ICMPNE, target); - } - - /** - * @return negation of instruction - */ - @Override - public IfInstruction negate() { - return new IF_ICMPEQ(target); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitBranchInstruction(this); - v.visitIfInstruction(this); - v.visitIF_ICMPNE(this); - } -} diff --git a/src/org/apache/bcel/generic/IINC.java b/src/org/apache/bcel/generic/IINC.java deleted file mode 100644 index ecd01d4..0000000 --- a/src/org/apache/bcel/generic/IINC.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * IINC - Increment local variable by constant - * - * @version $Id: IINC.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IINC extends LocalVariableInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - private boolean wide; - private int c; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IINC() { - } - - /** - * @param n - * index of local variable - * @param c - * increment factor - */ - public IINC(int n, int c) { - super(); // Default behaviour of LocalVariableInstruction causes error - this.opcode = org.apache.bcel.Constants.IINC; - this.length = (short) 3; - setIndex(n); // May set wide as side effect - setIncrement(c); - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - if (wide) { - out.writeByte(org.apache.bcel.Constants.WIDE); - } - out.writeByte(opcode); - if (wide) { - out.writeShort(n); - out.writeShort(c); - } else { - out.writeByte(n); - out.writeByte(c); - } - } - - private final void setWide() { - wide = (n > org.apache.bcel.Constants.MAX_BYTE) - || (Math.abs(c) > Byte.MAX_VALUE); - if (wide) { - length = 6; // wide byte included - } else { - length = 3; - } - } - - /** - * Read needed data (e.g. index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - this.wide = wide; - if (wide) { - length = 6; - n = bytes.readUnsignedShort(); - c = bytes.readShort(); - } else { - length = 3; - n = bytes.readUnsignedByte(); - c = bytes.readByte(); - } - } - - /** - * @return mnemonic for instruction - */ - @Override - public String toString(boolean verbose) { - return super.toString(verbose) + " " + c; - } - - /** - * Set index of local variable. - */ - @Override - public final void setIndex(int n) { - if (n < 0) { - throw new ClassGenException("Negative index value: " + n); - } - this.n = n; - setWide(); - } - - /** - * @return increment factor - */ - public final int getIncrement() { - return c; - } - - /** - * Set increment factor. - */ - public final void setIncrement(int c) { - this.c = c; - setWide(); - } - - /** - * @return int type - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.INT; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitLocalVariableInstruction(this); - v.visitIINC(this); - } -} diff --git a/src/org/apache/bcel/generic/ILOAD.java b/src/org/apache/bcel/generic/ILOAD.java deleted file mode 100644 index bdcacca..0000000 --- a/src/org/apache/bcel/generic/ILOAD.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * ILOAD - Load int from local variable onto stack - * - *
      - * Stack: ... -> ..., result
      - * 
      - * - * @version $Id: ILOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ILOAD extends LoadInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ILOAD() { - super(org.apache.bcel.Constants.ILOAD, - org.apache.bcel.Constants.ILOAD_0); - } - - /** - * Load int from local variable - * - * @param n - * index of local variable - */ - public ILOAD(int n) { - super(org.apache.bcel.Constants.ILOAD, - org.apache.bcel.Constants.ILOAD_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - super.accept(v); - v.visitILOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/IMPDEP1.java b/src/org/apache/bcel/generic/IMPDEP1.java deleted file mode 100644 index cfc560b..0000000 --- a/src/org/apache/bcel/generic/IMPDEP1.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IMPDEP1 - Implementation dependent - * - * @version $Id: IMPDEP1.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IMPDEP1 extends Instruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public IMPDEP1() { - super(org.apache.bcel.Constants.IMPDEP1, (short) 1); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitIMPDEP1(this); - } -} diff --git a/src/org/apache/bcel/generic/IMPDEP2.java b/src/org/apache/bcel/generic/IMPDEP2.java deleted file mode 100644 index cd57b29..0000000 --- a/src/org/apache/bcel/generic/IMPDEP2.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IMPDEP2 - Implementation dependent - * - * @version $Id: IMPDEP2.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IMPDEP2 extends Instruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public IMPDEP2() { - super(org.apache.bcel.Constants.IMPDEP2, (short) 1); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitIMPDEP2(this); - } -} diff --git a/src/org/apache/bcel/generic/IMUL.java b/src/org/apache/bcel/generic/IMUL.java deleted file mode 100644 index b944b5b..0000000 --- a/src/org/apache/bcel/generic/IMUL.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IMUL - Multiply ints - * - *
      - * Stack: ..., value1, value2 -> result
      - * 
      - * - * @version $Id: IMUL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IMUL extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Multiply ints - */ - public IMUL() { - super(org.apache.bcel.Constants.IMUL); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIMUL(this); - } -} diff --git a/src/org/apache/bcel/generic/INEG.java b/src/org/apache/bcel/generic/INEG.java deleted file mode 100644 index db25323..0000000 --- a/src/org/apache/bcel/generic/INEG.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * INEG - Negate int - * - *
      - * Stack: ..., value -> ..., result
      - * 
      - * - * @version $Id: INEG.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class INEG extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public INEG() { - super(org.apache.bcel.Constants.INEG); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitINEG(this); - } -} diff --git a/src/org/apache/bcel/generic/INSTANCEOF.java b/src/org/apache/bcel/generic/INSTANCEOF.java deleted file mode 100644 index db79830..0000000 --- a/src/org/apache/bcel/generic/INSTANCEOF.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * INSTANCEOF - Determine if object is of given type - * - *
      - * Stack: ..., objectref -> ..., result
      - * 
      - * - * @version $Id: INSTANCEOF.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class INSTANCEOF extends CPInstruction implements LoadClass, - ExceptionThrower, StackProducer, StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INSTANCEOF() { - } - - public INSTANCEOF(int index) { - super(org.apache.bcel.Constants.INSTANCEOF, index); - } - - @Override - public Class[] getExceptions() { - return org.apache.bcel.ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION; - } - - @Override - public ObjectType getLoadClassType(ConstantPoolGen cpg) { - Type t = getType(cpg); - if (t instanceof ArrayType) { - t = ((ArrayType) t).getBasicType(); - } - return (t instanceof ObjectType) ? (ObjectType) t : null; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitLoadClass(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitINSTANCEOF(this); - } -} diff --git a/src/org/apache/bcel/generic/INVOKEINTERFACE.java b/src/org/apache/bcel/generic/INVOKEINTERFACE.java deleted file mode 100644 index 4af8f41..0000000 --- a/src/org/apache/bcel/generic/INVOKEINTERFACE.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; -import org.apache.bcel.ExceptionConstants; -import org.apache.bcel.classfile.ConstantPool; -import org.apache.bcel.util.ByteSequence; - -/** - * INVOKEINTERFACE - Invoke interface method - * - *
      - * Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
      - * 
      - * - * @version $Id: INVOKEINTERFACE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class INVOKEINTERFACE extends InvokeInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int nargs; // Number of arguments on stack (number of stack slots), - // called "count" in vmspec2 - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INVOKEINTERFACE() { - } - - public INVOKEINTERFACE(int index, int nargs) { - super(Constants.INVOKEINTERFACE, index); - length = 5; - if (nargs < 1) { - throw new ClassGenException("Number of arguments must be > 0 " - + nargs); - } - this.nargs = nargs; - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); - out.writeShort(index); - out.writeByte(nargs); - out.writeByte(0); - } - - /** - * The count argument according to the Java Language Specification, - * Second Edition. - */ - public int getCount() { - return nargs; - } - - /** - * Read needed data (i.e., index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - super.initFromFile(bytes, wide); - length = 5; - nargs = bytes.readUnsignedByte(); - bytes.readByte(); // Skip 0 byte - } - - /** - * @return mnemonic for instruction with symbolic references resolved - */ - @Override - public String toString(ConstantPool cp) { - return super.toString(cp) + " " + nargs; - } - - @Override - public int consumeStack(ConstantPoolGen cpg) { // nargs is given in - // byte-code - return nargs; // nargs includes this reference - } - - @Override - public Class[] getExceptions() { - Class[] cs = new Class[4 + ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION, - 0, cs, 0, - ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length + 3] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length + 2] = ExceptionConstants.ILLEGAL_ACCESS_ERROR; - cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length + 1] = ExceptionConstants.ABSTRACT_METHOD_ERROR; - cs[ExceptionConstants.EXCS_INTERFACE_METHOD_RESOLUTION.length] = ExceptionConstants.UNSATISFIED_LINK_ERROR; - return cs; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitInvokeInstruction(this); - v.visitINVOKEINTERFACE(this); - } -} diff --git a/src/org/apache/bcel/generic/INVOKESPECIAL.java b/src/org/apache/bcel/generic/INVOKESPECIAL.java deleted file mode 100644 index 3b9bfc5..0000000 --- a/src/org/apache/bcel/generic/INVOKESPECIAL.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; -import org.apache.bcel.ExceptionConstants; - -/** - * INVOKESPECIAL - Invoke instance method; special handling for superclass, - * private and instance initialization method invocations - * - *
      - * Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
      - * 
      - * - * @version $Id: INVOKESPECIAL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class INVOKESPECIAL extends InvokeInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INVOKESPECIAL() { - } - - public INVOKESPECIAL(int index) { - super(Constants.INVOKESPECIAL, index); - } - - @Override - public Class[] getExceptions() { - Class[] cs = new Class[4 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, - 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 3] = ExceptionConstants.UNSATISFIED_LINK_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 2] = ExceptionConstants.ABSTRACT_METHOD_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; - return cs; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitInvokeInstruction(this); - v.visitINVOKESPECIAL(this); - } -} diff --git a/src/org/apache/bcel/generic/INVOKESTATIC.java b/src/org/apache/bcel/generic/INVOKESTATIC.java deleted file mode 100644 index 72409d4..0000000 --- a/src/org/apache/bcel/generic/INVOKESTATIC.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; -import org.apache.bcel.ExceptionConstants; - -/** - * INVOKESTATIC - Invoke a class (static) method - * - *
      - * Stack: ..., [arg1, [arg2 ...]] -> ...
      - * 
      - * - * @version $Id: INVOKESTATIC.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class INVOKESTATIC extends InvokeInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INVOKESTATIC() { - } - - public INVOKESTATIC(int index) { - super(Constants.INVOKESTATIC, index); - } - - @Override - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, - 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.UNSATISFIED_LINK_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - return cs; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitInvokeInstruction(this); - v.visitINVOKESTATIC(this); - } -} diff --git a/src/org/apache/bcel/generic/INVOKEVIRTUAL.java b/src/org/apache/bcel/generic/INVOKEVIRTUAL.java deleted file mode 100644 index fd4fbee..0000000 --- a/src/org/apache/bcel/generic/INVOKEVIRTUAL.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; -import org.apache.bcel.ExceptionConstants; - -/** - * INVOKEVIRTUAL - Invoke instance method; dispatch based on class - * - *
      - * Stack: ..., objectref, [arg1, [arg2 ...]] -> ...
      - * 
      - * - * @version $Id: INVOKEVIRTUAL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class INVOKEVIRTUAL extends InvokeInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - INVOKEVIRTUAL() { - } - - public INVOKEVIRTUAL(int index) { - super(Constants.INVOKEVIRTUAL, index); - } - - @Override - public Class[] getExceptions() { - Class[] cs = new Class[4 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, - 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 3] = ExceptionConstants.UNSATISFIED_LINK_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 2] = ExceptionConstants.ABSTRACT_METHOD_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; - return cs; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitInvokeInstruction(this); - v.visitINVOKEVIRTUAL(this); - } -} diff --git a/src/org/apache/bcel/generic/IOR.java b/src/org/apache/bcel/generic/IOR.java deleted file mode 100644 index 21547eb..0000000 --- a/src/org/apache/bcel/generic/IOR.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IOR - Bitwise OR int - * - *
      - * Stack: ..., value1, value2 -> ..., result
      - * 
      - * - * @version $Id: IOR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IOR extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public IOR() { - super(org.apache.bcel.Constants.IOR); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIOR(this); - } -} diff --git a/src/org/apache/bcel/generic/IREM.java b/src/org/apache/bcel/generic/IREM.java deleted file mode 100644 index 4977625..0000000 --- a/src/org/apache/bcel/generic/IREM.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IREM - Remainder of int - * - *
      - * Stack: ..., value1, value2 -> result
      - * 
      - * - * @version $Id: IREM.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IREM extends ArithmeticInstruction implements ExceptionThrower { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Remainder of ints - */ - public IREM() { - super(org.apache.bcel.Constants.IREM); - } - - /** - * @return exceptions this instruction may cause - */ - @Override - public Class[] getExceptions() { - return new Class[] { org.apache.bcel.ExceptionConstants.ARITHMETIC_EXCEPTION }; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIREM(this); - } -} diff --git a/src/org/apache/bcel/generic/IRETURN.java b/src/org/apache/bcel/generic/IRETURN.java deleted file mode 100644 index 767b4be..0000000 --- a/src/org/apache/bcel/generic/IRETURN.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IRETURN - Return int from method - * - *
      - * Stack: ..., value -> <empty>
      - * 
      - * - * @version $Id: IRETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IRETURN extends ReturnInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Return int from method - */ - public IRETURN() { - super(org.apache.bcel.Constants.IRETURN); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitIRETURN(this); - } -} diff --git a/src/org/apache/bcel/generic/ISHL.java b/src/org/apache/bcel/generic/ISHL.java deleted file mode 100644 index 05244cf..0000000 --- a/src/org/apache/bcel/generic/ISHL.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * ISHL - Arithmetic shift left int - * - *
      - * Stack: ..., value1, value2 -> ..., result
      - * 
      - * - * @version $Id: ISHL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ISHL extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public ISHL() { - super(org.apache.bcel.Constants.ISHL); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitISHL(this); - } -} diff --git a/src/org/apache/bcel/generic/ISHR.java b/src/org/apache/bcel/generic/ISHR.java deleted file mode 100644 index 03f3178..0000000 --- a/src/org/apache/bcel/generic/ISHR.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * ISHR - Arithmetic shift right int - * - *
      - * Stack: ..., value1, value2 -> ..., result
      - * 
      - * - * @version $Id: ISHR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ISHR extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public ISHR() { - super(org.apache.bcel.Constants.ISHR); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitISHR(this); - } -} diff --git a/src/org/apache/bcel/generic/ISTORE.java b/src/org/apache/bcel/generic/ISTORE.java deleted file mode 100644 index 3f80b96..0000000 --- a/src/org/apache/bcel/generic/ISTORE.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * ISTORE - Store int from stack into local variable - * - *
      - * Stack: ..., value -> ...
      - * 
      - * - * @version $Id: ISTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ISTORE extends StoreInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ISTORE() { - super(org.apache.bcel.Constants.ISTORE, - org.apache.bcel.Constants.ISTORE_0); - } - - /** - * Store int into local variable - * - * @param n - * index of local variable - */ - public ISTORE(int n) { - super(org.apache.bcel.Constants.ISTORE, - org.apache.bcel.Constants.ISTORE_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - super.accept(v); - v.visitISTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/ISUB.java b/src/org/apache/bcel/generic/ISUB.java deleted file mode 100644 index a303f30..0000000 --- a/src/org/apache/bcel/generic/ISUB.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * ISUB - Substract ints - * - *
      - * Stack: ..., value1, value2 -> result
      - * 
      - * - * @version $Id: ISUB.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ISUB extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Substract ints - */ - public ISUB() { - super(org.apache.bcel.Constants.ISUB); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitISUB(this); - } -} diff --git a/src/org/apache/bcel/generic/IUSHR.java b/src/org/apache/bcel/generic/IUSHR.java deleted file mode 100644 index 36bc1ec..0000000 --- a/src/org/apache/bcel/generic/IUSHR.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IUSHR - Logical shift right int - * - *
      - * Stack: ..., value1, value2 -> ..., result
      - * 
      - * - * @version $Id: IUSHR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IUSHR extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public IUSHR() { - super(org.apache.bcel.Constants.IUSHR); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIUSHR(this); - } -} diff --git a/src/org/apache/bcel/generic/IXOR.java b/src/org/apache/bcel/generic/IXOR.java deleted file mode 100644 index 9338502..0000000 --- a/src/org/apache/bcel/generic/IXOR.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * IXOR - Bitwise XOR int - * - *
      - * Stack: ..., value1, value2 -> ..., result
      - * 
      - * - * @version $Id: IXOR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class IXOR extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public IXOR() { - super(org.apache.bcel.Constants.IXOR); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitIXOR(this); - } -} diff --git a/src/org/apache/bcel/generic/IfInstruction.java b/src/org/apache/bcel/generic/IfInstruction.java deleted file mode 100644 index c443b9c..0000000 --- a/src/org/apache/bcel/generic/IfInstruction.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Super class for the IFxxx family of instructions. - * - * @version $Id: IfInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class IfInstruction extends BranchInstruction implements - StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - IfInstruction() { - } - - /** - * @param opcode - * opcode of instruction - * @param target - * Target instruction to branch to - */ - protected IfInstruction(short opcode, InstructionHandle target) { - super(opcode, target); - } - - /** - * @return negation of instruction, e.g. IFEQ.negate() == IFNE - */ - public abstract IfInstruction negate(); -} diff --git a/src/org/apache/bcel/generic/IndexedInstruction.java b/src/org/apache/bcel/generic/IndexedInstruction.java deleted file mode 100644 index 25bf990..0000000 --- a/src/org/apache/bcel/generic/IndexedInstruction.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denote entity that refers to an index, e.g. local variable instructions, RET, - * CPInstruction, etc. - * - * @version $Id: IndexedInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface IndexedInstruction { - - public int getIndex(); - - public void setIndex(int index); -} diff --git a/src/org/apache/bcel/generic/Instruction.java b/src/org/apache/bcel/generic/Instruction.java deleted file mode 100644 index 0704729..0000000 --- a/src/org/apache/bcel/generic/Instruction.java +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; -import java.util.Locale; -import org.apache.bcel.Constants; -import org.apache.bcel.classfile.ConstantPool; -import org.apache.bcel.util.ByteSequence; - -/** - * Abstract super class for all Java byte codes. - * - * @version $Id: Instruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class Instruction implements Cloneable, Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected short length = 1; // Length of instruction in bytes - protected short opcode = -1; // Opcode number - private static InstructionComparator cmp = InstructionComparator.DEFAULT; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - Instruction() { - } - - public Instruction(short opcode, short length) { - this.length = length; - this.opcode = opcode; - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); // Common for all instructions - } - - /** - * @return name of instruction, i.e., opcode name - */ - public String getName() { - return Constants.OPCODE_NAMES[opcode]; - } - - /** - * Long output format: - * - * <name of opcode> "["<opcode number>"]" "("<length of - * instruction>")" - * - * @param verbose - * long/short format switch - * @return mnemonic for instruction - */ - public String toString(boolean verbose) { - if (verbose) { - return getName() + "[" + opcode + "](" + length + ")"; - } else { - return getName(); - } - } - - /** - * @return mnemonic for instruction in verbose format - */ - @Override - public String toString() { - return toString(true); - } - - /** - * @return mnemonic for instruction with sumbolic references resolved - */ - public String toString(ConstantPool cp) { - return toString(false); - } - - /** - * Use with caution, since `BranchInstruction's have a `target' reference - * which is not copied correctly (only basic types are). This also applies - * for `Select' instructions with their multiple branch targets. - * - * @see BranchInstruction - * @return (shallow) copy of an instruction - */ - public Instruction copy() { - Instruction i = null; - // "Constant" instruction, no need to duplicate - if (InstructionConstants.INSTRUCTIONS[this.getOpcode()] != null) { - i = this; - } else { - try { - i = (Instruction) clone(); - } catch (CloneNotSupportedException e) { - System.err.println(e); - } - } - return i; - } - - /** - * Read needed data (e.g. index) from file. - * - * @param bytes - * byte sequence to read from - * @param wide - * "wide" instruction flag - */ - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - } - - /** - * Read an instruction from (byte code) input stream and return the - * appropiate object. - * - * @param bytes - * input stream bytes - * @return instruction object being read - */ - public static final Instruction readInstruction(ByteSequence bytes) - throws IOException { - boolean wide = false; - short opcode = (short) bytes.readUnsignedByte(); - Instruction obj = null; - if (opcode == Constants.WIDE) { // Read next opcode after wide byte - wide = true; - opcode = (short) bytes.readUnsignedByte(); - } - if (InstructionConstants.INSTRUCTIONS[opcode] != null) { - return InstructionConstants.INSTRUCTIONS[opcode]; // Used predefined - // immutable - // object, if - // available - } - /* - * Find appropiate class, instantiate an (empty) instruction object and - * initialize it by hand. - */ - Class clazz; - try { - clazz = Class.forName(className(opcode)); - } catch (ClassNotFoundException cnfe) { - // If a class by that name does not exist, the opcode is illegal. - // Note that IMPDEP1, IMPDEP2, BREAKPOINT are also illegal in a - // sense. - throw new ClassGenException("Illegal opcode detected."); - } - try { - obj = (Instruction) clazz.newInstance(); - if (wide - && !((obj instanceof LocalVariableInstruction) - || (obj instanceof IINC) || (obj instanceof RET))) { - throw new Exception("Illegal opcode after wide: " + opcode); - } - obj.setOpcode(opcode); - obj.initFromFile(bytes, wide); // Do further initializations, if any - // Byte code offset set in InstructionList - } catch (Exception e) { - throw new ClassGenException(e.toString()); - } - return obj; - } - - private static final String className(short opcode) { - String name = Constants.OPCODE_NAMES[opcode] - .toUpperCase(Locale.ENGLISH); - /* - * ICONST_0, etc. will be shortened to ICONST, etc., since ICONST_0 and - * the like are not implemented (directly). - */ - try { - int len = name.length(); - char ch1 = name.charAt(len - 2), ch2 = name.charAt(len - 1); - if ((ch1 == '_') && (ch2 >= '0') && (ch2 <= '5')) { - name = name.substring(0, len - 2); - } - if (name.equals("ICONST_M1")) { - name = "ICONST"; - } - } catch (StringIndexOutOfBoundsException e) { - System.err.println(e); - } - return "org.apache.bcel.generic." + name; - } - - /** - * This method also gives right results for instructions whose effect on the - * stack depends on the constant pool entry they reference. - * - * @return Number of words consumed from stack by this instruction, or - * Constants.UNPREDICTABLE, if this can not be computed statically - */ - public int consumeStack(ConstantPoolGen cpg) { - return Constants.CONSUME_STACK[opcode]; - } - - /** - * This method also gives right results for instructions whose effect on the - * stack depends on the constant pool entry they reference. - * - * @return Number of words produced onto stack by this instruction, or - * Constants.UNPREDICTABLE, if this can not be computed statically - */ - public int produceStack(ConstantPoolGen cpg) { - return Constants.PRODUCE_STACK[opcode]; - } - - /** - * @return this instructions opcode - */ - public short getOpcode() { - return opcode; - } - - /** - * @return length (in bytes) of instruction - */ - public int getLength() { - return length; - } - - /** - * Needed in readInstruction. - */ - private void setOpcode(short opcode) { - this.opcode = opcode; - } - - /** - * Some instructions may be reused, so don't do anything by default. - */ - void dispose() { - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - public abstract void accept(Visitor v); - - /** - * Get Comparator object used in the equals() method to determine equality - * of instructions. - * - * @return currently used comparator for equals() - */ - public static InstructionComparator getComparator() { - return cmp; - } - - /** - * Set comparator to be used for equals(). - */ - public static void setComparator(InstructionComparator c) { - cmp = c; - } - - /** - * Check for equality, delegated to comparator - * - * @return true if that is an Instruction and has the same opcode - */ - @Override - public boolean equals(Object that) { - return (that instanceof Instruction) ? cmp.equals(this, - (Instruction) that) : false; - } -} diff --git a/src/org/apache/bcel/generic/InstructionComparator.java b/src/org/apache/bcel/generic/InstructionComparator.java deleted file mode 100644 index 7717631..0000000 --- a/src/org/apache/bcel/generic/InstructionComparator.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Equality of instructions isn't clearly to be defined. You might wish, for - * example, to compare whether instructions have the same meaning. E.g., whether - * two INVOKEVIRTUALs describe the same call.
      - * The DEFAULT comparator however, considers two instructions to be equal if - * they have same opcode and point to the same indexes (if any) in the constant - * pool or the same local variable index. Branch instructions must have the same - * target. - * - * @see Instruction - * @version $Id: InstructionComparator.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface InstructionComparator { - - public static final InstructionComparator DEFAULT = new InstructionComparator() { - - @Override - public boolean equals(Instruction i1, Instruction i2) { - if (i1.opcode == i2.opcode) { - if (i1 instanceof Select) { - InstructionHandle[] t1 = ((Select) i1).getTargets(); - InstructionHandle[] t2 = ((Select) i2).getTargets(); - if (t1.length == t2.length) { - for (int i = 0; i < t1.length; i++) { - if (t1[i] != t2[i]) { - return false; - } - } - return true; - } - } else if (i1 instanceof BranchInstruction) { - return ((BranchInstruction) i1).target == ((BranchInstruction) i2).target; - } else if (i1 instanceof ConstantPushInstruction) { - return ((ConstantPushInstruction) i1).getValue().equals( - ((ConstantPushInstruction) i2).getValue()); - } else if (i1 instanceof IndexedInstruction) { - return ((IndexedInstruction) i1).getIndex() == ((IndexedInstruction) i2) - .getIndex(); - } else if (i1 instanceof NEWARRAY) { - return ((NEWARRAY) i1).getTypecode() == ((NEWARRAY) i2) - .getTypecode(); - } else { - return true; - } - } - return false; - } - }; - - public boolean equals(Instruction i1, Instruction i2); -} diff --git a/src/org/apache/bcel/generic/InstructionConstants.java b/src/org/apache/bcel/generic/InstructionConstants.java deleted file mode 100644 index 4d78841..0000000 --- a/src/org/apache/bcel/generic/InstructionConstants.java +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; - -/** - * This interface contains shareable instruction objects. - * - * In order to save memory you can use some instructions multiply, since they - * have an immutable state and are directly derived from Instruction. I.e. they - * have no instance fields that could be changed. Since some of these - * instructions like ICONST_0 occur very frequently this can save a lot of time - * and space. This feature is an adaptation of the FlyWeight design pattern, we - * just use an array instead of a factory. - * - * The Instructions can also accessed directly under their names, so it's - * possible to write il.append(Instruction.ICONST_0); - * - * @version $Id: InstructionConstants.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface InstructionConstants { - - /** - * Predefined instruction objects - */ - public static final Instruction NOP = new NOP(); - public static final Instruction ACONST_NULL = new ACONST_NULL(); - public static final Instruction ICONST_M1 = new ICONST(-1); - public static final Instruction ICONST_0 = new ICONST(0); - public static final Instruction ICONST_1 = new ICONST(1); - public static final Instruction ICONST_2 = new ICONST(2); - public static final Instruction ICONST_3 = new ICONST(3); - public static final Instruction ICONST_4 = new ICONST(4); - public static final Instruction ICONST_5 = new ICONST(5); - public static final Instruction LCONST_0 = new LCONST(0); - public static final Instruction LCONST_1 = new LCONST(1); - public static final Instruction FCONST_0 = new FCONST(0); - public static final Instruction FCONST_1 = new FCONST(1); - public static final Instruction FCONST_2 = new FCONST(2); - public static final Instruction DCONST_0 = new DCONST(0); - public static final Instruction DCONST_1 = new DCONST(1); - public static final ArrayInstruction IALOAD = new IALOAD(); - public static final ArrayInstruction LALOAD = new LALOAD(); - public static final ArrayInstruction FALOAD = new FALOAD(); - public static final ArrayInstruction DALOAD = new DALOAD(); - public static final ArrayInstruction AALOAD = new AALOAD(); - public static final ArrayInstruction BALOAD = new BALOAD(); - public static final ArrayInstruction CALOAD = new CALOAD(); - public static final ArrayInstruction SALOAD = new SALOAD(); - public static final ArrayInstruction IASTORE = new IASTORE(); - public static final ArrayInstruction LASTORE = new LASTORE(); - public static final ArrayInstruction FASTORE = new FASTORE(); - public static final ArrayInstruction DASTORE = new DASTORE(); - public static final ArrayInstruction AASTORE = new AASTORE(); - public static final ArrayInstruction BASTORE = new BASTORE(); - public static final ArrayInstruction CASTORE = new CASTORE(); - public static final ArrayInstruction SASTORE = new SASTORE(); - public static final StackInstruction POP = new POP(); - public static final StackInstruction POP2 = new POP2(); - public static final StackInstruction DUP = new DUP(); - public static final StackInstruction DUP_X1 = new DUP_X1(); - public static final StackInstruction DUP_X2 = new DUP_X2(); - public static final StackInstruction DUP2 = new DUP2(); - public static final StackInstruction DUP2_X1 = new DUP2_X1(); - public static final StackInstruction DUP2_X2 = new DUP2_X2(); - public static final StackInstruction SWAP = new SWAP(); - public static final ArithmeticInstruction IADD = new IADD(); - public static final ArithmeticInstruction LADD = new LADD(); - public static final ArithmeticInstruction FADD = new FADD(); - public static final ArithmeticInstruction DADD = new DADD(); - public static final ArithmeticInstruction ISUB = new ISUB(); - public static final ArithmeticInstruction LSUB = new LSUB(); - public static final ArithmeticInstruction FSUB = new FSUB(); - public static final ArithmeticInstruction DSUB = new DSUB(); - public static final ArithmeticInstruction IMUL = new IMUL(); - public static final ArithmeticInstruction LMUL = new LMUL(); - public static final ArithmeticInstruction FMUL = new FMUL(); - public static final ArithmeticInstruction DMUL = new DMUL(); - public static final ArithmeticInstruction IDIV = new IDIV(); - public static final ArithmeticInstruction LDIV = new LDIV(); - public static final ArithmeticInstruction FDIV = new FDIV(); - public static final ArithmeticInstruction DDIV = new DDIV(); - public static final ArithmeticInstruction IREM = new IREM(); - public static final ArithmeticInstruction LREM = new LREM(); - public static final ArithmeticInstruction FREM = new FREM(); - public static final ArithmeticInstruction DREM = new DREM(); - public static final ArithmeticInstruction INEG = new INEG(); - public static final ArithmeticInstruction LNEG = new LNEG(); - public static final ArithmeticInstruction FNEG = new FNEG(); - public static final ArithmeticInstruction DNEG = new DNEG(); - public static final ArithmeticInstruction ISHL = new ISHL(); - public static final ArithmeticInstruction LSHL = new LSHL(); - public static final ArithmeticInstruction ISHR = new ISHR(); - public static final ArithmeticInstruction LSHR = new LSHR(); - public static final ArithmeticInstruction IUSHR = new IUSHR(); - public static final ArithmeticInstruction LUSHR = new LUSHR(); - public static final ArithmeticInstruction IAND = new IAND(); - public static final ArithmeticInstruction LAND = new LAND(); - public static final ArithmeticInstruction IOR = new IOR(); - public static final ArithmeticInstruction LOR = new LOR(); - public static final ArithmeticInstruction IXOR = new IXOR(); - public static final ArithmeticInstruction LXOR = new LXOR(); - public static final ConversionInstruction I2L = new I2L(); - public static final ConversionInstruction I2F = new I2F(); - public static final ConversionInstruction I2D = new I2D(); - public static final ConversionInstruction L2I = new L2I(); - public static final ConversionInstruction L2F = new L2F(); - public static final ConversionInstruction L2D = new L2D(); - public static final ConversionInstruction F2I = new F2I(); - public static final ConversionInstruction F2L = new F2L(); - public static final ConversionInstruction F2D = new F2D(); - public static final ConversionInstruction D2I = new D2I(); - public static final ConversionInstruction D2L = new D2L(); - public static final ConversionInstruction D2F = new D2F(); - public static final ConversionInstruction I2B = new I2B(); - public static final ConversionInstruction I2C = new I2C(); - public static final ConversionInstruction I2S = new I2S(); - public static final Instruction LCMP = new LCMP(); - public static final Instruction FCMPL = new FCMPL(); - public static final Instruction FCMPG = new FCMPG(); - public static final Instruction DCMPL = new DCMPL(); - public static final Instruction DCMPG = new DCMPG(); - public static final ReturnInstruction IRETURN = new IRETURN(); - public static final ReturnInstruction LRETURN = new LRETURN(); - public static final ReturnInstruction FRETURN = new FRETURN(); - public static final ReturnInstruction DRETURN = new DRETURN(); - public static final ReturnInstruction ARETURN = new ARETURN(); - public static final ReturnInstruction RETURN = new RETURN(); - public static final Instruction ARRAYLENGTH = new ARRAYLENGTH(); - public static final Instruction ATHROW = new ATHROW(); - public static final Instruction MONITORENTER = new MONITORENTER(); - public static final Instruction MONITOREXIT = new MONITOREXIT(); - /** - * You can use these constants in multiple places safely, if you can - * guarantee that you will never alter their internal values, e.g. call - * setIndex(). - */ - public static final LocalVariableInstruction THIS = new ALOAD(0); - public static final LocalVariableInstruction ALOAD_0 = THIS; - public static final LocalVariableInstruction ALOAD_1 = new ALOAD(1); - public static final LocalVariableInstruction ALOAD_2 = new ALOAD(2); - public static final LocalVariableInstruction ILOAD_0 = new ILOAD(0); - public static final LocalVariableInstruction ILOAD_1 = new ILOAD(1); - public static final LocalVariableInstruction ILOAD_2 = new ILOAD(2); - public static final LocalVariableInstruction ASTORE_0 = new ASTORE(0); - public static final LocalVariableInstruction ASTORE_1 = new ASTORE(1); - public static final LocalVariableInstruction ASTORE_2 = new ASTORE(2); - public static final LocalVariableInstruction ISTORE_0 = new ISTORE(0); - public static final LocalVariableInstruction ISTORE_1 = new ISTORE(1); - public static final LocalVariableInstruction ISTORE_2 = new ISTORE(2); - /** - * Get object via its opcode, for immutable instructions like branch - * instructions entries are set to null. - */ - public static final Instruction[] INSTRUCTIONS = new Instruction[256]; - /** - * Interfaces may have no static initializers, so we simulate this with an - * inner class. - */ - static final Clinit bla = new Clinit(); - - static class Clinit { - - Clinit() { - INSTRUCTIONS[Constants.NOP] = NOP; - INSTRUCTIONS[Constants.ACONST_NULL] = ACONST_NULL; - INSTRUCTIONS[Constants.ICONST_M1] = ICONST_M1; - INSTRUCTIONS[Constants.ICONST_0] = ICONST_0; - INSTRUCTIONS[Constants.ICONST_1] = ICONST_1; - INSTRUCTIONS[Constants.ICONST_2] = ICONST_2; - INSTRUCTIONS[Constants.ICONST_3] = ICONST_3; - INSTRUCTIONS[Constants.ICONST_4] = ICONST_4; - INSTRUCTIONS[Constants.ICONST_5] = ICONST_5; - INSTRUCTIONS[Constants.LCONST_0] = LCONST_0; - INSTRUCTIONS[Constants.LCONST_1] = LCONST_1; - INSTRUCTIONS[Constants.FCONST_0] = FCONST_0; - INSTRUCTIONS[Constants.FCONST_1] = FCONST_1; - INSTRUCTIONS[Constants.FCONST_2] = FCONST_2; - INSTRUCTIONS[Constants.DCONST_0] = DCONST_0; - INSTRUCTIONS[Constants.DCONST_1] = DCONST_1; - INSTRUCTIONS[Constants.IALOAD] = IALOAD; - INSTRUCTIONS[Constants.LALOAD] = LALOAD; - INSTRUCTIONS[Constants.FALOAD] = FALOAD; - INSTRUCTIONS[Constants.DALOAD] = DALOAD; - INSTRUCTIONS[Constants.AALOAD] = AALOAD; - INSTRUCTIONS[Constants.BALOAD] = BALOAD; - INSTRUCTIONS[Constants.CALOAD] = CALOAD; - INSTRUCTIONS[Constants.SALOAD] = SALOAD; - INSTRUCTIONS[Constants.IASTORE] = IASTORE; - INSTRUCTIONS[Constants.LASTORE] = LASTORE; - INSTRUCTIONS[Constants.FASTORE] = FASTORE; - INSTRUCTIONS[Constants.DASTORE] = DASTORE; - INSTRUCTIONS[Constants.AASTORE] = AASTORE; - INSTRUCTIONS[Constants.BASTORE] = BASTORE; - INSTRUCTIONS[Constants.CASTORE] = CASTORE; - INSTRUCTIONS[Constants.SASTORE] = SASTORE; - INSTRUCTIONS[Constants.POP] = POP; - INSTRUCTIONS[Constants.POP2] = POP2; - INSTRUCTIONS[Constants.DUP] = DUP; - INSTRUCTIONS[Constants.DUP_X1] = DUP_X1; - INSTRUCTIONS[Constants.DUP_X2] = DUP_X2; - INSTRUCTIONS[Constants.DUP2] = DUP2; - INSTRUCTIONS[Constants.DUP2_X1] = DUP2_X1; - INSTRUCTIONS[Constants.DUP2_X2] = DUP2_X2; - INSTRUCTIONS[Constants.SWAP] = SWAP; - INSTRUCTIONS[Constants.IADD] = IADD; - INSTRUCTIONS[Constants.LADD] = LADD; - INSTRUCTIONS[Constants.FADD] = FADD; - INSTRUCTIONS[Constants.DADD] = DADD; - INSTRUCTIONS[Constants.ISUB] = ISUB; - INSTRUCTIONS[Constants.LSUB] = LSUB; - INSTRUCTIONS[Constants.FSUB] = FSUB; - INSTRUCTIONS[Constants.DSUB] = DSUB; - INSTRUCTIONS[Constants.IMUL] = IMUL; - INSTRUCTIONS[Constants.LMUL] = LMUL; - INSTRUCTIONS[Constants.FMUL] = FMUL; - INSTRUCTIONS[Constants.DMUL] = DMUL; - INSTRUCTIONS[Constants.IDIV] = IDIV; - INSTRUCTIONS[Constants.LDIV] = LDIV; - INSTRUCTIONS[Constants.FDIV] = FDIV; - INSTRUCTIONS[Constants.DDIV] = DDIV; - INSTRUCTIONS[Constants.IREM] = IREM; - INSTRUCTIONS[Constants.LREM] = LREM; - INSTRUCTIONS[Constants.FREM] = FREM; - INSTRUCTIONS[Constants.DREM] = DREM; - INSTRUCTIONS[Constants.INEG] = INEG; - INSTRUCTIONS[Constants.LNEG] = LNEG; - INSTRUCTIONS[Constants.FNEG] = FNEG; - INSTRUCTIONS[Constants.DNEG] = DNEG; - INSTRUCTIONS[Constants.ISHL] = ISHL; - INSTRUCTIONS[Constants.LSHL] = LSHL; - INSTRUCTIONS[Constants.ISHR] = ISHR; - INSTRUCTIONS[Constants.LSHR] = LSHR; - INSTRUCTIONS[Constants.IUSHR] = IUSHR; - INSTRUCTIONS[Constants.LUSHR] = LUSHR; - INSTRUCTIONS[Constants.IAND] = IAND; - INSTRUCTIONS[Constants.LAND] = LAND; - INSTRUCTIONS[Constants.IOR] = IOR; - INSTRUCTIONS[Constants.LOR] = LOR; - INSTRUCTIONS[Constants.IXOR] = IXOR; - INSTRUCTIONS[Constants.LXOR] = LXOR; - INSTRUCTIONS[Constants.I2L] = I2L; - INSTRUCTIONS[Constants.I2F] = I2F; - INSTRUCTIONS[Constants.I2D] = I2D; - INSTRUCTIONS[Constants.L2I] = L2I; - INSTRUCTIONS[Constants.L2F] = L2F; - INSTRUCTIONS[Constants.L2D] = L2D; - INSTRUCTIONS[Constants.F2I] = F2I; - INSTRUCTIONS[Constants.F2L] = F2L; - INSTRUCTIONS[Constants.F2D] = F2D; - INSTRUCTIONS[Constants.D2I] = D2I; - INSTRUCTIONS[Constants.D2L] = D2L; - INSTRUCTIONS[Constants.D2F] = D2F; - INSTRUCTIONS[Constants.I2B] = I2B; - INSTRUCTIONS[Constants.I2C] = I2C; - INSTRUCTIONS[Constants.I2S] = I2S; - INSTRUCTIONS[Constants.LCMP] = LCMP; - INSTRUCTIONS[Constants.FCMPL] = FCMPL; - INSTRUCTIONS[Constants.FCMPG] = FCMPG; - INSTRUCTIONS[Constants.DCMPL] = DCMPL; - INSTRUCTIONS[Constants.DCMPG] = DCMPG; - INSTRUCTIONS[Constants.IRETURN] = IRETURN; - INSTRUCTIONS[Constants.LRETURN] = LRETURN; - INSTRUCTIONS[Constants.FRETURN] = FRETURN; - INSTRUCTIONS[Constants.DRETURN] = DRETURN; - INSTRUCTIONS[Constants.ARETURN] = ARETURN; - INSTRUCTIONS[Constants.RETURN] = RETURN; - INSTRUCTIONS[Constants.ARRAYLENGTH] = ARRAYLENGTH; - INSTRUCTIONS[Constants.ATHROW] = ATHROW; - INSTRUCTIONS[Constants.MONITORENTER] = MONITORENTER; - INSTRUCTIONS[Constants.MONITOREXIT] = MONITOREXIT; - } - } -} diff --git a/src/org/apache/bcel/generic/InstructionFactory.java b/src/org/apache/bcel/generic/InstructionFactory.java deleted file mode 100644 index 35c1c5f..0000000 --- a/src/org/apache/bcel/generic/InstructionFactory.java +++ /dev/null @@ -1,746 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; - -/** - * Instances of this class may be used, e.g., to generate typed versions of - * instructions. Its main purpose is to be used as the byte code generating - * backend of a compiler. You can subclass it to add your own create methods. - * - * @version $Id: InstructionFactory.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Constants - */ -public class InstructionFactory implements InstructionConstants, - java.io.Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected ClassGen cg; - protected ConstantPoolGen cp; - - public InstructionFactory(ClassGen cg, ConstantPoolGen cp) { - this.cg = cg; - this.cp = cp; - } - - /** - * Initialize with ClassGen object - */ - public InstructionFactory(ClassGen cg) { - this(cg, cg.getConstantPool()); - } - - /** - * Initialize just with ConstantPoolGen object - */ - public InstructionFactory(ConstantPoolGen cp) { - this(null, cp); - } - - /** - * Create an invoke instruction. - * - * @param class_name - * name of the called class - * @param name - * name of the called method - * @param ret_type - * return type of method - * @param arg_types - * argument types of method - * @param kind - * how to invoke, i.e., INVOKEINTERFACE, INVOKESTATIC, - * INVOKEVIRTUAL, or INVOKESPECIAL - * @see Constants - */ - public InvokeInstruction createInvoke(String class_name, String name, - Type ret_type, Type[] arg_types, short kind) { - int index; - int nargs = 0; - String signature = Type.getMethodSignature(ret_type, arg_types); - for (int i = 0; i < arg_types.length; i++) { - nargs += arg_types[i].getSize(); - } - if (kind == Constants.INVOKEINTERFACE) { - index = cp.addInterfaceMethodref(class_name, name, signature); - } else { - index = cp.addMethodref(class_name, name, signature); - } - switch (kind) { - case Constants.INVOKESPECIAL: - return new INVOKESPECIAL(index); - case Constants.INVOKEVIRTUAL: - return new INVOKEVIRTUAL(index); - case Constants.INVOKESTATIC: - return new INVOKESTATIC(index); - case Constants.INVOKEINTERFACE: - return new INVOKEINTERFACE(index, nargs + 1); - default: - throw new RuntimeException("Oops: Unknown invoke kind:" + kind); - } - } - - /** - * Create a call to the most popular System.out.println() method. - * - * @param s - * the string to print - */ - public InstructionList createPrintln(String s) { - InstructionList il = new InstructionList(); - int out = cp.addFieldref("java.lang.System", "out", - "Ljava/io/PrintStream;"); - int println = cp.addMethodref("java.io.PrintStream", "println", - "(Ljava/lang/String;)V"); - il.append(new GETSTATIC(out)); - il.append(new PUSH(cp, s)); - il.append(new INVOKEVIRTUAL(println)); - return il; - } - - /** - * Uses PUSH to push a constant value onto the stack. - * - * @param value - * must be of type Number, Boolean, Character or String - */ - public Instruction createConstant(Object value) { - PUSH push; - if (value instanceof Number) { - push = new PUSH(cp, (Number) value); - } else if (value instanceof String) { - push = new PUSH(cp, (String) value); - } else if (value instanceof Boolean) { - push = new PUSH(cp, (Boolean) value); - } else if (value instanceof Character) { - push = new PUSH(cp, (Character) value); - } else { - throw new ClassGenException("Illegal type: " + value.getClass()); - } - return push.getInstruction(); - } - - private static class MethodObject { - - Type[] arg_types; - Type result_type; - String class_name; - String name; - - MethodObject(String c, String n, Type r, Type[] a, int acc) { - class_name = c; - name = n; - result_type = r; - arg_types = a; - } - } - - private InvokeInstruction createInvoke(MethodObject m, short kind) { - return createInvoke(m.class_name, m.name, m.result_type, m.arg_types, - kind); - } - - private static MethodObject[] append_mos = { - new MethodObject("java.lang.StringBuffer", "append", - Type.STRINGBUFFER, new Type[] { Type.STRING }, - Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", - Type.STRINGBUFFER, new Type[] { Type.OBJECT }, - Constants.ACC_PUBLIC), - null, - null, // indices 2, 3 - new MethodObject("java.lang.StringBuffer", "append", - Type.STRINGBUFFER, new Type[] { Type.BOOLEAN }, - Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", - Type.STRINGBUFFER, new Type[] { Type.CHAR }, - Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", - Type.STRINGBUFFER, new Type[] { Type.FLOAT }, - Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", - Type.STRINGBUFFER, new Type[] { Type.DOUBLE }, - Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", - Type.STRINGBUFFER, new Type[] { Type.INT }, - Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", - Type.STRINGBUFFER, // No append(byte) - new Type[] { Type.INT }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", - Type.STRINGBUFFER, // No append(short) - new Type[] { Type.INT }, Constants.ACC_PUBLIC), - new MethodObject("java.lang.StringBuffer", "append", - Type.STRINGBUFFER, new Type[] { Type.LONG }, - Constants.ACC_PUBLIC) }; - - private static final boolean isString(Type type) { - return ((type instanceof ObjectType) && ((ObjectType) type) - .getClassName().equals("java.lang.String")); - } - - public Instruction createAppend(Type type) { - byte t = type.getType(); - if (isString(type)) { - return createInvoke(append_mos[0], Constants.INVOKEVIRTUAL); - } - switch (t) { - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_FLOAT: - case Constants.T_DOUBLE: - case Constants.T_BYTE: - case Constants.T_SHORT: - case Constants.T_INT: - case Constants.T_LONG: - return createInvoke(append_mos[t], Constants.INVOKEVIRTUAL); - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return createInvoke(append_mos[1], Constants.INVOKEVIRTUAL); - default: - throw new RuntimeException("Oops: No append for this type? " + type); - } - } - - /** - * Create a field instruction. - * - * @param class_name - * name of the accessed class - * @param name - * name of the referenced field - * @param type - * type of field - * @param kind - * how to access, i.e., GETFIELD, PUTFIELD, GETSTATIC, PUTSTATIC - * @see Constants - */ - public FieldInstruction createFieldAccess(String class_name, String name, - Type type, short kind) { - int index; - String signature = type.getSignature(); - index = cp.addFieldref(class_name, name, signature); - switch (kind) { - case Constants.GETFIELD: - return new GETFIELD(index); - case Constants.PUTFIELD: - return new PUTFIELD(index); - case Constants.GETSTATIC: - return new GETSTATIC(index); - case Constants.PUTSTATIC: - return new PUTSTATIC(index); - default: - throw new RuntimeException("Oops: Unknown getfield kind:" + kind); - } - } - - /** - * Create reference to `this' - */ - public static Instruction createThis() { - return new ALOAD(0); - } - - /** - * Create typed return - */ - public static ReturnInstruction createReturn(Type type) { - switch (type.getType()) { - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return ARETURN; - case Constants.T_INT: - case Constants.T_SHORT: - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_BYTE: - return IRETURN; - case Constants.T_FLOAT: - return FRETURN; - case Constants.T_DOUBLE: - return DRETURN; - case Constants.T_LONG: - return LRETURN; - case Constants.T_VOID: - return RETURN; - default: - throw new RuntimeException("Invalid type: " + type); - } - } - - private static final ArithmeticInstruction createBinaryIntOp(char first, - String op) { - switch (first) { - case '-': - return ISUB; - case '+': - return IADD; - case '%': - return IREM; - case '*': - return IMUL; - case '/': - return IDIV; - case '&': - return IAND; - case '|': - return IOR; - case '^': - return IXOR; - case '<': - return ISHL; - case '>': - return op.equals(">>>") ? (ArithmeticInstruction) IUSHR - : (ArithmeticInstruction) ISHR; - default: - throw new RuntimeException("Invalid operand " + op); - } - } - - private static final ArithmeticInstruction createBinaryLongOp(char first, - String op) { - switch (first) { - case '-': - return LSUB; - case '+': - return LADD; - case '%': - return LREM; - case '*': - return LMUL; - case '/': - return LDIV; - case '&': - return LAND; - case '|': - return LOR; - case '^': - return LXOR; - case '<': - return LSHL; - case '>': - return op.equals(">>>") ? (ArithmeticInstruction) LUSHR - : (ArithmeticInstruction) LSHR; - default: - throw new RuntimeException("Invalid operand " + op); - } - } - - private static final ArithmeticInstruction createBinaryFloatOp(char op) { - switch (op) { - case '-': - return FSUB; - case '+': - return FADD; - case '*': - return FMUL; - case '/': - return FDIV; - default: - throw new RuntimeException("Invalid operand " + op); - } - } - - private static final ArithmeticInstruction createBinaryDoubleOp(char op) { - switch (op) { - case '-': - return DSUB; - case '+': - return DADD; - case '*': - return DMUL; - case '/': - return DDIV; - default: - throw new RuntimeException("Invalid operand " + op); - } - } - -/** - * Create binary operation for simple basic types, such as int and float. - * - * @param op operation, such as "+", "*", "<<", etc. - */ - public static ArithmeticInstruction createBinaryOperation(String op, - Type type) { - char first = op.toCharArray()[0]; - switch (type.getType()) { - case Constants.T_BYTE: - case Constants.T_SHORT: - case Constants.T_INT: - case Constants.T_CHAR: - return createBinaryIntOp(first, op); - case Constants.T_LONG: - return createBinaryLongOp(first, op); - case Constants.T_FLOAT: - return createBinaryFloatOp(first); - case Constants.T_DOUBLE: - return createBinaryDoubleOp(first); - default: - throw new RuntimeException("Invalid type " + type); - } - } - - /** - * @param size - * size of operand, either 1 (int, e.g.) or 2 (double) - */ - public static StackInstruction createPop(int size) { - return (size == 2) ? (StackInstruction) POP2 : (StackInstruction) POP; - } - - /** - * @param size - * size of operand, either 1 (int, e.g.) or 2 (double) - */ - public static StackInstruction createDup(int size) { - return (size == 2) ? (StackInstruction) DUP2 : (StackInstruction) DUP; - } - - /** - * @param size - * size of operand, either 1 (int, e.g.) or 2 (double) - */ - public static StackInstruction createDup_2(int size) { - return (size == 2) ? (StackInstruction) DUP2_X2 - : (StackInstruction) DUP_X2; - } - - /** - * @param size - * size of operand, either 1 (int, e.g.) or 2 (double) - */ - public static StackInstruction createDup_1(int size) { - return (size == 2) ? (StackInstruction) DUP2_X1 - : (StackInstruction) DUP_X1; - } - - /** - * @param index - * index of local variable - */ - public static LocalVariableInstruction createStore(Type type, int index) { - switch (type.getType()) { - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_BYTE: - case Constants.T_SHORT: - case Constants.T_INT: - return new ISTORE(index); - case Constants.T_FLOAT: - return new FSTORE(index); - case Constants.T_DOUBLE: - return new DSTORE(index); - case Constants.T_LONG: - return new LSTORE(index); - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return new ASTORE(index); - default: - throw new RuntimeException("Invalid type " + type); - } - } - - /** - * @param index - * index of local variable - */ - public static LocalVariableInstruction createLoad(Type type, int index) { - switch (type.getType()) { - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_BYTE: - case Constants.T_SHORT: - case Constants.T_INT: - return new ILOAD(index); - case Constants.T_FLOAT: - return new FLOAD(index); - case Constants.T_DOUBLE: - return new DLOAD(index); - case Constants.T_LONG: - return new LLOAD(index); - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return new ALOAD(index); - default: - throw new RuntimeException("Invalid type " + type); - } - } - - /** - * @param type - * type of elements of array, i.e., array.getElementType() - */ - public static ArrayInstruction createArrayLoad(Type type) { - switch (type.getType()) { - case Constants.T_BOOLEAN: - case Constants.T_BYTE: - return BALOAD; - case Constants.T_CHAR: - return CALOAD; - case Constants.T_SHORT: - return SALOAD; - case Constants.T_INT: - return IALOAD; - case Constants.T_FLOAT: - return FALOAD; - case Constants.T_DOUBLE: - return DALOAD; - case Constants.T_LONG: - return LALOAD; - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return AALOAD; - default: - throw new RuntimeException("Invalid type " + type); - } - } - - /** - * @param type - * type of elements of array, i.e., array.getElementType() - */ - public static ArrayInstruction createArrayStore(Type type) { - switch (type.getType()) { - case Constants.T_BOOLEAN: - case Constants.T_BYTE: - return BASTORE; - case Constants.T_CHAR: - return CASTORE; - case Constants.T_SHORT: - return SASTORE; - case Constants.T_INT: - return IASTORE; - case Constants.T_FLOAT: - return FASTORE; - case Constants.T_DOUBLE: - return DASTORE; - case Constants.T_LONG: - return LASTORE; - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return AASTORE; - default: - throw new RuntimeException("Invalid type " + type); - } - } - - /** - * Create conversion operation for two stack operands, this may be an I2C, - * instruction, e.g., if the operands are basic types and CHECKCAST if they - * are reference types. - */ - public Instruction createCast(Type src_type, Type dest_type) { - if ((src_type instanceof BasicType) && (dest_type instanceof BasicType)) { - byte dest = dest_type.getType(); - byte src = src_type.getType(); - if (dest == Constants.T_LONG - && (src == Constants.T_CHAR || src == Constants.T_BYTE || src == Constants.T_SHORT)) { - src = Constants.T_INT; - } - String[] short_names = { "C", "F", "D", "B", "S", "I", "L" }; - String name = "org.apache.bcel.generic." - + short_names[src - Constants.T_CHAR] + "2" - + short_names[dest - Constants.T_CHAR]; - Instruction i = null; - try { - i = (Instruction) java.lang.Class.forName(name).newInstance(); - } catch (Exception e) { - throw new RuntimeException("Could not find instruction: " - + name); - } - return i; - } else if ((src_type instanceof ReferenceType) - && (dest_type instanceof ReferenceType)) { - if (dest_type instanceof ArrayType) { - return new CHECKCAST(cp.addArrayClass((ArrayType) dest_type)); - } else { - return new CHECKCAST(cp.addClass(((ObjectType) dest_type) - .getClassName())); - } - } else { - throw new RuntimeException("Can not cast " + src_type + " to " - + dest_type); - } - } - - public GETFIELD createGetField(String class_name, String name, Type t) { - return new GETFIELD(cp.addFieldref(class_name, name, t.getSignature())); - } - - public GETSTATIC createGetStatic(String class_name, String name, Type t) { - return new GETSTATIC(cp.addFieldref(class_name, name, t.getSignature())); - } - - public PUTFIELD createPutField(String class_name, String name, Type t) { - return new PUTFIELD(cp.addFieldref(class_name, name, t.getSignature())); - } - - public PUTSTATIC createPutStatic(String class_name, String name, Type t) { - return new PUTSTATIC(cp.addFieldref(class_name, name, t.getSignature())); - } - - public CHECKCAST createCheckCast(ReferenceType t) { - if (t instanceof ArrayType) { - return new CHECKCAST(cp.addArrayClass((ArrayType) t)); - } else { - return new CHECKCAST(cp.addClass((ObjectType) t)); - } - } - - public INSTANCEOF createInstanceOf(ReferenceType t) { - if (t instanceof ArrayType) { - return new INSTANCEOF(cp.addArrayClass((ArrayType) t)); - } else { - return new INSTANCEOF(cp.addClass((ObjectType) t)); - } - } - - public NEW createNew(ObjectType t) { - return new NEW(cp.addClass(t)); - } - - public NEW createNew(String s) { - return createNew(new ObjectType(s)); - } - - /** - * Create new array of given size and type. - * - * @return an instruction that creates the corresponding array at runtime, - * i.e. is an AllocationInstruction - */ - public Instruction createNewArray(Type t, short dim) { - if (dim == 1) { - if (t instanceof ObjectType) { - return new ANEWARRAY(cp.addClass((ObjectType) t)); - } else if (t instanceof ArrayType) { - return new ANEWARRAY(cp.addArrayClass((ArrayType) t)); - } else { - return new NEWARRAY(((BasicType) t).getType()); - } - } else { - ArrayType at; - if (t instanceof ArrayType) { - at = (ArrayType) t; - } else { - at = new ArrayType(t, dim); - } - return new MULTIANEWARRAY(cp.addArrayClass(at), dim); - } - } - - /** - * Create "null" value for reference types, 0 for basic types like int - */ - public static Instruction createNull(Type type) { - switch (type.getType()) { - case Constants.T_ARRAY: - case Constants.T_OBJECT: - return ACONST_NULL; - case Constants.T_INT: - case Constants.T_SHORT: - case Constants.T_BOOLEAN: - case Constants.T_CHAR: - case Constants.T_BYTE: - return ICONST_0; - case Constants.T_FLOAT: - return FCONST_0; - case Constants.T_DOUBLE: - return DCONST_0; - case Constants.T_LONG: - return LCONST_0; - case Constants.T_VOID: - return NOP; - default: - throw new RuntimeException("Invalid type: " + type); - } - } - - /** - * Create branch instruction by given opcode, except LOOKUPSWITCH and - * TABLESWITCH. For those you should use the SWITCH compound instruction. - */ - public static BranchInstruction createBranchInstruction(short opcode, - InstructionHandle target) { - switch (opcode) { - case Constants.IFEQ: - return new IFEQ(target); - case Constants.IFNE: - return new IFNE(target); - case Constants.IFLT: - return new IFLT(target); - case Constants.IFGE: - return new IFGE(target); - case Constants.IFGT: - return new IFGT(target); - case Constants.IFLE: - return new IFLE(target); - case Constants.IF_ICMPEQ: - return new IF_ICMPEQ(target); - case Constants.IF_ICMPNE: - return new IF_ICMPNE(target); - case Constants.IF_ICMPLT: - return new IF_ICMPLT(target); - case Constants.IF_ICMPGE: - return new IF_ICMPGE(target); - case Constants.IF_ICMPGT: - return new IF_ICMPGT(target); - case Constants.IF_ICMPLE: - return new IF_ICMPLE(target); - case Constants.IF_ACMPEQ: - return new IF_ACMPEQ(target); - case Constants.IF_ACMPNE: - return new IF_ACMPNE(target); - case Constants.GOTO: - return new GOTO(target); - case Constants.JSR: - return new JSR(target); - case Constants.IFNULL: - return new IFNULL(target); - case Constants.IFNONNULL: - return new IFNONNULL(target); - case Constants.GOTO_W: - return new GOTO_W(target); - case Constants.JSR_W: - return new JSR_W(target); - default: - throw new RuntimeException("Invalid opcode: " + opcode); - } - } - - public void setClassGen(ClassGen c) { - cg = c; - } - - public ClassGen getClassGen() { - return cg; - } - - public void setConstantPool(ConstantPoolGen c) { - cp = c; - } - - public ConstantPoolGen getConstantPool() { - return cp; - } -} diff --git a/src/org/apache/bcel/generic/InstructionHandle.java b/src/org/apache/bcel/generic/InstructionHandle.java deleted file mode 100644 index 5129d00..0000000 --- a/src/org/apache/bcel/generic/InstructionHandle.java +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.apache.bcel.classfile.Utility; - -/** - * Instances of this class give users a handle to the instructions contained in - * an InstructionList. Instruction objects may be used more than once within a - * list, this is useful because it saves memory and may be much faster. - * - * Within an InstructionList an InstructionHandle object is wrapped around all - * instructions, i.e., it implements a cell in a doubly-linked list. From the - * outside only the next and the previous instruction (handle) are accessible. - * One can traverse the list via an Enumeration returned by - * InstructionList.elements(). - * - * @version $Id: InstructionHandle.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Instruction - * @see BranchHandle - * @see InstructionList - */ -public class InstructionHandle implements java.io.Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - InstructionHandle next, prev; // Will be set from the outside - Instruction instruction; - protected int i_position = -1; // byte code offset of instruction - private Set targeters; - private Map attributes; - - public final InstructionHandle getNext() { - return next; - } - - public final InstructionHandle getPrev() { - return prev; - } - - public final Instruction getInstruction() { - return instruction; - } - - /** - * Replace current instruction contained in this handle. Old instruction is - * disposed using Instruction.dispose(). - */ - public void setInstruction(Instruction i) { // Overridden in BranchHandle - if (i == null) { - throw new ClassGenException("Assigning null to handle"); - } - if ((this.getClass() != BranchHandle.class) - && (i instanceof BranchInstruction)) { - throw new ClassGenException("Assigning branch instruction " + i - + " to plain handle"); - } - if (instruction != null) { - instruction.dispose(); - } - instruction = i; - } - - /** - * Temporarily swap the current instruction, without disturbing anything. - * Meant to be used by a debugger, implementing breakpoints. Current - * instruction is returned. - */ - public Instruction swapInstruction(Instruction i) { - Instruction oldInstruction = instruction; - instruction = i; - return oldInstruction; - } - - /* private */protected InstructionHandle(Instruction i) { - setInstruction(i); - } - - private static InstructionHandle ih_list = null; // List of reusable handles - - /** - * Factory method. - */ - static final InstructionHandle getInstructionHandle(Instruction i) { - if (ih_list == null) { - return new InstructionHandle(i); - } else { - InstructionHandle ih = ih_list; - ih_list = ih.next; - ih.setInstruction(i); - return ih; - } - } - - /** - * Called by InstructionList.setPositions when setting the position for - * every instruction. In the presence of variable length instructions - * `setPositions()' performs multiple passes over the instruction list to - * calculate the correct (byte) positions and offsets by calling this - * function. - * - * @param offset - * additional offset caused by preceding (variable length) - * instructions - * @param max_offset - * the maximum offset that may be caused by these instructions - * @return additional offset caused by possible change of this instruction's - * length - */ - protected int updatePosition(int offset, int max_offset) { - i_position += offset; - return 0; - } - - /** - * @return the position, i.e., the byte code offset of the contained - * instruction. This is accurate only after - * InstructionList.setPositions() has been called. - */ - public int getPosition() { - return i_position; - } - - /** - * Set the position, i.e., the byte code offset of the contained - * instruction. - */ - void setPosition(int pos) { - i_position = pos; - } - - /** - * Overridden in BranchHandle - */ - protected void addHandle() { - next = ih_list; - ih_list = this; - } - - /** - * Delete contents, i.e., remove user access and make handle reusable. - */ - void dispose() { - next = prev = null; - instruction.dispose(); - instruction = null; - i_position = -1; - attributes = null; - removeAllTargeters(); - addHandle(); - } - - /** - * Remove all targeters, if any. - */ - public void removeAllTargeters() { - if (targeters != null) { - targeters.clear(); - } - } - - /** - * Denote this handle isn't referenced anymore by t. - */ - public void removeTargeter(InstructionTargeter t) { - if (targeters != null) { - targeters.remove(t); - } - } - - /** - * Denote this handle is being referenced by t. - */ - public void addTargeter(InstructionTargeter t) { - if (targeters == null) { - targeters = new HashSet(); - } - // if(!targeters.contains(t)) - targeters.add(t); - } - - public boolean hasTargeters() { - return (targeters != null) && (targeters.size() > 0); - } - - /** - * @return null, if there are no targeters - */ - public InstructionTargeter[] getTargeters() { - if (!hasTargeters()) { - return null; - } - InstructionTargeter[] t = new InstructionTargeter[targeters.size()]; - targeters.toArray(t); - return t; - } - - /** - * @return a (verbose) string representation of the contained instruction. - */ - public String toString(boolean verbose) { - return Utility.format(i_position, 4, false, ' ') + ": " - + instruction.toString(verbose); - } - - /** - * @return a string representation of the contained instruction. - */ - @Override - public String toString() { - return toString(true); - } - - /** - * Add an attribute to an instruction handle. - * - * @param key - * the key object to store/retrieve the attribute - * @param attr - * the attribute to associate with this handle - */ - public void addAttribute(Object key, Object attr) { - if (attributes == null) { - attributes = new HashMap(3); - } - attributes.put(key, attr); - } - - /** - * Delete an attribute of an instruction handle. - * - * @param key - * the key object to retrieve the attribute - */ - public void removeAttribute(Object key) { - if (attributes != null) { - attributes.remove(key); - } - } - - /** - * Get attribute of an instruction handle. - * - * @param key - * the key object to store/retrieve the attribute - */ - public Object getAttribute(Object key) { - if (attributes != null) { - return attributes.get(key); - } - return null; - } - - /** - * @return all attributes associated with this handle - */ - public Collection getAttributes() { - if (attributes == null) { - attributes = new HashMap(3); - } - return attributes.values(); - } - - /** - * Convenience method, simply calls accept() on the contained instruction. - * - * @param v - * Visitor object - */ - public void accept(Visitor v) { - instruction.accept(v); - } -} diff --git a/src/org/apache/bcel/generic/InstructionList.java b/src/org/apache/bcel/generic/InstructionList.java deleted file mode 100644 index 5003628..0000000 --- a/src/org/apache/bcel/generic/InstructionList.java +++ /dev/null @@ -1,1334 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.apache.bcel.Constants; -import org.apache.bcel.classfile.Constant; -import org.apache.bcel.util.ByteSequence; - -/** - * This class is a container for a list of Instruction objects. Instructions can be - * appended, inserted, moved, deleted, etc.. Instructions are being wrapped into - * InstructionHandles objects that are - * returned upon append/insert operations. They give the user (read only) access - * to the list structure, such that it can be traversed and manipulated in a - * controlled way. - * - * A list is finally dumped to a byte code array with getByteCode. - * - * @version $Id: InstructionList.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see Instruction - * @see InstructionHandle - * @see BranchHandle - */ -public class InstructionList implements Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - private InstructionHandle start = null, end = null; - private int length = 0; // number of elements in list - private int[] byte_positions; // byte code offsets corresponding to - // instructions - - /** - * Create (empty) instruction list. - */ - public InstructionList() { - } - - /** - * Create instruction list containing one instruction. - * - * @param i - * initial instruction - */ - public InstructionList(Instruction i) { - append(i); - } - - /** - * Create instruction list containing one instruction. - * - * @param i - * initial instruction - */ - public InstructionList(BranchInstruction i) { - append(i); - } - - /** - * Initialize list with (nonnull) compound instruction. Consumes argument - * list, i.e., it becomes empty. - * - * @param c - * compound instruction (list) - */ - public InstructionList(CompoundInstruction c) { - append(c.getInstructionList()); - } - - /** - * Test for empty list. - */ - public boolean isEmpty() { - return start == null; - } // && end == null - - /** - * Find the target instruction (handle) that corresponds to the given target - * position (byte code offset). - * - * @param ihs - * array of instruction handles, i.e. il.getInstructionHandles() - * @param pos - * array of positions corresponding to ihs, i.e. - * il.getInstructionPositions() - * @param count - * length of arrays - * @param target - * target position to search for - * @return target position's instruction handle if available - */ - public static InstructionHandle findHandle(InstructionHandle[] ihs, - int[] pos, int count, int target) { - int l = 0, r = count - 1; - /* - * Do a binary search since the pos array is orderd. - */ - do { - int i = (l + r) / 2; - int j = pos[i]; - if (j == target) { - return ihs[i]; - } else if (target < j) { - r = i - 1; - } else { - l = i + 1; - } - } while (l <= r); - return null; - } - - /** - * Get instruction handle for instruction at byte code position pos. This - * only works properly, if the list is freshly initialized from a byte array - * or setPositions() has been called before this method. - * - * @param pos - * byte code position to search for - * @return target position's instruction handle if available - */ - public InstructionHandle findHandle(int pos) { - InstructionHandle[] ihs = getInstructionHandles(); - return findHandle(ihs, byte_positions, length, pos); - } - - /** - * Initialize instruction list from byte array. - * - * @param code - * byte array containing the instructions - */ - public InstructionList(byte[] code) { - ByteSequence bytes = new ByteSequence(code); - InstructionHandle[] ihs = new InstructionHandle[code.length]; - int[] pos = new int[code.length]; // Can't be more than that - int count = 0; // Contains actual length - /* - * Pass 1: Create an object for each byte code and append them to the - * list. - */ - try { - while (bytes.available() > 0) { - // Remember byte offset and associate it with the instruction - int off = bytes.getIndex(); - pos[count] = off; - /* - * Read one instruction from the byte stream, the byte position - * is set accordingly. - */ - Instruction i = Instruction.readInstruction(bytes); - InstructionHandle ih; - if (i instanceof BranchInstruction) { - ih = append((BranchInstruction) i); - } else { - ih = append(i); - } - ih.setPosition(off); - ihs[count] = ih; - count++; - } - } catch (IOException e) { - throw new ClassGenException(e.toString()); - } - byte_positions = new int[count]; // Trim to proper size - System.arraycopy(pos, 0, byte_positions, 0, count); - /* - * Pass 2: Look for BranchInstruction and update their targets, i.e., - * convert offsets to instruction handles. - */ - for (int i = 0; i < count; i++) { - if (ihs[i] instanceof BranchHandle) { - BranchInstruction bi = (BranchInstruction) ihs[i].instruction; - int target = bi.position + bi.getIndex(); /* - * Byte code position: - * relative -> absolute. - */ - // Search for target position - InstructionHandle ih = findHandle(ihs, pos, count, target); - if (ih == null) { - throw new ClassGenException( - "Couldn't find target for branch: " + bi); - } - bi.setTarget(ih); // Update target - // If it is a Select instruction, update all branch targets - if (bi instanceof Select) { // Either LOOKUPSWITCH or - // TABLESWITCH - Select s = (Select) bi; - int[] indices = s.getIndices(); - for (int j = 0; j < indices.length; j++) { - target = bi.position + indices[j]; - ih = findHandle(ihs, pos, count, target); - if (ih == null) { - throw new ClassGenException( - "Couldn't find target for switch: " + bi); - } - s.setTarget(j, ih); // Update target - } - } - } - } - } - - /** - * Append another list after instruction (handle) ih contained in this list. - * Consumes argument list, i.e., it becomes empty. - * - * @param ih - * where to append the instruction list - * @param il - * Instruction list to append to this one - * @return instruction handle pointing to the first appended - * instruction - */ - public InstructionHandle append(InstructionHandle ih, InstructionList il) { - if (il == null) { - throw new ClassGenException("Appending null InstructionList"); - } - if (il.isEmpty()) { - return ih; - } - InstructionHandle next = ih.next, ret = il.start; - ih.next = il.start; - il.start.prev = ih; - il.end.next = next; - if (next != null) { - next.prev = il.end; - } else { - end = il.end; // Update end ... - } - length += il.length; // Update length - il.clear(); - return ret; - } - - /** - * Append another list after instruction i contained in this list. Consumes - * argument list, i.e., it becomes empty. - * - * @param i - * where to append the instruction list - * @param il - * Instruction list to append to this one - * @return instruction handle pointing to the first appended - * instruction - */ - public InstructionHandle append(Instruction i, InstructionList il) { - InstructionHandle ih; - if ((ih = findInstruction2(i)) == null) { - throw new ClassGenException("Instruction " + i - + " is not contained in this list."); - } - return append(ih, il); - } - - /** - * Append another list to this one. Consumes argument list, i.e., it becomes - * empty. - * - * @param il - * list to append to end of this list - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append(InstructionList il) { - if (il == null) { - throw new ClassGenException("Appending null InstructionList"); - } - if (il.isEmpty()) { - return null; - } - if (isEmpty()) { - start = il.start; - end = il.end; - length = il.length; - il.clear(); - return start; - } else { - return append(end, il); // was end.instruction - } - } - - /** - * Append an instruction to the end of this list. - * - * @param ih - * instruction to append - */ - private void append(InstructionHandle ih) { - if (isEmpty()) { - start = end = ih; - ih.next = ih.prev = null; - } else { - end.next = ih; - ih.prev = end; - ih.next = null; - end = ih; - } - length++; // Update length - } - - /** - * Append an instruction to the end of this list. - * - * @param i - * instruction to append - * @return instruction handle of the appended instruction - */ - public InstructionHandle append(Instruction i) { - InstructionHandle ih = InstructionHandle.getInstructionHandle(i); - append(ih); - return ih; - } - - /** - * Append a branch instruction to the end of this list. - * - * @param i - * branch instruction to append - * @return branch instruction handle of the appended instruction - */ - public BranchHandle append(BranchInstruction i) { - BranchHandle ih = BranchHandle.getBranchHandle(i); - append(ih); - return ih; - } - - /** - * Append a single instruction j after another instruction i, which must be - * in this list of course! - * - * @param i - * Instruction in list - * @param j - * Instruction to append after i in list - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append(Instruction i, Instruction j) { - return append(i, new InstructionList(j)); - } - - /** - * Append a compound instruction, after instruction i. - * - * @param i - * Instruction in list - * @param c - * The composite instruction (containing an InstructionList) - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append(Instruction i, CompoundInstruction c) { - return append(i, c.getInstructionList()); - } - - /** - * Append a compound instruction. - * - * @param c - * The composite instruction (containing an InstructionList) - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append(CompoundInstruction c) { - return append(c.getInstructionList()); - } - - /** - * Append a compound instruction. - * - * @param ih - * where to append the instruction list - * @param c - * The composite instruction (containing an InstructionList) - * @return instruction handle of the first appended instruction - */ - public InstructionHandle append(InstructionHandle ih, CompoundInstruction c) { - return append(ih, c.getInstructionList()); - } - - /** - * Append an instruction after instruction (handle) ih contained in this - * list. - * - * @param ih - * where to append the instruction list - * @param i - * Instruction to append - * @return instruction handle pointing to the first appended - * instruction - */ - public InstructionHandle append(InstructionHandle ih, Instruction i) { - return append(ih, new InstructionList(i)); - } - - /** - * Append an instruction after instruction (handle) ih contained in this - * list. - * - * @param ih - * where to append the instruction list - * @param i - * Instruction to append - * @return instruction handle pointing to the first appended - * instruction - */ - public BranchHandle append(InstructionHandle ih, BranchInstruction i) { - BranchHandle bh = BranchHandle.getBranchHandle(i); - InstructionList il = new InstructionList(); - il.append(bh); - append(ih, il); - return bh; - } - - /** - * Insert another list before Instruction handle ih contained in this list. - * Consumes argument list, i.e., it becomes empty. - * - * @param ih - * where to append the instruction list - * @param il - * Instruction list to insert - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert(InstructionHandle ih, InstructionList il) { - if (il == null) { - throw new ClassGenException("Inserting null InstructionList"); - } - if (il.isEmpty()) { - return ih; - } - InstructionHandle prev = ih.prev, ret = il.start; - ih.prev = il.end; - il.end.next = ih; - il.start.prev = prev; - if (prev != null) { - prev.next = il.start; - } else { - start = il.start; // Update start ... - } - length += il.length; // Update length - il.clear(); - return ret; - } - - /** - * Insert another list. - * - * @param il - * list to insert before start of this list - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert(InstructionList il) { - if (isEmpty()) { - append(il); // Code is identical for this case - return start; - } else { - return insert(start, il); - } - } - - /** - * Insert an instruction at start of this list. - * - * @param ih - * instruction to insert - */ - private void insert(InstructionHandle ih) { - if (isEmpty()) { - start = end = ih; - ih.next = ih.prev = null; - } else { - start.prev = ih; - ih.next = start; - ih.prev = null; - start = ih; - } - length++; - } - - /** - * Insert another list before Instruction i contained in this list. Consumes - * argument list, i.e., it becomes empty. - * - * @param i - * where to append the instruction list - * @param il - * Instruction list to insert - * @return instruction handle pointing to the first inserted instruction, - * i.e., il.getStart() - */ - public InstructionHandle insert(Instruction i, InstructionList il) { - InstructionHandle ih; - if ((ih = findInstruction1(i)) == null) { - throw new ClassGenException("Instruction " + i - + " is not contained in this list."); - } - return insert(ih, il); - } - - /** - * Insert an instruction at start of this list. - * - * @param i - * instruction to insert - * @return instruction handle of the inserted instruction - */ - public InstructionHandle insert(Instruction i) { - InstructionHandle ih = InstructionHandle.getInstructionHandle(i); - insert(ih); - return ih; - } - - /** - * Insert a branch instruction at start of this list. - * - * @param i - * branch instruction to insert - * @return branch instruction handle of the appended instruction - */ - public BranchHandle insert(BranchInstruction i) { - BranchHandle ih = BranchHandle.getBranchHandle(i); - insert(ih); - return ih; - } - - /** - * Insert a single instruction j before another instruction i, which must be - * in this list of course! - * - * @param i - * Instruction in list - * @param j - * Instruction to insert before i in list - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert(Instruction i, Instruction j) { - return insert(i, new InstructionList(j)); - } - - /** - * Insert a compound instruction before instruction i. - * - * @param i - * Instruction in list - * @param c - * The composite instruction (containing an InstructionList) - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert(Instruction i, CompoundInstruction c) { - return insert(i, c.getInstructionList()); - } - - /** - * Insert a compound instruction. - * - * @param c - * The composite instruction (containing an InstructionList) - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert(CompoundInstruction c) { - return insert(c.getInstructionList()); - } - - /** - * Insert an instruction before instruction (handle) ih contained in this - * list. - * - * @param ih - * where to insert to the instruction list - * @param i - * Instruction to insert - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert(InstructionHandle ih, Instruction i) { - return insert(ih, new InstructionList(i)); - } - - /** - * Insert a compound instruction. - * - * @param ih - * where to insert the instruction list - * @param c - * The composite instruction (containing an InstructionList) - * @return instruction handle of the first inserted instruction - */ - public InstructionHandle insert(InstructionHandle ih, CompoundInstruction c) { - return insert(ih, c.getInstructionList()); - } - - /** - * Insert an instruction before instruction (handle) ih contained in this - * list. - * - * @param ih - * where to insert to the instruction list - * @param i - * Instruction to insert - * @return instruction handle of the first inserted instruction - */ - public BranchHandle insert(InstructionHandle ih, BranchInstruction i) { - BranchHandle bh = BranchHandle.getBranchHandle(i); - InstructionList il = new InstructionList(); - il.append(bh); - insert(ih, il); - return bh; - } - - /** - * Take all instructions (handles) from "start" to "end" and append them - * after the new location "target". Of course, "end" must be after "start" - * and target must not be located withing this range. If you want to move - * something to the start of the list use null as value for target.
      - * Any instruction targeters pointing to handles within the block, keep - * their targets. - * - * @param start - * of moved block - * @param end - * of moved block - * @param target - * of moved block - */ - public void move(InstructionHandle start, InstructionHandle end, - InstructionHandle target) { - // Step 1: Check constraints - if ((start == null) || (end == null)) { - throw new ClassGenException("Invalid null handle: From " + start - + " to " + end); - } - if ((target == start) || (target == end)) { - throw new ClassGenException("Invalid range: From " + start + " to " - + end + " contains target " + target); - } - for (InstructionHandle ih = start; ih != end.next; ih = ih.next) { - if (ih == null) { - throw new ClassGenException("Invalid range: From " + start - + " to " + end); - } else if (ih == target) { - throw new ClassGenException("Invalid range: From " + start - + " to " + end + " contains target " + target); - } - } - // Step 2: Temporarily remove the given instructions from the list - InstructionHandle prev = start.prev, next = end.next; - if (prev != null) { - prev.next = next; - } else { - this.start = next; - } - if (next != null) { - next.prev = prev; - } else { - this.end = prev; - } - start.prev = end.next = null; - // Step 3: append after target - if (target == null) { // append to start of list - if (this.start != null) { - this.start.prev = end; - } - end.next = this.start; - this.start = start; - } else { - next = target.next; - target.next = start; - start.prev = target; - end.next = next; - if (next != null) { - next.prev = end; - } else { - this.end = end; - } - } - } - - /** - * Move a single instruction (handle) to a new location. - * - * @param ih - * moved instruction - * @param target - * new location of moved instruction - */ - public void move(InstructionHandle ih, InstructionHandle target) { - move(ih, ih, target); - } - - /** - * Remove from instruction `prev' to instruction `next' both contained in - * this list. Throws TargetLostException when one of the removed instruction - * handles is still being targeted. - * - * @param prev - * where to start deleting (predecessor, exclusive) - * @param next - * where to end deleting (successor, exclusive) - */ - private void remove(InstructionHandle prev, InstructionHandle next) - throws TargetLostException { - InstructionHandle first, last; // First and last deleted instruction - if ((prev == null) && (next == null)) { // singleton list - first = last = start; - start = end = null; - } else { - if (prev == null) { // At start of list - first = start; - start = next; - } else { - first = prev.next; - prev.next = next; - } - if (next == null) { // At end of list - last = end; - end = prev; - } else { - last = next.prev; - next.prev = prev; - } - } - first.prev = null; // Completely separated from rest of list - last.next = null; - List target_vec = new ArrayList(); - for (InstructionHandle ih = first; ih != null; ih = ih.next) { - ih.getInstruction().dispose(); // e.g. BranchInstructions release - // their targets - } - StringBuffer buf = new StringBuffer("{ "); - for (InstructionHandle ih = first; ih != null; ih = next) { - next = ih.next; - length--; - if (ih.hasTargeters()) { // Still got targeters? - target_vec.add(ih); - buf.append(ih.toString(true) + " "); - ih.next = ih.prev = null; - } else { - ih.dispose(); - } - } - buf.append("}"); - if (!target_vec.isEmpty()) { - InstructionHandle[] targeted = new InstructionHandle[target_vec - .size()]; - target_vec.toArray(targeted); - throw new TargetLostException(targeted, buf.toString()); - } - } - - /** - * Remove instruction from this list. The corresponding Instruction handles - * must not be reused! - * - * @param ih - * instruction (handle) to remove - */ - public void delete(InstructionHandle ih) throws TargetLostException { - remove(ih.prev, ih.next); - } - - /** - * Remove instruction from this list. The corresponding Instruction handles - * must not be reused! - * - * @param i - * instruction to remove - */ - public void delete(Instruction i) throws TargetLostException { - InstructionHandle ih; - if ((ih = findInstruction1(i)) == null) { - throw new ClassGenException("Instruction " + i - + " is not contained in this list."); - } - delete(ih); - } - - /** - * Remove instructions from instruction `from' to instruction `to' contained - * in this list. The user must ensure that `from' is an instruction before - * `to', or risk havoc. The corresponding Instruction handles must not be - * reused! - * - * @param from - * where to start deleting (inclusive) - * @param to - * where to end deleting (inclusive) - */ - public void delete(InstructionHandle from, InstructionHandle to) - throws TargetLostException { - remove(from.prev, to.next); - } - - /** - * Remove instructions from instruction `from' to instruction `to' contained - * in this list. The user must ensure that `from' is an instruction before - * `to', or risk havoc. The corresponding Instruction handles must not be - * reused! - * - * @param from - * where to start deleting (inclusive) - * @param to - * where to end deleting (inclusive) - */ - public void delete(Instruction from, Instruction to) - throws TargetLostException { - InstructionHandle from_ih, to_ih; - if ((from_ih = findInstruction1(from)) == null) { - throw new ClassGenException("Instruction " + from - + " is not contained in this list."); - } - if ((to_ih = findInstruction2(to)) == null) { - throw new ClassGenException("Instruction " + to - + " is not contained in this list."); - } - delete(from_ih, to_ih); - } - - /** - * Search for given Instruction reference, start at beginning of list. - * - * @param i - * instruction to search for - * @return instruction found on success, null otherwise - */ - private InstructionHandle findInstruction1(Instruction i) { - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - if (ih.instruction == i) { - return ih; - } - } - return null; - } - - /** - * Search for given Instruction reference, start at end of list - * - * @param i - * instruction to search for - * @return instruction found on success, null otherwise - */ - private InstructionHandle findInstruction2(Instruction i) { - for (InstructionHandle ih = end; ih != null; ih = ih.prev) { - if (ih.instruction == i) { - return ih; - } - } - return null; - } - - public boolean contains(InstructionHandle i) { - if (i == null) { - return false; - } - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - if (ih == i) { - return true; - } - } - return false; - } - - public boolean contains(Instruction i) { - return findInstruction1(i) != null; - } - - public void setPositions() { - setPositions(false); - } - - /** - * Give all instructions their position number (offset in byte stream), - * i.e., make the list ready to be dumped. - * - * @param check - * Perform sanity checks, e.g. if all targeted instructions - * really belong to this list - */ - public void setPositions(boolean check) { - int max_additional_bytes = 0, additional_bytes = 0; - int index = 0, count = 0; - int[] pos = new int[length]; - /* - * Pass 0: Sanity checks - */ - if (check) { - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - if (i instanceof BranchInstruction) { // target instruction - // within list? - Instruction inst = ((BranchInstruction) i).getTarget().instruction; - if (!contains(inst)) { - throw new ClassGenException("Branch target of " - + Constants.OPCODE_NAMES[i.opcode] + ":" + inst - + " not in instruction list"); - } - if (i instanceof Select) { - InstructionHandle[] targets = ((Select) i).getTargets(); - for (int j = 0; j < targets.length; j++) { - inst = targets[j].instruction; - if (!contains(inst)) { - throw new ClassGenException("Branch target of " - + Constants.OPCODE_NAMES[i.opcode] - + ":" + inst - + " not in instruction list"); - } - } - } - if (!(ih instanceof BranchHandle)) { - throw new ClassGenException("Branch instruction " - + Constants.OPCODE_NAMES[i.opcode] + ":" + inst - + " not contained in BranchHandle."); - } - } - } - } - /* - * Pass 1: Set position numbers and sum up the maximum number of bytes - * an instruction may be shifted. - */ - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - ih.setPosition(index); - pos[count++] = index; - /* - * Get an estimate about how many additional bytes may be added, - * because BranchInstructions may have variable length depending on - * the target offset (short vs. int) or alignment issues - * (TABLESWITCH and LOOKUPSWITCH). - */ - switch (i.getOpcode()) { - case Constants.JSR: - case Constants.GOTO: - max_additional_bytes += 2; - break; - case Constants.TABLESWITCH: - case Constants.LOOKUPSWITCH: - max_additional_bytes += 3; - break; - } - index += i.getLength(); - } - /* - * Pass 2: Expand the variable-length (Branch)Instructions depending on - * the target offset (short or int) and ensure that branch targets are - * within this list. - */ - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - additional_bytes += ih.updatePosition(additional_bytes, - max_additional_bytes); - } - /* - * Pass 3: Update position numbers (which may have changed due to the - * preceding expansions), like pass 1. - */ - index = count = 0; - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - ih.setPosition(index); - pos[count++] = index; - index += i.getLength(); - } - byte_positions = new int[count]; // Trim to proper size - System.arraycopy(pos, 0, byte_positions, 0, count); - } - - /** - * When everything is finished, use this method to convert the instruction - * list into an array of bytes. - * - * @return the byte code ready to be dumped - */ - public byte[] getByteCode() { - // Update position indices of instructions - setPositions(); - ByteArrayOutputStream b = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(b); - try { - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - i.dump(out); // Traverse list - } - } catch (IOException e) { - System.err.println(e); - return null; - } - return b.toByteArray(); - } - - /** - * @return an array of instructions without target information for branch - * instructions. - */ - public Instruction[] getInstructions() { - ByteSequence bytes = new ByteSequence(getByteCode()); - List instructions = new ArrayList(); - try { - while (bytes.available() > 0) { - instructions.add(Instruction.readInstruction(bytes)); - } - } catch (IOException e) { - throw new ClassGenException(e.toString()); - } - return instructions.toArray(new Instruction[instructions.size()]); - } - - @Override - public String toString() { - return toString(true); - } - - /** - * @param verbose - * toggle output format - * @return String containing all instructions in this list. - */ - public String toString(boolean verbose) { - StringBuffer buf = new StringBuffer(); - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - buf.append(ih.toString(verbose)).append("\n"); - } - return buf.toString(); - } - - /** - * @return Enumeration that lists all instructions (handles) - */ - public Iterator iterator() { - return new Iterator() { - - private InstructionHandle ih = start; - - @Override - public Object next() { - InstructionHandle i = ih; - ih = ih.next; - return i; - } - - @Override - public void remove() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean hasNext() { - return ih != null; - } - }; - } - - /** - * @return array containing all instructions (handles) - */ - public InstructionHandle[] getInstructionHandles() { - InstructionHandle[] ihs = new InstructionHandle[length]; - InstructionHandle ih = start; - for (int i = 0; i < length; i++) { - ihs[i] = ih; - ih = ih.next; - } - return ihs; - } - - /** - * Get positions (offsets) of all instructions in the list. This relies on - * that the list has been freshly created from an byte code array, or that - * setPositions() has been called. Otherwise this may be inaccurate. - * - * @return array containing all instruction's offset in byte code - */ - public int[] getInstructionPositions() { - return byte_positions; - } - - /** - * @return complete, i.e., deep copy of this list - */ - public InstructionList copy() { - Map map = new HashMap(); - InstructionList il = new InstructionList(); - /* - * Pass 1: Make copies of all instructions, append them to the new list - * and associate old instruction references with the new ones, i.e., a - * 1:1 mapping. - */ - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - Instruction c = i.copy(); // Use clone for shallow copy - if (c instanceof BranchInstruction) { - map.put(ih, il.append((BranchInstruction) c)); - } else { - map.put(ih, il.append(c)); - } - } - /* - * Pass 2: Update branch targets. - */ - InstructionHandle ih = start; - InstructionHandle ch = il.start; - while (ih != null) { - Instruction i = ih.instruction; - Instruction c = ch.instruction; - if (i instanceof BranchInstruction) { - BranchInstruction bi = (BranchInstruction) i; - BranchInstruction bc = (BranchInstruction) c; - InstructionHandle itarget = bi.getTarget(); // old target - // New target is in hash map - bc.setTarget(map.get(itarget)); - if (bi instanceof Select) { // Either LOOKUPSWITCH or - // TABLESWITCH - InstructionHandle[] itargets = ((Select) bi).getTargets(); - InstructionHandle[] ctargets = ((Select) bc).getTargets(); - for (int j = 0; j < itargets.length; j++) { // Update all - // targets - ctargets[j] = map.get(itargets[j]); - } - } - } - ih = ih.next; - ch = ch.next; - } - return il; - } - - /** - * Replace all references to the old constant pool with references to the - * new constant pool - */ - public void replaceConstantPool(ConstantPoolGen old_cp, - ConstantPoolGen new_cp) { - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.instruction; - if (i instanceof CPInstruction) { - CPInstruction ci = (CPInstruction) i; - Constant c = old_cp.getConstant(ci.getIndex()); - ci.setIndex(new_cp.addConstant(c, old_cp)); - } - } - } - - private void clear() { - start = end = null; - length = 0; - } - - /** - * Delete contents of list. Provides besser memory utilization, because the - * system then may reuse the instruction handles. This method is typically - * called right after - * MethodGen.getMethod(). - */ - public void dispose() { - // Traverse in reverse order, because ih.next is overwritten - for (InstructionHandle ih = end; ih != null; ih = ih.prev) { - /* - * Causes BranchInstructions to release target and targeters, - * because it calls dispose() on the contained instruction. - */ - ih.dispose(); - } - clear(); - } - - /** - * @return start of list - */ - public InstructionHandle getStart() { - return start; - } - - /** - * @return end of list - */ - public InstructionHandle getEnd() { - return end; - } - - /** - * @return length of list (Number of instructions, not bytes) - */ - public int getLength() { - return length; - } - - /** - * @return length of list (Number of instructions, not bytes) - */ - public int size() { - return length; - } - - /** - * Redirect all references from old_target to new_target, i.e., update - * targets of branch instructions. - * - * @param old_target - * the old target instruction handle - * @param new_target - * the new target instruction handle - */ - public void redirectBranches(InstructionHandle old_target, - InstructionHandle new_target) { - for (InstructionHandle ih = start; ih != null; ih = ih.next) { - Instruction i = ih.getInstruction(); - if (i instanceof BranchInstruction) { - BranchInstruction b = (BranchInstruction) i; - InstructionHandle target = b.getTarget(); - if (target == old_target) { - b.setTarget(new_target); - } - if (b instanceof Select) { // Either LOOKUPSWITCH or TABLESWITCH - InstructionHandle[] targets = ((Select) b).getTargets(); - for (int j = 0; j < targets.length; j++) { - if (targets[j] == old_target) { - ((Select) b).setTarget(j, new_target); - } - } - } - } - } - } - - /** - * Redirect all references of local variables from old_target to new_target. - * - * @param lg - * array of local variables - * @param old_target - * the old target instruction handle - * @param new_target - * the new target instruction handle - * @see MethodGen - */ - public void redirectLocalVariables(LocalVariableGen[] lg, - InstructionHandle old_target, InstructionHandle new_target) { - for (int i = 0; i < lg.length; i++) { - InstructionHandle start = lg[i].getStart(); - InstructionHandle end = lg[i].getEnd(); - if (start == old_target) { - lg[i].setStart(new_target); - } - if (end == old_target) { - lg[i].setEnd(new_target); - } - } - } - - /** - * Redirect all references of exception handlers from old_target to - * new_target. - * - * @param exceptions - * array of exception handlers - * @param old_target - * the old target instruction handle - * @param new_target - * the new target instruction handle - * @see MethodGen - */ - public void redirectExceptionHandlers(CodeExceptionGen[] exceptions, - InstructionHandle old_target, InstructionHandle new_target) { - for (int i = 0; i < exceptions.length; i++) { - if (exceptions[i].getStartPC() == old_target) { - exceptions[i].setStartPC(new_target); - } - if (exceptions[i].getEndPC() == old_target) { - exceptions[i].setEndPC(new_target); - } - if (exceptions[i].getHandlerPC() == old_target) { - exceptions[i].setHandlerPC(new_target); - } - } - } - - private List observers; - - /** - * Add observer for this object. - */ - public void addObserver(InstructionListObserver o) { - if (observers == null) { - observers = new ArrayList(); - } - observers.add(o); - } - - /** - * Remove observer for this object. - */ - public void removeObserver(InstructionListObserver o) { - if (observers != null) { - observers.remove(o); - } - } - - /** - * Call notify() method on all observers. This method is not called - * automatically whenever the state has changed, but has to be called by the - * user after he has finished editing the object. - */ - public void update() { - if (observers != null) { - for (Iterator e = observers.iterator(); e - .hasNext();) { - e.next().notify(this); - } - } - } -} diff --git a/src/org/apache/bcel/generic/InstructionListObserver.java b/src/org/apache/bcel/generic/InstructionListObserver.java deleted file mode 100644 index b89f6da..0000000 --- a/src/org/apache/bcel/generic/InstructionListObserver.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Implement this interface if you're interested in changes to an - * InstructionList object and register yourself with addObserver(). - * - * @version $Id: InstructionListObserver.java 386056 2006-03-15 11:31:56Z tcurdt - * $ - * @author M. Dahm - */ -public interface InstructionListObserver { - - public void notify(InstructionList list); -} diff --git a/src/org/apache/bcel/generic/InstructionTargeter.java b/src/org/apache/bcel/generic/InstructionTargeter.java deleted file mode 100644 index 2e78bff..0000000 --- a/src/org/apache/bcel/generic/InstructionTargeter.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denote that a class targets InstructionHandles within an InstructionList. - * Namely the following implementers: - * - * @see BranchHandle - * @see LocalVariableGen - * @see CodeExceptionGen - * @version $Id: InstructionTargeter.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface InstructionTargeter { - - public boolean containsTarget(InstructionHandle ih); - - public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih); -} diff --git a/src/org/apache/bcel/generic/InvokeInstruction.java b/src/org/apache/bcel/generic/InvokeInstruction.java deleted file mode 100644 index e6f7f5a..0000000 --- a/src/org/apache/bcel/generic/InvokeInstruction.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.util.StringTokenizer; -import org.apache.bcel.Constants; -import org.apache.bcel.classfile.Constant; -import org.apache.bcel.classfile.ConstantPool; - -/** - * Super class for the INVOKExxx family of instructions. - * - * @version $Id: InvokeInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class InvokeInstruction extends FieldOrMethod implements - ExceptionThrower, TypedInstruction, StackConsumer, StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - InvokeInstruction() { - } - - /** - * @param index - * to constant pool - */ - protected InvokeInstruction(short opcode, int index) { - super(opcode, index); - } - - /** - * @return mnemonic for instruction with symbolic references resolved - */ - @Override - public String toString(ConstantPool cp) { - Constant c = cp.getConstant(index); - StringTokenizer tok = new StringTokenizer(cp.constantToString(c)); - return Constants.OPCODE_NAMES[opcode] + " " - + tok.nextToken().replace('.', '/') + tok.nextToken(); - } - - /** - * Also works for instructions whose stack effect depends on the constant - * pool entry they reference. - * - * @return Number of words consumed from stack by this instruction - */ - @Override - public int consumeStack(ConstantPoolGen cpg) { - String signature = getSignature(cpg); - Type[] args = Type.getArgumentTypes(signature); - int sum; - if (opcode == Constants.INVOKESTATIC) { - sum = 0; - } else { - sum = 1; // this reference - } - int n = args.length; - for (int i = 0; i < n; i++) { - sum += args[i].getSize(); - } - return sum; - } - - /** - * Also works for instructions whose stack effect depends on the constant - * pool entry they reference. - * - * @return Number of words produced onto stack by this instruction - */ - @Override - public int produceStack(ConstantPoolGen cpg) { - return getReturnType(cpg).getSize(); - } - - /** - * @return return type of referenced method. - */ - @Override - public Type getType(ConstantPoolGen cpg) { - return getReturnType(cpg); - } - - /** - * @return name of referenced method. - */ - public String getMethodName(ConstantPoolGen cpg) { - return getName(cpg); - } - - /** - * @return return type of referenced method. - */ - public Type getReturnType(ConstantPoolGen cpg) { - return Type.getReturnType(getSignature(cpg)); - } - - /** - * @return argument types of referenced method. - */ - public Type[] getArgumentTypes(ConstantPoolGen cpg) { - return Type.getArgumentTypes(getSignature(cpg)); - } -} diff --git a/src/org/apache/bcel/generic/JSR.java b/src/org/apache/bcel/generic/JSR.java deleted file mode 100644 index 8ef3a0d..0000000 --- a/src/org/apache/bcel/generic/JSR.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; - -/** - * JSR - Jump to subroutine - * - * @version $Id: JSR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class JSR extends JsrInstruction implements VariableLengthInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - JSR() { - } - - public JSR(InstructionHandle target) { - super(org.apache.bcel.Constants.JSR, target); - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - index = getTargetOffset(); - if (opcode == org.apache.bcel.Constants.JSR) { - super.dump(out); - } else { // JSR_W - index = getTargetOffset(); - out.writeByte(opcode); - out.writeInt(index); - } - } - - @Override - protected int updatePosition(int offset, int max_offset) { - int i = getTargetOffset(); // Depending on old position value - position += offset; // Position may be shifted by preceding expansions - if (Math.abs(i) >= (32767 - max_offset)) { // to large for short - // (estimate) - opcode = org.apache.bcel.Constants.JSR_W; - length = 5; - return 2; // 5 - 3 - } - return 0; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitVariableLengthInstruction(this); - v.visitBranchInstruction(this); - v.visitJsrInstruction(this); - v.visitJSR(this); - } -} diff --git a/src/org/apache/bcel/generic/JSR_W.java b/src/org/apache/bcel/generic/JSR_W.java deleted file mode 100644 index b6d7c2b..0000000 --- a/src/org/apache/bcel/generic/JSR_W.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * JSR_W - Jump to subroutine - * - * @version $Id: JSR_W.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class JSR_W extends JsrInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - JSR_W() { - } - - public JSR_W(InstructionHandle target) { - super(org.apache.bcel.Constants.JSR_W, target); - length = 5; - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - index = getTargetOffset(); - out.writeByte(opcode); - out.writeInt(index); - } - - /** - * Read needed data (e.g. index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - index = bytes.readInt(); - length = 5; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitBranchInstruction(this); - v.visitJsrInstruction(this); - v.visitJSR_W(this); - } -} diff --git a/src/org/apache/bcel/generic/JsrInstruction.java b/src/org/apache/bcel/generic/JsrInstruction.java deleted file mode 100644 index c8aa663..0000000 --- a/src/org/apache/bcel/generic/JsrInstruction.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Super class for JSR - Jump to subroutine - * - * @version $Id: JsrInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class JsrInstruction extends BranchInstruction implements - UnconditionalBranch, TypedInstruction, StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - JsrInstruction(short opcode, InstructionHandle target) { - super(opcode, target); - } - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - JsrInstruction() { - } - - /** - * @return return address type - */ - @Override - public Type getType(ConstantPoolGen cp) { - return new ReturnaddressType(physicalSuccessor()); - } - - /** - * Returns an InstructionHandle to the physical successor of this - * JsrInstruction. For this method to work, this JsrInstruction object - * must not be shared between multiple InstructionHandle objects! - * Formally, there must not be InstructionHandle objects i, j where i != j - * and i.getInstruction() == this == j.getInstruction(). - * - * @return an InstructionHandle to the "next" instruction that will be - * executed when RETurned from a subroutine. - */ - public InstructionHandle physicalSuccessor() { - InstructionHandle ih = this.target; - // Rewind! - while (ih.getPrev() != null) { - ih = ih.getPrev(); - } - // Find the handle for "this" JsrInstruction object. - while (ih.getInstruction() != this) { - ih = ih.getNext(); - } - InstructionHandle toThis = ih; - while (ih != null) { - ih = ih.getNext(); - if ((ih != null) && (ih.getInstruction() == this)) { - throw new RuntimeException( - "physicalSuccessor() called on a shared JsrInstruction."); - } - } - // Return the physical successor - return toThis.getNext(); - } -} diff --git a/src/org/apache/bcel/generic/L2D.java b/src/org/apache/bcel/generic/L2D.java deleted file mode 100644 index 046f452..0000000 --- a/src/org/apache/bcel/generic/L2D.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * L2D - Convert long to double - * - *
      - * Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: L2D.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class L2D extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public L2D() { - super(org.apache.bcel.Constants.L2D); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitL2D(this); - } -} diff --git a/src/org/apache/bcel/generic/L2F.java b/src/org/apache/bcel/generic/L2F.java deleted file mode 100644 index 04bae18..0000000 --- a/src/org/apache/bcel/generic/L2F.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * L2F - Convert long to float - * - *
      - * Stack: ..., value.word1, value.word2 -> ..., result
      - * 
      - * - * @version $Id: L2F.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class L2F extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public L2F() { - super(org.apache.bcel.Constants.L2F); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitL2F(this); - } -} diff --git a/src/org/apache/bcel/generic/L2I.java b/src/org/apache/bcel/generic/L2I.java deleted file mode 100644 index 24e328b..0000000 --- a/src/org/apache/bcel/generic/L2I.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * L2I - Convert long to int - * - *
      - * Stack: ..., value.word1, value.word2 -> ..., result
      - * 
      - * - * @version $Id: L2I.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class L2I extends ConversionInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public L2I() { - super(org.apache.bcel.Constants.L2I); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitConversionInstruction(this); - v.visitL2I(this); - } -} diff --git a/src/org/apache/bcel/generic/LADD.java b/src/org/apache/bcel/generic/LADD.java deleted file mode 100644 index 3f60586..0000000 --- a/src/org/apache/bcel/generic/LADD.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LADD - Add longs - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result.word1, result.word2 - * - * @version $Id: LADD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LADD extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LADD() { - super(org.apache.bcel.Constants.LADD); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLADD(this); - } -} diff --git a/src/org/apache/bcel/generic/LALOAD.java b/src/org/apache/bcel/generic/LALOAD.java deleted file mode 100644 index b627d12..0000000 --- a/src/org/apache/bcel/generic/LALOAD.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LALOAD - Load long from array - * - *
      - * Stack: ..., arrayref, index -> ..., value1, value2
      - * 
      - * - * @version $Id: LALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LALOAD extends ArrayInstruction implements StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Load long from array - */ - public LALOAD() { - super(org.apache.bcel.Constants.LALOAD); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitLALOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/LAND.java b/src/org/apache/bcel/generic/LAND.java deleted file mode 100644 index 09ae32c..0000000 --- a/src/org/apache/bcel/generic/LAND.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LAND - Bitwise AND longs - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result.word1, result.word2 - * - * @version $Id: LAND.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LAND extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LAND() { - super(org.apache.bcel.Constants.LAND); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLAND(this); - } -} diff --git a/src/org/apache/bcel/generic/LASTORE.java b/src/org/apache/bcel/generic/LASTORE.java deleted file mode 100644 index b3e953b..0000000 --- a/src/org/apache/bcel/generic/LASTORE.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LASTORE - Store into long array - * - *
      - * Stack: ..., arrayref, index, value.word1, value.word2 -> ...
      - * 
      - * - * @version $Id: LASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LASTORE extends ArrayInstruction implements StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Store long into array - */ - public LASTORE() { - super(org.apache.bcel.Constants.LASTORE); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitLASTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/LCMP.java b/src/org/apache/bcel/generic/LCMP.java deleted file mode 100644 index 70ce072..0000000 --- a/src/org/apache/bcel/generic/LCMP.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LCMP - Compare longs: - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result <= -1, 0, 1> - * - * @version $Id: LCMP.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LCMP extends Instruction implements TypedInstruction, - StackProducer, StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LCMP() { - super(org.apache.bcel.Constants.LCMP, (short) 1); - } - - /** - * @return Type.LONG - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.LONG; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitLCMP(this); - } -} diff --git a/src/org/apache/bcel/generic/LCONST.java b/src/org/apache/bcel/generic/LCONST.java deleted file mode 100644 index c8ce03c..0000000 --- a/src/org/apache/bcel/generic/LCONST.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LCONST - Push 0 or 1, other values cause an exception - * - *
      - * Stack: ... -> ...,
      - * 
      - * - * @version $Id: LCONST.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LCONST extends Instruction implements ConstantPushInstruction, - TypedInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - private long value; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LCONST() { - } - - public LCONST(long l) { - super(org.apache.bcel.Constants.LCONST_0, (short) 1); - if (l == 0) { - opcode = org.apache.bcel.Constants.LCONST_0; - } else if (l == 1) { - opcode = org.apache.bcel.Constants.LCONST_1; - } else { - throw new ClassGenException("LCONST can be used only for 0 and 1: " - + l); - } - value = l; - } - - @Override - public Number getValue() { - return new Long(value); - } - - /** - * @return Type.LONG - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.LONG; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitLCONST(this); - } -} diff --git a/src/org/apache/bcel/generic/LDC.java b/src/org/apache/bcel/generic/LDC.java deleted file mode 100644 index e0e318d..0000000 --- a/src/org/apache/bcel/generic/LDC.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * LDC - Push item from constant pool. - * - *
      - * Stack: ... -> ..., item
      - * 
      - * - * @version $Id: LDC.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LDC extends CPInstruction implements PushInstruction, - ExceptionThrower, TypedInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LDC() { - } - - public LDC(int index) { - super(org.apache.bcel.Constants.LDC_W, index); - setSize(); - } - - // Adjust to proper size - protected final void setSize() { - if (index <= org.apache.bcel.Constants.MAX_BYTE) { // Fits in one byte? - opcode = org.apache.bcel.Constants.LDC; - length = 2; - } else { - opcode = org.apache.bcel.Constants.LDC_W; - length = 3; - } - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); - if (length == 2) { - out.writeByte(index); - } else { - out.writeShort(index); - } - } - - /** - * Set the index to constant pool and adjust size. - */ - @Override - public final void setIndex(int index) { - super.setIndex(index); - setSize(); - } - - /** - * Read needed data (e.g. index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - length = 2; - index = bytes.readUnsignedByte(); - } - - public Object getValue(ConstantPoolGen cpg) { - org.apache.bcel.classfile.Constant c = cpg.getConstantPool() - .getConstant(index); - switch (c.getTag()) { - case org.apache.bcel.Constants.CONSTANT_String: - int i = ((org.apache.bcel.classfile.ConstantString) c) - .getStringIndex(); - c = cpg.getConstantPool().getConstant(i); - return ((org.apache.bcel.classfile.ConstantUtf8) c).getBytes(); - case org.apache.bcel.Constants.CONSTANT_Float: - return new Float( - ((org.apache.bcel.classfile.ConstantFloat) c).getBytes()); - case org.apache.bcel.Constants.CONSTANT_Integer: - return new Integer( - ((org.apache.bcel.classfile.ConstantInteger) c).getBytes()); - case org.apache.bcel.Constants.CONSTANT_Class: - return c; - default: // Never reached - throw new RuntimeException("Unknown or invalid constant type at " - + index); - } - } - - @Override - public Type getType(ConstantPoolGen cpg) { - switch (cpg.getConstantPool().getConstant(index).getTag()) { - case org.apache.bcel.Constants.CONSTANT_String: - return Type.STRING; - case org.apache.bcel.Constants.CONSTANT_Float: - return Type.FLOAT; - case org.apache.bcel.Constants.CONSTANT_Integer: - return Type.INT; - case org.apache.bcel.Constants.CONSTANT_Class: - return Type.CLASS; - default: // Never reached - throw new RuntimeException("Unknown or invalid constant type at " - + index); - } - } - - @Override - public Class[] getExceptions() { - return org.apache.bcel.ExceptionConstants.EXCS_STRING_RESOLUTION; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitLDC(this); - } -} diff --git a/src/org/apache/bcel/generic/LDC2_W.java b/src/org/apache/bcel/generic/LDC2_W.java deleted file mode 100644 index 4d193fe..0000000 --- a/src/org/apache/bcel/generic/LDC2_W.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LDC2_W - Push long or double from constant pool - * - *
      - * Stack: ... -> ..., item.word1, item.word2
      - * 
      - * - * @version $Id: LDC2_W.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LDC2_W extends CPInstruction implements PushInstruction, - TypedInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LDC2_W() { - } - - public LDC2_W(int index) { - super(org.apache.bcel.Constants.LDC2_W, index); - } - - @Override - public Type getType(ConstantPoolGen cpg) { - switch (cpg.getConstantPool().getConstant(index).getTag()) { - case org.apache.bcel.Constants.CONSTANT_Long: - return Type.LONG; - case org.apache.bcel.Constants.CONSTANT_Double: - return Type.DOUBLE; - default: // Never reached - throw new RuntimeException("Unknown constant type " + opcode); - } - } - - public Number getValue(ConstantPoolGen cpg) { - org.apache.bcel.classfile.Constant c = cpg.getConstantPool() - .getConstant(index); - switch (c.getTag()) { - case org.apache.bcel.Constants.CONSTANT_Long: - return new Long( - ((org.apache.bcel.classfile.ConstantLong) c).getBytes()); - case org.apache.bcel.Constants.CONSTANT_Double: - return new Double( - ((org.apache.bcel.classfile.ConstantDouble) c).getBytes()); - default: // Never reached - throw new RuntimeException("Unknown or invalid constant type at " - + index); - } - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitLDC2_W(this); - } -} diff --git a/src/org/apache/bcel/generic/LDC_W.java b/src/org/apache/bcel/generic/LDC_W.java deleted file mode 100644 index e5c77f2..0000000 --- a/src/org/apache/bcel/generic/LDC_W.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * LDC_W - Push item from constant pool (wide index) - * - *
      - * Stack: ... -> ..., item.word1, item.word2
      - * 
      - * - * @version $Id: LDC_W.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LDC_W extends LDC { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LDC_W() { - } - - public LDC_W(int index) { - super(index); - } - - /** - * Read needed data (i.e., index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - setIndex(bytes.readUnsignedShort()); - // Override just in case it has been changed - opcode = org.apache.bcel.Constants.LDC_W; - length = 3; - } -} diff --git a/src/org/apache/bcel/generic/LDIV.java b/src/org/apache/bcel/generic/LDIV.java deleted file mode 100644 index f35b670..0000000 --- a/src/org/apache/bcel/generic/LDIV.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LDIV - Divide longs - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result.word1, result.word2 - * - * @version $Id: LDIV.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LDIV extends ArithmeticInstruction implements ExceptionThrower { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LDIV() { - super(org.apache.bcel.Constants.LDIV); - } - - @Override - public Class[] getExceptions() { - return new Class[] { org.apache.bcel.ExceptionConstants.ARITHMETIC_EXCEPTION }; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLDIV(this); - } -} diff --git a/src/org/apache/bcel/generic/LLOAD.java b/src/org/apache/bcel/generic/LLOAD.java deleted file mode 100644 index ebe3e0d..0000000 --- a/src/org/apache/bcel/generic/LLOAD.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LLOAD - Load long from local variable - * - *
      - * Stack ... -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: LLOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LLOAD extends LoadInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LLOAD() { - super(org.apache.bcel.Constants.LLOAD, - org.apache.bcel.Constants.LLOAD_0); - } - - public LLOAD(int n) { - super(org.apache.bcel.Constants.LLOAD, - org.apache.bcel.Constants.LLOAD_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - super.accept(v); - v.visitLLOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/LMUL.java b/src/org/apache/bcel/generic/LMUL.java deleted file mode 100644 index 6c62284..0000000 --- a/src/org/apache/bcel/generic/LMUL.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LMUL - Multiply longs - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result.word1, result.word2 - * - * @version $Id: LMUL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LMUL extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LMUL() { - super(org.apache.bcel.Constants.LMUL); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLMUL(this); - } -} diff --git a/src/org/apache/bcel/generic/LNEG.java b/src/org/apache/bcel/generic/LNEG.java deleted file mode 100644 index 4c750e6..0000000 --- a/src/org/apache/bcel/generic/LNEG.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LNEG - Negate long - * - *
      - * Stack: ..., value.word1, value.word2 -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: LNEG.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LNEG extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LNEG() { - super(org.apache.bcel.Constants.LNEG); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLNEG(this); - } -} diff --git a/src/org/apache/bcel/generic/LOOKUPSWITCH.java b/src/org/apache/bcel/generic/LOOKUPSWITCH.java deleted file mode 100644 index 8b63e39..0000000 --- a/src/org/apache/bcel/generic/LOOKUPSWITCH.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * LOOKUPSWITCH - Switch with unordered set of values - * - * @version $Id: LOOKUPSWITCH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see SWITCH - */ -public class LOOKUPSWITCH extends Select { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LOOKUPSWITCH() { - } - - public LOOKUPSWITCH(int[] match, InstructionHandle[] targets, - InstructionHandle defaultTarget) { - super(org.apache.bcel.Constants.LOOKUPSWITCH, match, targets, - defaultTarget); - length = (short) (9 + match_length * 8); /* - * alignment remainder assumed 0 - * here, until dump time. - */ - fixed_length = length; - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - super.dump(out); - out.writeInt(match_length); // npairs - for (int i = 0; i < match_length; i++) { - out.writeInt(match[i]); // match-offset pairs - out.writeInt(indices[i] = getTargetOffset(targets[i])); - } - } - - /** - * Read needed data (e.g. index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - super.initFromFile(bytes, wide); // reads padding - match_length = bytes.readInt(); - fixed_length = (short) (9 + match_length * 8); - length = (short) (fixed_length + padding); - match = new int[match_length]; - indices = new int[match_length]; - targets = new InstructionHandle[match_length]; - for (int i = 0; i < match_length; i++) { - match[i] = bytes.readInt(); - indices[i] = bytes.readInt(); - } - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitVariableLengthInstruction(this); - v.visitStackProducer(this); - v.visitBranchInstruction(this); - v.visitSelect(this); - v.visitLOOKUPSWITCH(this); - } -} diff --git a/src/org/apache/bcel/generic/LOR.java b/src/org/apache/bcel/generic/LOR.java deleted file mode 100644 index 3796ef0..0000000 --- a/src/org/apache/bcel/generic/LOR.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LOR - Bitwise OR long - * - *
      - * Stack: ..., value1, value2 -> ..., result
      - * 
      - * - * @version $Id: LOR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LOR extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LOR() { - super(org.apache.bcel.Constants.LOR); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLOR(this); - } -} diff --git a/src/org/apache/bcel/generic/LREM.java b/src/org/apache/bcel/generic/LREM.java deleted file mode 100644 index 1d595f8..0000000 --- a/src/org/apache/bcel/generic/LREM.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LREM - Remainder of long - * - *
      - * Stack: ..., value1, value2 -> result
      - * 
      - * - * @version $Id: LREM.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LREM extends ArithmeticInstruction implements ExceptionThrower { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LREM() { - super(org.apache.bcel.Constants.LREM); - } - - @Override - public Class[] getExceptions() { - return new Class[] { org.apache.bcel.ExceptionConstants.ARITHMETIC_EXCEPTION }; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLREM(this); - } -} diff --git a/src/org/apache/bcel/generic/LRETURN.java b/src/org/apache/bcel/generic/LRETURN.java deleted file mode 100644 index 1450d7b..0000000 --- a/src/org/apache/bcel/generic/LRETURN.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LRETURN - Return long from method - * - *
      - * Stack: ..., value.word1, value.word2 -> <empty>
      - * 
      - * - * @version $Id: LRETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LRETURN extends ReturnInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LRETURN() { - super(org.apache.bcel.Constants.LRETURN); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitLRETURN(this); - } -} diff --git a/src/org/apache/bcel/generic/LSHL.java b/src/org/apache/bcel/generic/LSHL.java deleted file mode 100644 index 3f931c8..0000000 --- a/src/org/apache/bcel/generic/LSHL.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LSHL - Arithmetic shift left long - * - *
      - * Stack: ..., value1.word1, value1.word2, value2 -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: LSHL.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LSHL extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LSHL() { - super(org.apache.bcel.Constants.LSHL); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLSHL(this); - } -} diff --git a/src/org/apache/bcel/generic/LSHR.java b/src/org/apache/bcel/generic/LSHR.java deleted file mode 100644 index 8ab7427..0000000 --- a/src/org/apache/bcel/generic/LSHR.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LSHR - Arithmetic shift right long - * - *
      - * Stack: ..., value1.word1, value1.word2, value2 -> ..., result.word1, result.word2
      - * 
      - * - * @version $Id: LSHR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LSHR extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LSHR() { - super(org.apache.bcel.Constants.LSHR); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLSHR(this); - } -} diff --git a/src/org/apache/bcel/generic/LSTORE.java b/src/org/apache/bcel/generic/LSTORE.java deleted file mode 100644 index 3e2dc4a..0000000 --- a/src/org/apache/bcel/generic/LSTORE.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LSTORE - Store long into local variable - * - *
      - * Stack: ..., value.word1, value.word2 -> ...
      - * 
      - * - * @version $Id: LSTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LSTORE extends StoreInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - LSTORE() { - super(org.apache.bcel.Constants.LSTORE, - org.apache.bcel.Constants.LSTORE_0); - } - - public LSTORE(int n) { - super(org.apache.bcel.Constants.LSTORE, - org.apache.bcel.Constants.LSTORE_0, n); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - super.accept(v); - v.visitLSTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/LSUB.java b/src/org/apache/bcel/generic/LSUB.java deleted file mode 100644 index 21cc308..0000000 --- a/src/org/apache/bcel/generic/LSUB.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LSUB - Substract longs - * - *
      - * Stack: ..., value1.word1, value1.word2, value2.word1, value2.word2 ->
      - * 
      - * - * ..., result.word1, result.word2 - * - * @version $Id: LSUB.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LSUB extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LSUB() { - super(org.apache.bcel.Constants.LSUB); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLSUB(this); - } -} diff --git a/src/org/apache/bcel/generic/LUSHR.java b/src/org/apache/bcel/generic/LUSHR.java deleted file mode 100644 index 382e0fa..0000000 --- a/src/org/apache/bcel/generic/LUSHR.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LUSHR - Logical shift right long - * - *
      - * Stack: ..., value1, value2 -> ..., result
      - * 
      - * - * @version $Id: LUSHR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LUSHR extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LUSHR() { - super(org.apache.bcel.Constants.LUSHR); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLUSHR(this); - } -} diff --git a/src/org/apache/bcel/generic/LXOR.java b/src/org/apache/bcel/generic/LXOR.java deleted file mode 100644 index a0101d2..0000000 --- a/src/org/apache/bcel/generic/LXOR.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * LXOR - Bitwise XOR long - * - *
      - * Stack: ..., value1, value2 -> ..., result
      - * 
      - * - * @version $Id: LXOR.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class LXOR extends ArithmeticInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public LXOR() { - super(org.apache.bcel.Constants.LXOR); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitTypedInstruction(this); - v.visitStackProducer(this); - v.visitStackConsumer(this); - v.visitArithmeticInstruction(this); - v.visitLXOR(this); - } -} diff --git a/src/org/apache/bcel/generic/LineNumberGen.java b/src/org/apache/bcel/generic/LineNumberGen.java deleted file mode 100644 index 5cb0b67..0000000 --- a/src/org/apache/bcel/generic/LineNumberGen.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.classfile.LineNumber; - -/** - * This class represents a line number within a method, i.e., give an - * instruction a line number corresponding to the source code line. - * - * @version $Id: LineNumberGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see LineNumber - * @see MethodGen - */ -public class LineNumberGen implements InstructionTargeter, Cloneable, - java.io.Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - private InstructionHandle ih; - private int src_line; - - /** - * Create a line number. - * - * @param ih - * instruction handle to reference - */ - public LineNumberGen(InstructionHandle ih, int src_line) { - setInstruction(ih); - setSourceLine(src_line); - } - - /** - * @return true, if ih is target of this line number - */ - @Override - public boolean containsTarget(InstructionHandle ih) { - return this.ih == ih; - } - - /** - * @param old_ih - * old target - * @param new_ih - * new target - */ - @Override - public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { - if (old_ih != ih) { - throw new ClassGenException("Not targeting " + old_ih + ", but " - + ih + "}"); - } else { - setInstruction(new_ih); - } - } - - /** - * Get LineNumber attribute . - * - * This relies on that the instruction list has already been dumped to byte - * code or or that the `setPositions' methods has been called for the - * instruction list. - */ - public LineNumber getLineNumber() { - return new LineNumber(ih.getPosition(), src_line); - } - - public void setInstruction(InstructionHandle ih) { - BranchInstruction.notifyTarget(this.ih, ih, this); - this.ih = ih; - } - - @Override - public Object clone() { - try { - return super.clone(); - } catch (CloneNotSupportedException e) { - System.err.println(e); - return null; - } - } - - public InstructionHandle getInstruction() { - return ih; - } - - public void setSourceLine(int src_line) { - this.src_line = src_line; - } - - public int getSourceLine() { - return src_line; - } -} diff --git a/src/org/apache/bcel/generic/LoadClass.java b/src/org/apache/bcel/generic/LoadClass.java deleted file mode 100644 index fcea1c0..0000000 --- a/src/org/apache/bcel/generic/LoadClass.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denotes that an instruction may start the process of loading and resolving - * the referenced class in the Virtual Machine. - * - * @version $Id: LoadClass.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface LoadClass { - - /** - * Returns the ObjectType of the referenced class or interface that may be - * loaded and resolved. - * - * @return object type that may be loaded or null if a primitive is - * referenced - */ - public ObjectType getLoadClassType(ConstantPoolGen cpg); - - /** - * Returns the type associated with this instruction. LoadClass instances - * are always typed, but this type does not always refer to the type of the - * class or interface that it possibly forces to load. For example, GETFIELD - * would return the type of the field and not the type of the class where - * the field is defined. If no class is forced to be loaded, null is - * returned. An example for this is an ANEWARRAY instruction that creates an - * int[][]. - * - * @see #getLoadClassType(ConstantPoolGen) - */ - public Type getType(ConstantPoolGen cpg); -} diff --git a/src/org/apache/bcel/generic/LoadInstruction.java b/src/org/apache/bcel/generic/LoadInstruction.java deleted file mode 100644 index b04252f..0000000 --- a/src/org/apache/bcel/generic/LoadInstruction.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denotes an unparameterized instruction to load a value from a local variable, - * e.g. ILOAD. - * - * @version $Id: LoadInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class LoadInstruction extends LocalVariableInstruction - implements PushInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. tag and length - * are defined in readInstruction and initFromFile, respectively. - */ - LoadInstruction(short canon_tag, short c_tag) { - super(canon_tag, c_tag); - } - - /** - * @param opcode - * Instruction opcode - * @param c_tag - * Instruction number for compact version, ALOAD_0, e.g. - * @param n - * local variable index (unsigned short) - */ - protected LoadInstruction(short opcode, short c_tag, int n) { - super(opcode, c_tag, n); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitPushInstruction(this); - v.visitTypedInstruction(this); - v.visitLocalVariableInstruction(this); - v.visitLoadInstruction(this); - } -} diff --git a/src/org/apache/bcel/generic/LocalVariableGen.java b/src/org/apache/bcel/generic/LocalVariableGen.java deleted file mode 100644 index df446e3..0000000 --- a/src/org/apache/bcel/generic/LocalVariableGen.java +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; -import org.apache.bcel.classfile.LocalVariable; - -/** - * This class represents a local variable within a method. It contains its - * scope, name and type. The generated LocalVariable object can be obtained with - * getLocalVariable which needs the instruction list and the constant pool as - * parameters. - * - * @version $Id: LocalVariableGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see LocalVariable - * @see MethodGen - */ -public class LocalVariableGen implements InstructionTargeter, NamedAndTyped, - Cloneable, java.io.Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - private int index; - private String name; - private Type type; - private InstructionHandle start, end; - - /** - * Generate a local variable that with index `index'. Note that double and - * long variables need two indexs. Index indices have to be provided by the - * user. - * - * @param index - * index of local variable - * @param name - * its name - * @param type - * its type - * @param start - * from where the instruction is valid (null means from the - * start) - * @param end - * until where the instruction is valid (null means to the end) - */ - public LocalVariableGen(int index, String name, Type type, - InstructionHandle start, InstructionHandle end) { - if ((index < 0) || (index > Constants.MAX_SHORT)) { - throw new ClassGenException("Invalid index index: " + index); - } - this.name = name; - this.type = type; - this.index = index; - setStart(start); - setEnd(end); - } - - /** - * Get LocalVariable object. - * - * This relies on that the instruction list has already been dumped to byte - * code or or that the `setPositions' methods has been called for the - * instruction list. - * - * Note that for local variables whose scope end at the last instruction of - * the method's code, the JVM specification is ambiguous: both a - * start_pc+length ending at the last instruction and start_pc+length ending - * at first index beyond the end of the code are valid. - * - * @param cp - * constant pool - */ - public LocalVariable getLocalVariable(ConstantPoolGen cp) { - int start_pc = start.getPosition(); - int length = end.getPosition() - start_pc; - if (length > 0) { - length += end.getInstruction().getLength(); - } - int name_index = cp.addUtf8(name); - int signature_index = cp.addUtf8(type.getSignature()); - return new LocalVariable(start_pc, length, name_index, signature_index, - index, cp.getConstantPool()); - } - - public void setIndex(int index) { - this.index = index; - } - - public int getIndex() { - return index; - } - - @Override - public void setName(String name) { - this.name = name; - } - - @Override - public String getName() { - return name; - } - - @Override - public void setType(Type type) { - this.type = type; - } - - @Override - public Type getType() { - return type; - } - - public InstructionHandle getStart() { - return start; - } - - public InstructionHandle getEnd() { - return end; - } - - public void setStart(InstructionHandle start) { - BranchInstruction.notifyTarget(this.start, start, this); - this.start = start; - } - - public void setEnd(InstructionHandle end) { - BranchInstruction.notifyTarget(this.end, end, this); - this.end = end; - } - - /** - * @param old_ih - * old target, either start or end - * @param new_ih - * new target - */ - @Override - public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { - boolean targeted = false; - if (start == old_ih) { - targeted = true; - setStart(new_ih); - } - if (end == old_ih) { - targeted = true; - setEnd(new_ih); - } - if (!targeted) { - throw new ClassGenException("Not targeting " + old_ih + ", but {" - + start + ", " + end + "}"); - } - } - - /** - * @return true, if ih is target of this variable - */ - @Override - public boolean containsTarget(InstructionHandle ih) { - return (start == ih) || (end == ih); - } - - /** - * @return a hash code value for the object. - */ - @Override - public int hashCode() { - // If the user changes the name or type, problems with the targeter - // hashmap will occur - int hc = index ^ name.hashCode() ^ type.hashCode(); - return hc; - } - - /** - * We consider to local variables to be equal, if the use the same index and - * are valid in the same range. - */ - @Override - public boolean equals(Object o) { - if (!(o instanceof LocalVariableGen)) { - return false; - } - LocalVariableGen l = (LocalVariableGen) o; - return (l.index == index) && (l.start == start) && (l.end == end); - } - - @Override - public String toString() { - return "LocalVariableGen(" + name + ", " + type + ", " + start + ", " - + end + ")"; - } - - @Override - public Object clone() { - try { - return super.clone(); - } catch (CloneNotSupportedException e) { - System.err.println(e); - return null; - } - } -} diff --git a/src/org/apache/bcel/generic/LocalVariableInstruction.java b/src/org/apache/bcel/generic/LocalVariableInstruction.java deleted file mode 100644 index ee7836c..0000000 --- a/src/org/apache/bcel/generic/LocalVariableInstruction.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.Constants; -import org.apache.bcel.util.ByteSequence; - -/** - * Abstract super class for instructions dealing with local variables. - * - * @version $Id: LocalVariableInstruction.java 386056 2006-03-15 11:31:56Z - * tcurdt $ - * @author M. Dahm - */ -public abstract class LocalVariableInstruction extends Instruction implements - TypedInstruction, IndexedInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected int n = -1; // index of referenced variable - private short c_tag = -1; // compact version, such as ILOAD_0 - private short canon_tag = -1; // canonical tag such as ILOAD - - private final boolean wide() { - return n > Constants.MAX_BYTE; - } - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. tag and length - * are defined in readInstruction and initFromFile, respectively. - */ - LocalVariableInstruction(short canon_tag, short c_tag) { - super(); - this.canon_tag = canon_tag; - this.c_tag = c_tag; - } - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Also used by IINC()! - */ - LocalVariableInstruction() { - } - - /** - * @param opcode - * Instruction opcode - * @param c_tag - * Instruction number for compact version, ALOAD_0, e.g. - * @param n - * local variable index (unsigned short) - */ - protected LocalVariableInstruction(short opcode, short c_tag, int n) { - super(opcode, (short) 2); - this.c_tag = c_tag; - canon_tag = opcode; - setIndex(n); - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - if (wide()) { - out.writeByte(Constants.WIDE); - } - out.writeByte(opcode); - if (length > 1) { // Otherwise ILOAD_n, instruction, e.g. - if (wide()) { - out.writeShort(n); - } else { - out.writeByte(n); - } - } - } - - /** - * Long output format: - * - * <name of opcode> "["<opcode number>"]" "("<length of - * instruction>")" "<"< local variable index>">" - * - * @param verbose - * long/short format switch - * @return mnemonic for instruction - */ - @Override - public String toString(boolean verbose) { - if (((opcode >= Constants.ILOAD_0) && (opcode <= Constants.ALOAD_3)) - || ((opcode >= Constants.ISTORE_0) && (opcode <= Constants.ASTORE_3))) { - return super.toString(verbose); - } else { - return super.toString(verbose) + " " + n; - } - } - - /** - * Read needed data (e.g. index) from file. PRE: (ILOAD <= tag <= ALOAD_3) - * || (ISTORE <= tag <= ASTORE_3) - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - if (wide) { - n = bytes.readUnsignedShort(); - length = 4; - } else if (((opcode >= Constants.ILOAD) && (opcode <= Constants.ALOAD)) - || ((opcode >= Constants.ISTORE) && (opcode <= Constants.ASTORE))) { - n = bytes.readUnsignedByte(); - length = 2; - } else if (opcode <= Constants.ALOAD_3) { // compact load instruction - // such as ILOAD_2 - n = (opcode - Constants.ILOAD_0) % 4; - length = 1; - } else { // Assert ISTORE_0 <= tag <= ASTORE_3 - n = (opcode - Constants.ISTORE_0) % 4; - length = 1; - } - } - - /** - * @return local variable index referred by this instruction. - */ - @Override - public final int getIndex() { - return n; - } - - /** - * Set the local variable index - */ - @Override - public void setIndex(int n) { - if ((n < 0) || (n > Constants.MAX_SHORT)) { - throw new ClassGenException("Illegal value: " + n); - } - this.n = n; - if (n >= 0 && n <= 3) { // Use more compact instruction xLOAD_n - opcode = (short) (c_tag + n); - length = 1; - } else { - opcode = canon_tag; - if (wide()) { - length = 4; - } else { - length = 2; - } - } - } - - /** - * @return canonical tag for instruction, e.g., ALOAD for ALOAD_0 - */ - public short getCanonicalTag() { - return canon_tag; - } - - /** - * Returns the type associated with the instruction - in case of ALOAD or - * ASTORE Type.OBJECT is returned. This is just a bit incorrect, because - * ALOAD and ASTORE may work on every ReferenceType (including Type.NULL) - * and ASTORE may even work on a ReturnaddressType . - * - * @return type associated with the instruction - */ - @Override - public Type getType(ConstantPoolGen cp) { - switch (canon_tag) { - case Constants.ILOAD: - case Constants.ISTORE: - return Type.INT; - case Constants.LLOAD: - case Constants.LSTORE: - return Type.LONG; - case Constants.DLOAD: - case Constants.DSTORE: - return Type.DOUBLE; - case Constants.FLOAD: - case Constants.FSTORE: - return Type.FLOAT; - case Constants.ALOAD: - case Constants.ASTORE: - return Type.OBJECT; - default: - throw new ClassGenException("Oops: unknown case in switch" - + canon_tag); - } - } -} diff --git a/src/org/apache/bcel/generic/MONITORENTER.java b/src/org/apache/bcel/generic/MONITORENTER.java deleted file mode 100644 index b0e706e..0000000 --- a/src/org/apache/bcel/generic/MONITORENTER.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * MONITORENTER - Enter monitor for object - * - *
      - * Stack: ..., objectref -> ...
      - * 
      - * - * @version $Id: MONITORENTER.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class MONITORENTER extends Instruction implements ExceptionThrower, - StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public MONITORENTER() { - super(org.apache.bcel.Constants.MONITORENTER, (short) 1); - } - - @Override - public Class[] getExceptions() { - return new Class[] { org.apache.bcel.ExceptionConstants.NULL_POINTER_EXCEPTION }; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitMONITORENTER(this); - } -} diff --git a/src/org/apache/bcel/generic/MONITOREXIT.java b/src/org/apache/bcel/generic/MONITOREXIT.java deleted file mode 100644 index 5db445d..0000000 --- a/src/org/apache/bcel/generic/MONITOREXIT.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * MONITOREXIT - Exit monitor for object - * - *
      - * Stack: ..., objectref -> ...
      - * 
      - * - * @version $Id: MONITOREXIT.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class MONITOREXIT extends Instruction implements ExceptionThrower, - StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public MONITOREXIT() { - super(org.apache.bcel.Constants.MONITOREXIT, (short) 1); - } - - @Override - public Class[] getExceptions() { - return new Class[] { org.apache.bcel.ExceptionConstants.NULL_POINTER_EXCEPTION }; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitMONITOREXIT(this); - } -} diff --git a/src/org/apache/bcel/generic/MULTIANEWARRAY.java b/src/org/apache/bcel/generic/MULTIANEWARRAY.java deleted file mode 100644 index 9c5bf1e..0000000 --- a/src/org/apache/bcel/generic/MULTIANEWARRAY.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.ExceptionConstants; -import org.apache.bcel.classfile.ConstantPool; -import org.apache.bcel.util.ByteSequence; - -/** - * MULTIANEWARRAY - Create new mutidimensional array of references - * - *
      - * Stack: ..., count1, [count2, ...] -> ..., arrayref
      - * 
      - * - * @version $Id: MULTIANEWARRAY.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class MULTIANEWARRAY extends CPInstruction implements LoadClass, - AllocationInstruction, ExceptionThrower { - - /** - * - */ - private static final long serialVersionUID = 1L; - private short dimensions; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - MULTIANEWARRAY() { - } - - public MULTIANEWARRAY(int index, short dimensions) { - super(org.apache.bcel.Constants.MULTIANEWARRAY, index); - if (dimensions < 1) { - throw new ClassGenException("Invalid dimensions value: " - + dimensions); - } - this.dimensions = dimensions; - length = 4; - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); - out.writeShort(index); - out.writeByte(dimensions); - } - - /** - * Read needed data (i.e., no. dimension) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - super.initFromFile(bytes, wide); - dimensions = bytes.readByte(); - length = 4; - } - - /** - * @return number of dimensions to be created - */ - public final short getDimensions() { - return dimensions; - } - - /** - * @return mnemonic for instruction - */ - @Override - public String toString(boolean verbose) { - return super.toString(verbose) + " " + index + " " + dimensions; - } - - /** - * @return mnemonic for instruction with symbolic references resolved - */ - @Override - public String toString(ConstantPool cp) { - return super.toString(cp) + " " + dimensions; - } - - /** - * Also works for instructions whose stack effect depends on the constant - * pool entry they reference. - * - * @return Number of words consumed from stack by this instruction - */ - @Override - public int consumeStack(ConstantPoolGen cpg) { - return dimensions; - } - - @Override - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; - System.arraycopy( - ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, cs, - 0, - ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length + 1] = ExceptionConstants.NEGATIVE_ARRAY_SIZE_EXCEPTION; - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.ILLEGAL_ACCESS_ERROR; - return cs; - } - - @Override - public ObjectType getLoadClassType(ConstantPoolGen cpg) { - Type t = getType(cpg); - if (t instanceof ArrayType) { - t = ((ArrayType) t).getBasicType(); - } - return (t instanceof ObjectType) ? (ObjectType) t : null; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitLoadClass(this); - v.visitAllocationInstruction(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitMULTIANEWARRAY(this); - } -} diff --git a/src/org/apache/bcel/generic/MethodGen.java b/src/org/apache/bcel/generic/MethodGen.java deleted file mode 100644 index 5704f06..0000000 --- a/src/org/apache/bcel/generic/MethodGen.java +++ /dev/null @@ -1,1108 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Stack; - -import org.apache.bcel.Constants; -import org.apache.bcel.classfile.Attribute; -import org.apache.bcel.classfile.Code; -import org.apache.bcel.classfile.CodeException; -import org.apache.bcel.classfile.ExceptionTable; -import org.apache.bcel.classfile.LineNumber; -import org.apache.bcel.classfile.LineNumberTable; -import org.apache.bcel.classfile.LocalVariable; -import org.apache.bcel.classfile.LocalVariableTable; -import org.apache.bcel.classfile.Method; -import org.apache.bcel.classfile.Utility; -import org.apache.bcel.util.BCELComparator; - -/** - * Template class for building up a method. This is done by defining exception - * handlers, adding thrown exceptions, local variables and attributes, whereas - * the `LocalVariableTable' and `LineNumberTable' attributes will be set - * automatically for the code. Use stripAttributes() if you don't like this. - * - * While generating code it may be necessary to insert NOP operations. You can - * use the `removeNOPs' method to get rid off them. The resulting method object - * can be obtained via the `getMethod()' method. - * - * @version $Id: MethodGen.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @author Patrick C. Beard - * [setMaxStack()] - * @see InstructionList - * @see Method - */ -public class MethodGen extends FieldGenOrMethodGen { - - /** - * - */ - private static final long serialVersionUID = 1L; - private String class_name; - private Type[] arg_types; - private String[] arg_names; - private int max_locals; - private int max_stack; - private InstructionList il; - private boolean strip_attributes; - private List variable_vec = new ArrayList(); - private List line_number_vec = new ArrayList(); - private List exception_vec = new ArrayList(); - private List throws_vec = new ArrayList(); - private List code_attrs_vec = new ArrayList(); - private static BCELComparator _cmp = new BCELComparator() { - - @Override - public boolean equals(Object o1, Object o2) { - MethodGen THIS = (MethodGen) o1; - MethodGen THAT = (MethodGen) o2; - return THIS.getName().equals(THAT.getName()) - && THIS.getSignature().equals(THAT.getSignature()); - } - - @Override - public int hashCode(Object o) { - MethodGen THIS = (MethodGen) o; - return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); - } - }; - - /** - * Declare method. If the method is non-static the constructor automatically - * declares a local variable `$this' in slot 0. The actual code is contained - * in the `il' parameter, which may further manipulated by the user. But he - * must take care not to remove any instruction (handles) that are still - * referenced from this object. - * - * For example one may not add a local variable and later remove the - * instructions it refers to without causing havoc. It is safe however if - * you remove that local variable, too. - * - * @param access_flags - * access qualifiers - * @param return_type - * method type - * @param arg_types - * argument types - * @param arg_names - * argument names (if this is null, default names will be - * provided for them) - * @param method_name - * name of method - * @param class_name - * class name containing this method (may be null, if you don't - * care) - * @param il - * instruction list associated with this method, may be null only - * for abstract or native methods - * @param cp - * constant pool - */ - public MethodGen(int access_flags, Type return_type, Type[] arg_types, - String[] arg_names, String method_name, String class_name, - InstructionList il, ConstantPoolGen cp) { - setAccessFlags(access_flags); - setType(return_type); - setArgumentTypes(arg_types); - setArgumentNames(arg_names); - setName(method_name); - setClassName(class_name); - setInstructionList(il); - setConstantPool(cp); - boolean abstract_ = isAbstract() || isNative(); - InstructionHandle start = null; - InstructionHandle end = null; - if (!abstract_) { - start = il.getStart(); - end = il.getEnd(); - /* - * Add local variables, namely the implicit `this' and the arguments - */ - if (!isStatic() && (class_name != null)) { // Instance method -> - // `this' is local var 0 - addLocalVariable("this", new ObjectType(class_name), start, end); - } - } - if (arg_types != null) { - int size = arg_types.length; - for (int i = 0; i < size; i++) { - if (Type.VOID == arg_types[i]) { - throw new ClassGenException( - "'void' is an illegal argument type for a method"); - } - } - if (arg_names != null) { // Names for variables provided? - if (size != arg_names.length) { - throw new ClassGenException( - "Mismatch in argument array lengths: " + size - + " vs. " + arg_names.length); - } - } else { // Give them dummy names - arg_names = new String[size]; - for (int i = 0; i < size; i++) { - arg_names[i] = "arg" + i; - } - setArgumentNames(arg_names); - } - if (!abstract_) { - for (int i = 0; i < size; i++) { - addLocalVariable(arg_names[i], arg_types[i], start, end); - } - } - } - } - - /** - * Instantiate from existing method. - * - * @param m - * method - * @param class_name - * class name containing this method - * @param cp - * constant pool - */ - public MethodGen(Method m, String class_name, ConstantPoolGen cp) { - this( - m.getAccessFlags(), - Type.getReturnType(m.getSignature()), - Type.getArgumentTypes(m.getSignature()), - null /* may be overridden anyway */ - , - m.getName(), - class_name, - ((m.getAccessFlags() & (Constants.ACC_ABSTRACT | Constants.ACC_NATIVE)) == 0) ? new InstructionList( - m.getCode().getCode()) : null, cp); - Attribute[] attributes = m.getAttributes(); - for (int i = 0; i < attributes.length; i++) { - Attribute a = attributes[i]; - if (a instanceof Code) { - Code c = (Code) a; - setMaxStack(c.getMaxStack()); - setMaxLocals(c.getMaxLocals()); - CodeException[] ces = c.getExceptionTable(); - if (ces != null) { - for (int j = 0; j < ces.length; j++) { - CodeException ce = ces[j]; - int type = ce.getCatchType(); - ObjectType c_type = null; - if (type > 0) { - String cen = m.getConstantPool().getConstantString( - type, Constants.CONSTANT_Class); - c_type = new ObjectType(cen); - } - int end_pc = ce.getEndPC(); - int length = m.getCode().getCode().length; - InstructionHandle end; - if (length == end_pc) { // May happen, because end_pc is - // exclusive - end = il.getEnd(); - } else { - end = il.findHandle(end_pc); - end = end.getPrev(); // Make it inclusive - } - addExceptionHandler(il.findHandle(ce.getStartPC()), - end, il.findHandle(ce.getHandlerPC()), c_type); - } - } - Attribute[] c_attributes = c.getAttributes(); - for (int j = 0; j < c_attributes.length; j++) { - a = c_attributes[j]; - if (a instanceof LineNumberTable) { - LineNumber[] ln = ((LineNumberTable) a) - .getLineNumberTable(); - for (int k = 0; k < ln.length; k++) { - LineNumber l = ln[k]; - InstructionHandle ih = il - .findHandle(l.getStartPC()); - if (ih != null) { - addLineNumber(ih, l.getLineNumber()); - } - } - } else if (a instanceof LocalVariableTable) { - LocalVariable[] lv = ((LocalVariableTable) a) - .getLocalVariableTable(); - removeLocalVariables(); - for (int k = 0; k < lv.length; k++) { - LocalVariable l = lv[k]; - InstructionHandle start = il.findHandle(l - .getStartPC()); - InstructionHandle end = il.findHandle(l - .getStartPC() + l.getLength()); - // Repair malformed handles - if (null == start) { - start = il.getStart(); - } - if (null == end) { - end = il.getEnd(); - } - addLocalVariable(l.getName(), - Type.getType(l.getSignature()), - l.getIndex(), start, end); - } - } else { - addCodeAttribute(a); - } - } - } else if (a instanceof ExceptionTable) { - String[] names = ((ExceptionTable) a).getExceptionNames(); - for (int j = 0; j < names.length; j++) { - addException(names[j]); - } - } else { - addAttribute(a); - } - } - } - - /** - * Adds a local variable to this method. - * - * @param name - * variable name - * @param type - * variable type - * @param slot - * the index of the local variable, if type is long or double, - * the next available index is slot+2 - * @param start - * from where the variable is valid - * @param end - * until where the variable is valid - * @return new local variable object - * @see LocalVariable - */ - public LocalVariableGen addLocalVariable(String name, Type type, int slot, - InstructionHandle start, InstructionHandle end) { - byte t = type.getType(); - if (t != Constants.T_ADDRESS) { - int add = type.getSize(); - if (slot + add > max_locals) { - max_locals = slot + add; - } - LocalVariableGen l = new LocalVariableGen(slot, name, type, start, - end); - int i; - if ((i = variable_vec.indexOf(l)) >= 0) { - variable_vec.set(i, l); - } else { - variable_vec.add(l); - } - return l; - } else { - throw new IllegalArgumentException("Can not use " + type - + " as type for local variable"); - } - } - - /** - * Adds a local variable to this method and assigns an index automatically. - * - * @param name - * variable name - * @param type - * variable type - * @param start - * from where the variable is valid, if this is null, it is valid - * from the start - * @param end - * until where the variable is valid, if this is null, it is - * valid to the end - * @return new local variable object - * @see LocalVariable - */ - public LocalVariableGen addLocalVariable(String name, Type type, - InstructionHandle start, InstructionHandle end) { - return addLocalVariable(name, type, max_locals, start, end); - } - - /** - * Remove a local variable, its slot will not be reused, if you do not use - * addLocalVariable with an explicit index argument. - */ - public void removeLocalVariable(LocalVariableGen l) { - variable_vec.remove(l); - } - - /** - * Remove all local variables. - */ - public void removeLocalVariables() { - variable_vec.clear(); - } - - /** - * Sort local variables by index - */ - private static final void sort(LocalVariableGen[] vars, int l, int r) { - int i = l, j = r; - int m = vars[(l + r) / 2].getIndex(); - LocalVariableGen h; - do { - while (vars[i].getIndex() < m) { - i++; - } - while (m < vars[j].getIndex()) { - j--; - } - if (i <= j) { - h = vars[i]; - vars[i] = vars[j]; - vars[j] = h; // Swap elements - i++; - j--; - } - } while (i <= j); - if (l < j) { - sort(vars, l, j); - } - if (i < r) { - sort(vars, i, r); - } - } - - /* - * If the range of the variable has not been set yet, it will be set to be - * valid from the start to the end of the instruction list. - * - * @return array of declared local variables sorted by index - */ - public LocalVariableGen[] getLocalVariables() { - int size = variable_vec.size(); - LocalVariableGen[] lg = new LocalVariableGen[size]; - variable_vec.toArray(lg); - for (int i = 0; i < size; i++) { - if (lg[i].getStart() == null) { - lg[i].setStart(il.getStart()); - } - if (lg[i].getEnd() == null) { - lg[i].setEnd(il.getEnd()); - } - } - if (size > 1) { - sort(lg, 0, size - 1); - } - return lg; - } - - /** - * @return `LocalVariableTable' attribute of all the local variables of this - * method. - */ - public LocalVariableTable getLocalVariableTable(ConstantPoolGen cp) { - LocalVariableGen[] lg = getLocalVariables(); - int size = lg.length; - LocalVariable[] lv = new LocalVariable[size]; - for (int i = 0; i < size; i++) { - lv[i] = lg[i].getLocalVariable(cp); - } - return new LocalVariableTable(cp.addUtf8("LocalVariableTable"), - 2 + lv.length * 10, lv, cp.getConstantPool()); - } - - /** - * Give an instruction a line number corresponding to the source code line. - * - * @param ih - * instruction to tag - * @return new line number object - * @see LineNumber - */ - public LineNumberGen addLineNumber(InstructionHandle ih, int src_line) { - LineNumberGen l = new LineNumberGen(ih, src_line); - line_number_vec.add(l); - return l; - } - - /** - * Remove a line number. - */ - public void removeLineNumber(LineNumberGen l) { - line_number_vec.remove(l); - } - - /** - * Remove all line numbers. - */ - public void removeLineNumbers() { - line_number_vec.clear(); - } - - /* - * @return array of line numbers - */ - public LineNumberGen[] getLineNumbers() { - LineNumberGen[] lg = new LineNumberGen[line_number_vec.size()]; - line_number_vec.toArray(lg); - return lg; - } - - /** - * @return `LineNumberTable' attribute of all the local variables of this - * method. - */ - public LineNumberTable getLineNumberTable(ConstantPoolGen cp) { - int size = line_number_vec.size(); - LineNumber[] ln = new LineNumber[size]; - try { - for (int i = 0; i < size; i++) { - ln[i] = line_number_vec.get(i).getLineNumber(); - } - } catch (ArrayIndexOutOfBoundsException e) { - } // Never occurs - return new LineNumberTable(cp.addUtf8("LineNumberTable"), - 2 + ln.length * 4, ln, cp.getConstantPool()); - } - - /** - * Add an exception handler, i.e., specify region where a handler is active - * and an instruction where the actual handling is done. - * - * @param start_pc - * Start of region (inclusive) - * @param end_pc - * End of region (inclusive) - * @param handler_pc - * Where handling is done - * @param catch_type - * class type of handled exception or null if any exception is - * handled - * @return new exception handler object - */ - public CodeExceptionGen addExceptionHandler(InstructionHandle start_pc, - InstructionHandle end_pc, InstructionHandle handler_pc, - ObjectType catch_type) { - if ((start_pc == null) || (end_pc == null) || (handler_pc == null)) { - throw new ClassGenException( - "Exception handler target is null instruction"); - } - CodeExceptionGen c = new CodeExceptionGen(start_pc, end_pc, handler_pc, - catch_type); - exception_vec.add(c); - return c; - } - - /** - * Remove an exception handler. - */ - public void removeExceptionHandler(CodeExceptionGen c) { - exception_vec.remove(c); - } - - /** - * Remove all line numbers. - */ - public void removeExceptionHandlers() { - exception_vec.clear(); - } - - /* - * @return array of declared exception handlers - */ - public CodeExceptionGen[] getExceptionHandlers() { - CodeExceptionGen[] cg = new CodeExceptionGen[exception_vec.size()]; - exception_vec.toArray(cg); - return cg; - } - - /** - * @return code exceptions for `Code' attribute - */ - private CodeException[] getCodeExceptions() { - int size = exception_vec.size(); - CodeException[] c_exc = new CodeException[size]; - try { - for (int i = 0; i < size; i++) { - CodeExceptionGen c = exception_vec.get(i); - c_exc[i] = c.getCodeException(cp); - } - } catch (ArrayIndexOutOfBoundsException e) { - } - return c_exc; - } - - /** - * Add an exception possibly thrown by this method. - * - * @param class_name - * (fully qualified) name of exception - */ - public void addException(String class_name) { - throws_vec.add(class_name); - } - - /** - * Remove an exception. - */ - public void removeException(String c) { - throws_vec.remove(c); - } - - /** - * Remove all exceptions. - */ - public void removeExceptions() { - throws_vec.clear(); - } - - /* - * @return array of thrown exceptions - */ - public String[] getExceptions() { - String[] e = new String[throws_vec.size()]; - throws_vec.toArray(e); - return e; - } - - /** - * @return `Exceptions' attribute of all the exceptions thrown by this - * method. - */ - private ExceptionTable getExceptionTable(ConstantPoolGen cp) { - int size = throws_vec.size(); - int[] ex = new int[size]; - try { - for (int i = 0; i < size; i++) { - ex[i] = cp.addClass(throws_vec.get(i)); - } - } catch (ArrayIndexOutOfBoundsException e) { - } - return new ExceptionTable(cp.addUtf8("Exceptions"), 2 + 2 * size, ex, - cp.getConstantPool()); - } - - /** - * Add an attribute to the code. Currently, the JVM knows about the - * LineNumberTable, LocalVariableTable and StackMap attributes, where the - * former two will be generated automatically and the latter is used for the - * MIDP only. Other attributes will be ignored by the JVM but do no harm. - * - * @param a - * attribute to be added - */ - public void addCodeAttribute(Attribute a) { - code_attrs_vec.add(a); - } - - /** - * Remove a code attribute. - */ - public void removeCodeAttribute(Attribute a) { - code_attrs_vec.remove(a); - } - - /** - * Remove all code attributes. - */ - public void removeCodeAttributes() { - code_attrs_vec.clear(); - } - - /** - * @return all attributes of this method. - */ - public Attribute[] getCodeAttributes() { - Attribute[] attributes = new Attribute[code_attrs_vec.size()]; - code_attrs_vec.toArray(attributes); - return attributes; - } - - /** - * Get method object. Never forget to call setMaxStack() or - * setMaxStack(max), respectively, before calling this method (the same - * applies for max locals). - * - * @return method object - */ - public Method getMethod() { - String signature = getSignature(); - int name_index = cp.addUtf8(name); - int signature_index = cp.addUtf8(signature); - /* - * Also updates positions of instructions, i.e., their indices - */ - byte[] byte_code = null; - if (il != null) { - byte_code = il.getByteCode(); - } - LineNumberTable lnt = null; - LocalVariableTable lvt = null; - /* - * Create LocalVariableTable and LineNumberTable attributes (for - * debuggers, e.g.) - */ - if ((variable_vec.size() > 0) && !strip_attributes) { - addCodeAttribute(lvt = getLocalVariableTable(cp)); - } - if ((line_number_vec.size() > 0) && !strip_attributes) { - addCodeAttribute(lnt = getLineNumberTable(cp)); - } - Attribute[] code_attrs = getCodeAttributes(); - /* - * Each attribute causes 6 additional header bytes - */ - int attrs_len = 0; - for (int i = 0; i < code_attrs.length; i++) { - attrs_len += (code_attrs[i].getLength() + 6); - } - CodeException[] c_exc = getCodeExceptions(); - int exc_len = c_exc.length * 8; // Every entry takes 8 bytes - Code code = null; - if ((il != null) && !isAbstract() && !isNative()) { - // Remove any stale code attribute - Attribute[] attributes = getAttributes(); - for (int i = 0; i < attributes.length; i++) { - Attribute a = attributes[i]; - if (a instanceof Code) { - removeAttribute(a); - } - } - code = new Code(cp.addUtf8("Code"), 8 + byte_code.length + // prologue - // byte - // code - 2 + exc_len + // exceptions - 2 + attrs_len, // attributes - max_stack, max_locals, byte_code, c_exc, code_attrs, - cp.getConstantPool()); - addAttribute(code); - } - ExceptionTable et = null; - if (throws_vec.size() > 0) { - addAttribute(et = getExceptionTable(cp)); - // Add `Exceptions' if there are "throws" clauses - } - Method m = new Method(access_flags, name_index, signature_index, - getAttributes(), cp.getConstantPool()); - // Undo effects of adding attributes - if (lvt != null) { - removeCodeAttribute(lvt); - } - if (lnt != null) { - removeCodeAttribute(lnt); - } - if (code != null) { - removeAttribute(code); - } - if (et != null) { - removeAttribute(et); - } - return m; - } - - /** - * Remove all NOPs from the instruction list (if possible) and update every - * object refering to them, i.e., branch instructions, local variables and - * exception handlers. - */ - public void removeNOPs() { - if (il != null) { - InstructionHandle next; - /* - * Check branch instructions. - */ - for (InstructionHandle ih = il.getStart(); ih != null; ih = next) { - next = ih.next; - if ((next != null) && (ih.getInstruction() instanceof NOP)) { - try { - il.delete(ih); - } catch (TargetLostException e) { - InstructionHandle[] targets = e.getTargets(); - for (int i = 0; i < targets.length; i++) { - InstructionTargeter[] targeters = targets[i] - .getTargeters(); - for (int j = 0; j < targeters.length; j++) { - targeters[j].updateTarget(targets[i], next); - } - } - } - } - } - } - } - - /** - * Set maximum number of local variables. - */ - public void setMaxLocals(int m) { - max_locals = m; - } - - public int getMaxLocals() { - return max_locals; - } - - /** - * Set maximum stack size for this method. - */ - public void setMaxStack(int m) { - max_stack = m; - } - - public int getMaxStack() { - return max_stack; - } - - /** - * @return class that contains this method - */ - public String getClassName() { - return class_name; - } - - public void setClassName(String class_name) { - this.class_name = class_name; - } - - public void setReturnType(Type return_type) { - setType(return_type); - } - - public Type getReturnType() { - return getType(); - } - - public void setArgumentTypes(Type[] arg_types) { - this.arg_types = arg_types; - } - - public Type[] getArgumentTypes() { - return arg_types.clone(); - } - - public void setArgumentType(int i, Type type) { - arg_types[i] = type; - } - - public Type getArgumentType(int i) { - return arg_types[i]; - } - - public void setArgumentNames(String[] arg_names) { - this.arg_names = arg_names; - } - - public String[] getArgumentNames() { - return arg_names.clone(); - } - - public void setArgumentName(int i, String name) { - arg_names[i] = name; - } - - public String getArgumentName(int i) { - return arg_names[i]; - } - - public InstructionList getInstructionList() { - return il; - } - - public void setInstructionList(InstructionList il) { - this.il = il; - } - - @Override - public String getSignature() { - return Type.getMethodSignature(type, arg_types); - } - - /** - * Computes max. stack size by performing control flow analysis. - */ - public void setMaxStack() { - if (il != null) { - max_stack = getMaxStack(cp, il, getExceptionHandlers()); - } else { - max_stack = 0; - } - } - - /** - * Compute maximum number of local variables. - */ - public void setMaxLocals() { - if (il != null) { - int max = isStatic() ? 0 : 1; - if (arg_types != null) { - for (int i = 0; i < arg_types.length; i++) { - max += arg_types[i].getSize(); - } - } - for (InstructionHandle ih = il.getStart(); ih != null; ih = ih - .getNext()) { - Instruction ins = ih.getInstruction(); - if ((ins instanceof LocalVariableInstruction) - || (ins instanceof RET) || (ins instanceof IINC)) { - int index = ((IndexedInstruction) ins).getIndex() - + ((TypedInstruction) ins).getType(cp).getSize(); - if (index > max) { - max = index; - } - } - } - max_locals = max; - } else { - max_locals = 0; - } - } - - /** - * Do not/Do produce attributes code attributesLineNumberTable and - * LocalVariableTable, like javac -O - */ - public void stripAttributes(boolean flag) { - strip_attributes = flag; - } - - static final class BranchTarget { - - InstructionHandle target; - int stackDepth; - - BranchTarget(InstructionHandle target, int stackDepth) { - this.target = target; - this.stackDepth = stackDepth; - } - } - - static final class BranchStack { - - Stack branchTargets = new Stack(); - Hashtable visitedTargets = new Hashtable(); - - public void push(InstructionHandle target, int stackDepth) { - if (visited(target)) { - return; - } - branchTargets.push(visit(target, stackDepth)); - } - - public BranchTarget pop() { - if (!branchTargets.empty()) { - BranchTarget bt = branchTargets.pop(); - return bt; - } - return null; - } - - private final BranchTarget visit(InstructionHandle target, - int stackDepth) { - BranchTarget bt = new BranchTarget(target, stackDepth); - visitedTargets.put(target, bt); - return bt; - } - - private final boolean visited(InstructionHandle target) { - return (visitedTargets.get(target) != null); - } - } - - /** - * Computes stack usage of an instruction list by performing control flow - * analysis. - * - * @return maximum stack depth used by method - */ - public static int getMaxStack(ConstantPoolGen cp, InstructionList il, - CodeExceptionGen[] et) { - BranchStack branchTargets = new BranchStack(); - /* - * Initially, populate the branch stack with the exception handlers, - * because these aren't (necessarily) branched to explicitly. in each - * case, the stack will have depth 1, containing the exception object. - */ - for (int i = 0; i < et.length; i++) { - InstructionHandle handler_pc = et[i].getHandlerPC(); - if (handler_pc != null) { - branchTargets.push(handler_pc, 1); - } - } - int stackDepth = 0, maxStackDepth = 0; - InstructionHandle ih = il.getStart(); - while (ih != null) { - Instruction instruction = ih.getInstruction(); - short opcode = instruction.getOpcode(); - int delta = instruction.produceStack(cp) - - instruction.consumeStack(cp); - stackDepth += delta; - if (stackDepth > maxStackDepth) { - maxStackDepth = stackDepth; - } - // choose the next instruction based on whether current is a branch. - if (instruction instanceof BranchInstruction) { - BranchInstruction branch = (BranchInstruction) instruction; - if (instruction instanceof Select) { - // explore all of the select's targets. the default target - // is handled below. - Select select = (Select) branch; - InstructionHandle[] targets = select.getTargets(); - for (int i = 0; i < targets.length; i++) { - branchTargets.push(targets[i], stackDepth); - } - // nothing to fall through to. - ih = null; - } else if (!(branch instanceof IfInstruction)) { - // if an instruction that comes back to following PC, - // push next instruction, with stack depth reduced by 1. - if (opcode == Constants.JSR || opcode == Constants.JSR_W) { - branchTargets.push(ih.getNext(), stackDepth - 1); - } - ih = null; - } - // for all branches, the target of the branch is pushed on the - // branch stack. - // conditional branches have a fall through case, selects don't, - // and - // jsr/jsr_w return to the next instruction. - branchTargets.push(branch.getTarget(), stackDepth); - } else { - // check for instructions that terminate the method. - if (opcode == Constants.ATHROW - || opcode == Constants.RET - || (opcode >= Constants.IRETURN && opcode <= Constants.RETURN)) { - ih = null; - } - } - // normal case, go to the next instruction. - if (ih != null) { - ih = ih.getNext(); - } - // if we have no more instructions, see if there are any deferred - // branches to explore. - if (ih == null) { - BranchTarget bt = branchTargets.pop(); - if (bt != null) { - ih = bt.target; - stackDepth = bt.stackDepth; - } - } - } - return maxStackDepth; - } - - private List observers; - - /** - * Add observer for this object. - */ - public void addObserver(MethodObserver o) { - if (observers == null) { - observers = new ArrayList(); - } - observers.add(o); - } - - /** - * Remove observer for this object. - */ - public void removeObserver(MethodObserver o) { - if (observers != null) { - observers.remove(o); - } - } - - /** - * Call notify() method on all observers. This method is not called - * automatically whenever the state has changed, but has to be called by the - * user after he has finished editing the object. - */ - public void update() { - if (observers != null) { - for (Iterator e = observers.iterator(); e.hasNext();) { - e.next().notify(this); - } - } - } - - /** - * Return string representation close to declaration format, `public static - * void main(String[]) throws IOException', e.g. - * - * @return String representation of the method. - */ - @Override - public final String toString() { - String access = Utility.accessToString(access_flags); - String signature = Type.getMethodSignature(type, arg_types); - signature = Utility.methodSignatureToString(signature, name, access, - true, getLocalVariableTable(cp)); - StringBuffer buf = new StringBuffer(signature); - if (throws_vec.size() > 0) { - for (Iterator e = throws_vec.iterator(); e.hasNext();) { - buf.append("\n\t\tthrows ").append(e.next()); - } - } - return buf.toString(); - } - - /** - * @return deep copy of this method - */ - public MethodGen copy(String class_name, ConstantPoolGen cp) { - Method m = ((MethodGen) clone()).getMethod(); - MethodGen mg = new MethodGen(m, class_name, this.cp); - if (this.cp != cp) { - mg.setConstantPool(cp); - mg.getInstructionList().replaceConstantPool(this.cp, cp); - } - return mg; - } - - /** - * @return Comparison strategy object - */ - public static BCELComparator getComparator() { - return _cmp; - } - - /** - * @param comparator - * Comparison strategy object - */ - public static void setComparator(BCELComparator comparator) { - _cmp = comparator; - } - - /** - * Return value as defined by given BCELComparator strategy. By default two - * MethodGen objects are said to be equal when their names and signatures - * are equal. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - return _cmp.equals(this, obj); - } - - /** - * Return value as defined by given BCELComparator strategy. By default - * return the hashcode of the method's name XOR signature. - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - return _cmp.hashCode(this); - } -} diff --git a/src/org/apache/bcel/generic/MethodObserver.java b/src/org/apache/bcel/generic/MethodObserver.java deleted file mode 100644 index 442af3b..0000000 --- a/src/org/apache/bcel/generic/MethodObserver.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Implement this interface if you're interested in changes to a MethodGen - * object and register yourself with addObserver(). - * - * @version $Id: MethodObserver.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface MethodObserver { - - public void notify(MethodGen method); -} diff --git a/src/org/apache/bcel/generic/NEW.java b/src/org/apache/bcel/generic/NEW.java deleted file mode 100644 index 3c39d51..0000000 --- a/src/org/apache/bcel/generic/NEW.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.ExceptionConstants; - -/** - * NEW - Create new object - * - *
      - * Stack: ... -> ..., objectref
      - * 
      - * - * @version $Id: NEW.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class NEW extends CPInstruction implements LoadClass, - AllocationInstruction, ExceptionThrower, StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - NEW() { - } - - public NEW(int index) { - super(org.apache.bcel.Constants.NEW, index); - } - - @Override - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length]; - System.arraycopy( - ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION, 0, cs, - 0, - ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length); - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length + 1] = ExceptionConstants.INSTANTIATION_ERROR; - cs[ExceptionConstants.EXCS_CLASS_AND_INTERFACE_RESOLUTION.length] = ExceptionConstants.ILLEGAL_ACCESS_ERROR; - return cs; - } - - @Override - public ObjectType getLoadClassType(ConstantPoolGen cpg) { - return (ObjectType) getType(cpg); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitLoadClass(this); - v.visitAllocationInstruction(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitCPInstruction(this); - v.visitNEW(this); - } -} diff --git a/src/org/apache/bcel/generic/NEWARRAY.java b/src/org/apache/bcel/generic/NEWARRAY.java deleted file mode 100644 index 2323811..0000000 --- a/src/org/apache/bcel/generic/NEWARRAY.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * NEWARRAY - Create new array of basic type (int, short, ...) - * - *
      - * Stack: ..., count -> ..., arrayref
      - * 
      - * - * type must be one of T_INT, T_SHORT, ... - * - * @version $Id: NEWARRAY.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class NEWARRAY extends Instruction implements AllocationInstruction, - ExceptionThrower, StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - private byte type; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - NEWARRAY() { - } - - public NEWARRAY(byte type) { - super(org.apache.bcel.Constants.NEWARRAY, (short) 2); - this.type = type; - } - - public NEWARRAY(BasicType type) { - this(type.getType()); - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); - out.writeByte(type); - } - - /** - * @return numeric code for basic element type - */ - public final byte getTypecode() { - return type; - } - - /** - * @return type of constructed array - */ - public final Type getType() { - return new ArrayType(BasicType.getType(type), 1); - } - - /** - * @return mnemonic for instruction - */ - @Override - public String toString(boolean verbose) { - return super.toString(verbose) + " " - + org.apache.bcel.Constants.TYPE_NAMES[type]; - } - - /** - * Read needed data (e.g. index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - type = bytes.readByte(); - length = 2; - } - - @Override - public Class[] getExceptions() { - return new Class[] { org.apache.bcel.ExceptionConstants.NEGATIVE_ARRAY_SIZE_EXCEPTION }; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitAllocationInstruction(this); - v.visitExceptionThrower(this); - v.visitStackProducer(this); - v.visitNEWARRAY(this); - } -} diff --git a/src/org/apache/bcel/generic/NOP.java b/src/org/apache/bcel/generic/NOP.java deleted file mode 100644 index 2816704..0000000 --- a/src/org/apache/bcel/generic/NOP.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * NOP - Do nothing - * - * @version $Id: NOP.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class NOP extends Instruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public NOP() { - super(org.apache.bcel.Constants.NOP, (short) 1); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitNOP(this); - } -} diff --git a/src/org/apache/bcel/generic/NamedAndTyped.java b/src/org/apache/bcel/generic/NamedAndTyped.java deleted file mode 100644 index ccfc98f..0000000 --- a/src/org/apache/bcel/generic/NamedAndTyped.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denote entity that has both name and type. This is true for local variables, - * methods and fields. - * - * @version $Id: NamedAndTyped.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface NamedAndTyped { - - public String getName(); - - public Type getType(); - - public void setName(String name); - - public void setType(Type type); -} diff --git a/src/org/apache/bcel/generic/ObjectType.java b/src/org/apache/bcel/generic/ObjectType.java deleted file mode 100644 index 885fe4f..0000000 --- a/src/org/apache/bcel/generic/ObjectType.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; -import org.apache.bcel.Repository; -import org.apache.bcel.classfile.JavaClass; - -/** - * Denotes reference such as java.lang.String. - * - * @version $Id: ObjectType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ObjectType extends ReferenceType { - - /** - * - */ - private static final long serialVersionUID = 1L; - private String class_name; // Class name of type - - /** - * @param class_name - * fully qualified class name, e.g. java.lang.String - */ - public ObjectType(String class_name) { - super(Constants.T_REFERENCE, "L" + class_name.replace('.', '/') + ";"); - this.class_name = class_name.replace('/', '.'); - } - - /** - * @return name of referenced class - */ - public String getClassName() { - return class_name; - } - - /** - * @return a hash code value for the object. - */ - @Override - public int hashCode() { - return class_name.hashCode(); - } - - /** - * @return true if both type objects refer to the same class. - */ - @Override - public boolean equals(Object type) { - return (type instanceof ObjectType) ? ((ObjectType) type).class_name - .equals(class_name) : false; - } - - /** - * If "this" doesn't reference a class, it references an interface or a - * non-existant entity. - * - * @deprecated this method returns an inaccurate result if the class or - * interface referenced cannot be found: use - * referencesClassExact() instead - */ - @Deprecated - public boolean referencesClass() { - try { - JavaClass jc = Repository.lookupClass(class_name); - return jc.isClass(); - } catch (ClassNotFoundException e) { - return false; - } - } - - /** - * If "this" doesn't reference an interface, it references a class or a - * non-existant entity. - * - * @deprecated this method returns an inaccurate result if the class or - * interface referenced cannot be found: use - * referencesInterfaceExact() instead - */ - @Deprecated - public boolean referencesInterface() { - try { - JavaClass jc = Repository.lookupClass(class_name); - return !jc.isClass(); - } catch (ClassNotFoundException e) { - return false; - } - } - - /** - * Return true if this type references a class, false if it references an - * interface. - * - * @return true if the type references a class, false if it references an - * interface - * @throws ClassNotFoundException - * if the class or interface referenced by this type can't be - * found - */ - public boolean referencesClassExact() throws ClassNotFoundException { - JavaClass jc = Repository.lookupClass(class_name); - return jc.isClass(); - } - - /** - * Return true if this type references an interface, false if it references - * a class. - * - * @return true if the type references an interface, false if it references - * a class - * @throws ClassNotFoundException - * if the class or interface referenced by this type can't be - * found - */ - public boolean referencesInterfaceExact() throws ClassNotFoundException { - JavaClass jc = Repository.lookupClass(class_name); - return !jc.isClass(); - } - - /** - * Return true if this type is a subclass of given ObjectType. - * - * @throws ClassNotFoundException - * if any of this class's superclasses can't be found - */ - public boolean subclassOf(ObjectType superclass) - throws ClassNotFoundException { - if (this.referencesInterface() || superclass.referencesInterface()) { - return false; - } - return Repository.instanceOf(this.class_name, superclass.class_name); - } - - /** - * Java Virtual Machine Specification edition 2, 5.4.4 Access Control - * - * @throws ClassNotFoundException - * if the class referenced by this type can't be found - */ - public boolean accessibleTo(ObjectType accessor) - throws ClassNotFoundException { - JavaClass jc = Repository.lookupClass(class_name); - if (jc.isPublic()) { - return true; - } else { - JavaClass acc = Repository.lookupClass(accessor.class_name); - return acc.getPackageName().equals(jc.getPackageName()); - } - } -} diff --git a/src/org/apache/bcel/generic/POP.java b/src/org/apache/bcel/generic/POP.java deleted file mode 100644 index 58df478..0000000 --- a/src/org/apache/bcel/generic/POP.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * POP - Pop top operand stack word - * - *
      - * Stack: ..., word -> ...
      - * 
      - * - * @version $Id: POP.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class POP extends StackInstruction implements PopInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public POP() { - super(org.apache.bcel.Constants.POP); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitStackInstruction(this); - v.visitPOP(this); - } -} diff --git a/src/org/apache/bcel/generic/POP2.java b/src/org/apache/bcel/generic/POP2.java deleted file mode 100644 index 685c9e8..0000000 --- a/src/org/apache/bcel/generic/POP2.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * POP2 - Pop two top operand stack words - * - *
      - * Stack: ..., word2, word1 -> ...
      - * 
      - * - * @version $Id: POP2.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class POP2 extends StackInstruction implements PopInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public POP2() { - super(org.apache.bcel.Constants.POP2); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitStackInstruction(this); - v.visitPOP2(this); - } -} diff --git a/src/org/apache/bcel/generic/PUSH.java b/src/org/apache/bcel/generic/PUSH.java deleted file mode 100644 index 7fcbafb..0000000 --- a/src/org/apache/bcel/generic/PUSH.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; - -/** - * Wrapper class for push operations, which are implemented either as BIPUSH, - * LDC or xCONST_n instructions. - * - * @version $Id: PUSH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class PUSH implements CompoundInstruction, - VariableLengthInstruction, InstructionConstants { - - private Instruction instruction; - - /** - * This constructor also applies for values of type short, char, byte - * - * @param cp - * Constant pool - * @param value - * to be pushed - */ - public PUSH(ConstantPoolGen cp, int value) { - if ((value >= -1) && (value <= 5)) { - instruction = INSTRUCTIONS[Constants.ICONST_0 + value]; - } else if ((value >= -128) && (value <= 127)) { - instruction = new BIPUSH((byte) value); - } else if ((value >= -32768) && (value <= 32767)) { - instruction = new SIPUSH((short) value); - } else { - instruction = new LDC(cp.addInteger(value)); - } - } - - /** - * @param cp - * Constant pool - * @param value - * to be pushed - */ - public PUSH(ConstantPoolGen cp, boolean value) { - instruction = INSTRUCTIONS[Constants.ICONST_0 + (value ? 1 : 0)]; - } - - /** - * @param cp - * Constant pool - * @param value - * to be pushed - */ - public PUSH(ConstantPoolGen cp, float value) { - if (value == 0.0) { - instruction = FCONST_0; - } else if (value == 1.0) { - instruction = FCONST_1; - } else if (value == 2.0) { - instruction = FCONST_2; - } else { - instruction = new LDC(cp.addFloat(value)); - } - } - - /** - * @param cp - * Constant pool - * @param value - * to be pushed - */ - public PUSH(ConstantPoolGen cp, long value) { - if (value == 0) { - instruction = LCONST_0; - } else if (value == 1) { - instruction = LCONST_1; - } else { - instruction = new LDC2_W(cp.addLong(value)); - } - } - - /** - * @param cp - * Constant pool - * @param value - * to be pushed - */ - public PUSH(ConstantPoolGen cp, double value) { - if (value == 0.0) { - instruction = DCONST_0; - } else if (value == 1.0) { - instruction = DCONST_1; - } else { - instruction = new LDC2_W(cp.addDouble(value)); - } - } - - /** - * @param cp - * Constant pool - * @param value - * to be pushed - */ - public PUSH(ConstantPoolGen cp, String value) { - if (value == null) { - instruction = ACONST_NULL; - } else { - instruction = new LDC(cp.addString(value)); - } - } - - /** - * @param cp - * Constant pool - * @param value - * to be pushed - */ - public PUSH(ConstantPoolGen cp, Number value) { - if ((value instanceof Integer) || (value instanceof Short) - || (value instanceof Byte)) { - instruction = new PUSH(cp, value.intValue()).instruction; - } else if (value instanceof Double) { - instruction = new PUSH(cp, value.doubleValue()).instruction; - } else if (value instanceof Float) { - instruction = new PUSH(cp, value.floatValue()).instruction; - } else if (value instanceof Long) { - instruction = new PUSH(cp, value.longValue()).instruction; - } else { - throw new ClassGenException("What's this: " + value); - } - } - - /** - * creates a push object from a Character value. Warning: Make sure not to - * attempt to allow autoboxing to create this value parameter, as an - * alternative constructor will be called - * - * @param cp - * Constant pool - * @param value - * to be pushed - */ - public PUSH(ConstantPoolGen cp, Character value) { - this(cp, value.charValue()); - } - - /** - * @param cp - * Constant pool - * @param value - * to be pushed - */ - public PUSH(ConstantPoolGen cp, Boolean value) { - this(cp, value.booleanValue()); - } - - @Override - public final InstructionList getInstructionList() { - return new InstructionList(instruction); - } - - public final Instruction getInstruction() { - return instruction; - } - - /** - * @return mnemonic for instruction - */ - @Override - public String toString() { - return instruction.toString() + " (PUSH)"; - } -} diff --git a/src/org/apache/bcel/generic/PUTFIELD.java b/src/org/apache/bcel/generic/PUTFIELD.java deleted file mode 100644 index 392d954..0000000 --- a/src/org/apache/bcel/generic/PUTFIELD.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; -import org.apache.bcel.ExceptionConstants; - -/** - * PUTFIELD - Put field in object - * - *
      - * Stack: ..., objectref, value -> ...
      - * 
      - * - * OR - * - *
      - * Stack: ..., objectref, value.word1, value.word2 -> ...
      - * 
      - * - * @version $Id: PUTFIELD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class PUTFIELD extends FieldInstruction implements PopInstruction, - ExceptionThrower { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - PUTFIELD() { - } - - public PUTFIELD(int index) { - super(Constants.PUTFIELD, index); - } - - @Override - public int consumeStack(ConstantPoolGen cpg) { - return getFieldSize(cpg) + 1; - } - - @Override - public Class[] getExceptions() { - Class[] cs = new Class[2 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, - 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length + 1] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.NULL_POINTER_EXCEPTION; - return cs; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitTypedInstruction(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitFieldInstruction(this); - v.visitPUTFIELD(this); - } -} diff --git a/src/org/apache/bcel/generic/PUTSTATIC.java b/src/org/apache/bcel/generic/PUTSTATIC.java deleted file mode 100644 index 9ab5689..0000000 --- a/src/org/apache/bcel/generic/PUTSTATIC.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; -import org.apache.bcel.ExceptionConstants; - -/** - * PUTSTATIC - Put static field in class - * - *
      - * Stack: ..., value -> ...
      - * 
      - * - * OR - * - *
      - * Stack: ..., value.word1, value.word2 -> ...
      - * 
      - * - * @version $Id: PUTSTATIC.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class PUTSTATIC extends FieldInstruction implements ExceptionThrower, - PopInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - PUTSTATIC() { - } - - public PUTSTATIC(int index) { - super(Constants.PUTSTATIC, index); - } - - @Override - public int consumeStack(ConstantPoolGen cpg) { - return getFieldSize(cpg); - } - - @Override - public Class[] getExceptions() { - Class[] cs = new Class[1 + ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length]; - System.arraycopy(ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION, - 0, cs, 0, - ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length); - cs[ExceptionConstants.EXCS_FIELD_AND_METHOD_RESOLUTION.length] = ExceptionConstants.INCOMPATIBLE_CLASS_CHANGE_ERROR; - return cs; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitTypedInstruction(this); - v.visitLoadClass(this); - v.visitCPInstruction(this); - v.visitFieldOrMethod(this); - v.visitFieldInstruction(this); - v.visitPUTSTATIC(this); - } -} diff --git a/src/org/apache/bcel/generic/PopInstruction.java b/src/org/apache/bcel/generic/PopInstruction.java deleted file mode 100644 index 209be34..0000000 --- a/src/org/apache/bcel/generic/PopInstruction.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denotes an unparameterized instruction to pop a value on top from the stack, - * such as ISTORE, POP, PUTSTATIC. - * - * @version $Id: PopInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see ISTORE - * @see POP - */ -public interface PopInstruction extends StackConsumer { -} diff --git a/src/org/apache/bcel/generic/PushInstruction.java b/src/org/apache/bcel/generic/PushInstruction.java deleted file mode 100644 index fc94439..0000000 --- a/src/org/apache/bcel/generic/PushInstruction.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denotes an unparameterized instruction to produce a value on top of the - * stack, such as ILOAD, LDC, SIPUSH, DUP, ICONST, etc. - * - * @version $Id: PushInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * - * @see ILOAD - * @see ICONST - * @see LDC - * @see DUP - * @see SIPUSH - * @see GETSTATIC - */ -public interface PushInstruction extends StackProducer { -} diff --git a/src/org/apache/bcel/generic/RET.java b/src/org/apache/bcel/generic/RET.java deleted file mode 100644 index 7e4d78a..0000000 --- a/src/org/apache/bcel/generic/RET.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * RET - Return from subroutine - * - *
      - * Stack: ... -> ...
      - * 
      - * - * @version $Id: RET.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class RET extends Instruction implements IndexedInstruction, - TypedInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - private boolean wide; - private int index; // index to local variable containg the return address - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - RET() { - } - - public RET(int index) { - super(org.apache.bcel.Constants.RET, (short) 2); - setIndex(index); // May set wide as side effect - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - if (wide) { - out.writeByte(org.apache.bcel.Constants.WIDE); - } - out.writeByte(opcode); - if (wide) { - out.writeShort(index); - } else { - out.writeByte(index); - } - } - - private final void setWide() { - wide = index > org.apache.bcel.Constants.MAX_BYTE; - if (wide) { - length = 4; // Including the wide byte - } else { - length = 2; - } - } - - /** - * Read needed data (e.g. index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - this.wide = wide; - if (wide) { - index = bytes.readUnsignedShort(); - length = 4; - } else { - index = bytes.readUnsignedByte(); - length = 2; - } - } - - /** - * @return index of local variable containg the return address - */ - @Override - public final int getIndex() { - return index; - } - - /** - * Set index of local variable containg the return address - */ - @Override - public final void setIndex(int n) { - if (n < 0) { - throw new ClassGenException("Negative index value: " + n); - } - index = n; - setWide(); - } - - /** - * @return mnemonic for instruction - */ - @Override - public String toString(boolean verbose) { - return super.toString(verbose) + " " + index; - } - - /** - * @return return address type - */ - @Override - public Type getType(ConstantPoolGen cp) { - return ReturnaddressType.NO_TARGET; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitRET(this); - } -} diff --git a/src/org/apache/bcel/generic/RETURN.java b/src/org/apache/bcel/generic/RETURN.java deleted file mode 100644 index e2dc937..0000000 --- a/src/org/apache/bcel/generic/RETURN.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * RETURN - Return from void method - * - *
      - * Stack: ... -> <empty>
      - * 
      - * - * @version $Id: RETURN.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class RETURN extends ReturnInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public RETURN() { - super(org.apache.bcel.Constants.RETURN); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitStackConsumer(this); - v.visitReturnInstruction(this); - v.visitRETURN(this); - } -} diff --git a/src/org/apache/bcel/generic/ReferenceType.java b/src/org/apache/bcel/generic/ReferenceType.java deleted file mode 100644 index 8bb497a..0000000 --- a/src/org/apache/bcel/generic/ReferenceType.java +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; -import org.apache.bcel.Repository; -import org.apache.bcel.classfile.JavaClass; - -/** - * Super class for object and array types. - * - * @version $Id: ReferenceType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class ReferenceType extends Type { - - /** - * - */ - private static final long serialVersionUID = 1L; - - protected ReferenceType(byte t, String s) { - super(t, s); - } - - /** - * Class is non-abstract but not instantiable from the outside - */ - ReferenceType() { - super(Constants.T_OBJECT, ""); - } - - /** - * Return true iff this type is castable to another type t as defined in the - * JVM specification. The case where this is Type.NULL is not defined (see - * the CHECKCAST definition in the JVM specification). However, because e.g. - * CHECKCAST doesn't throw a ClassCastException when casting a null - * reference to any Object, true is returned in this case. - * - * @throws ClassNotFoundException - * if any classes or interfaces required to determine assignment - * compatibility can't be found - */ - public boolean isCastableTo(Type t) throws ClassNotFoundException { - if (this.equals(Type.NULL)) { - return true; // If this is ever changed in isAssignmentCompatible() - } - return isAssignmentCompatibleWith(t); - /* - * Yes, it's true: It's the same definition. See vmspec2 AASTORE / - * CHECKCAST definitions. - */ - } - - /** - * Return true iff this is assignment compatible with another type t as - * defined in the JVM specification; see the AASTORE definition there. - * - * @throws ClassNotFoundException - * if any classes or interfaces required to determine assignment - * compatibility can't be found - */ - public boolean isAssignmentCompatibleWith(Type t) - throws ClassNotFoundException { - if (!(t instanceof ReferenceType)) { - return false; - } - ReferenceType T = (ReferenceType) t; - if (this.equals(Type.NULL)) { - return true; // This is not explicitely stated, but clear. Isn't it? - } - /* - * If this is a class type then - */ - if ((this instanceof ObjectType) - && (((ObjectType) this).referencesClassExact())) { - /* - * If T is a class type, then this must be the same class as T, or - * this must be a subclass of T; - */ - if ((T instanceof ObjectType) - && (((ObjectType) T).referencesClassExact())) { - if (this.equals(T)) { - return true; - } - if (Repository.instanceOf(((ObjectType) this).getClassName(), - ((ObjectType) T).getClassName())) { - return true; - } - } - /* - * If T is an interface type, this must implement interface T. - */ - if ((T instanceof ObjectType) - && (((ObjectType) T).referencesInterfaceExact())) { - if (Repository.implementationOf( - ((ObjectType) this).getClassName(), - ((ObjectType) T).getClassName())) { - return true; - } - } - } - /* - * If this is an interface type, then: - */ - if ((this instanceof ObjectType) - && (((ObjectType) this).referencesInterfaceExact())) { - /* - * If T is a class type, then T must be Object (2.4.7). - */ - if ((T instanceof ObjectType) - && (((ObjectType) T).referencesClassExact())) { - if (T.equals(Type.OBJECT)) { - return true; - } - } - /* - * If T is an interface type, then T must be the same interface as - * this or a superinterface of this (2.13.2). - */ - if ((T instanceof ObjectType) - && (((ObjectType) T).referencesInterfaceExact())) { - if (this.equals(T)) { - return true; - } - if (Repository.implementationOf( - ((ObjectType) this).getClassName(), - ((ObjectType) T).getClassName())) { - return true; - } - } - } - /* - * If this is an array type, namely, the type SC[], that is, an array of - * components of type SC, then: - */ - if (this instanceof ArrayType) { - /* - * If T is a class type, then T must be Object (�2.4.7). - */ - if ((T instanceof ObjectType) - && (((ObjectType) T).referencesClassExact())) { - if (T.equals(Type.OBJECT)) { - return true; - } - } - /* - * If T is an array type TC[], that is, an array of components of - * type TC, then one of the following must be true: - */ - if (T instanceof ArrayType) { - /* - * TC and SC are the same primitive type (�2.4.1). - */ - Type sc = ((ArrayType) this).getElementType(); - Type tc = ((ArrayType) T).getElementType(); - if (sc instanceof BasicType && tc instanceof BasicType - && sc.equals(tc)) { - return true; - } - /* - * TC and SC are reference types (�2.4.6), and type SC is - * assignable to TC by these runtime rules. - */ - if (tc instanceof ReferenceType && sc instanceof ReferenceType - && ((ReferenceType) sc).isAssignmentCompatibleWith(tc)) { - return true; - } - } - /* - * If T is an interface type, T must be one of the interfaces - * implemented by arrays (�2.15). - */ - // TODO: Check if this is still valid or find a way to dynamically - // find out which - // interfaces arrays implement. However, as of the JVM specification - // edition 2, there - // are at least two different pages where assignment compatibility - // is defined and - // on one of them "interfaces implemented by arrays" is exchanged - // with "'Cloneable' or - // 'java.io.Serializable'" - if ((T instanceof ObjectType) - && (((ObjectType) T).referencesInterfaceExact())) { - for (int ii = 0; ii < Constants.INTERFACES_IMPLEMENTED_BY_ARRAYS.length; ii++) { - if (T.equals(new ObjectType( - Constants.INTERFACES_IMPLEMENTED_BY_ARRAYS[ii]))) { - return true; - } - } - } - } - return false; // default. - } - - /** - * This commutative operation returns the first common superclass (narrowest - * ReferenceType referencing a class, not an interface). If one of the types - * is a superclass of the other, the former is returned. If "this" is - * Type.NULL, then t is returned. If t is Type.NULL, then "this" is - * returned. If "this" equals t ['this.equals(t)'] "this" is returned. If - * "this" or t is an ArrayType, then Type.OBJECT is returned; unless their - * dimensions match. Then an ArrayType of the same number of dimensions is - * returned, with its basic type being the first common super class of the - * basic types of "this" and t. If "this" or t is a ReferenceType - * referencing an interface, then Type.OBJECT is returned. If not all of the - * two classes' superclasses cannot be found, "null" is returned. See the - * JVM specification edition 2, "�4.9.2 The Bytecode Verifier". - * - * @throws ClassNotFoundException - * on failure to find superclasses of this type, or the type - * passed as a parameter - */ - public ReferenceType getFirstCommonSuperclass(ReferenceType t) - throws ClassNotFoundException { - if (this.equals(Type.NULL)) { - return t; - } - if (t.equals(Type.NULL)) { - return this; - } - if (this.equals(t)) { - return this; - /* - * TODO: Above sounds a little arbitrary. On the other hand, there - * is no object referenced by Type.NULL so we can also say all the - * objects referenced by Type.NULL were derived from - * java.lang.Object. However, the Java Language's "instanceof" - * operator proves us wrong: "null" is not referring to an instance - * of java.lang.Object :) - */ - } - /* - * This code is from a bug report by Konstantin Shagin - * - */ - if ((this instanceof ArrayType) && (t instanceof ArrayType)) { - ArrayType arrType1 = (ArrayType) this; - ArrayType arrType2 = (ArrayType) t; - if ((arrType1.getDimensions() == arrType2.getDimensions()) - && arrType1.getBasicType() instanceof ObjectType - && arrType2.getBasicType() instanceof ObjectType) { - return new ArrayType( - ((ObjectType) arrType1.getBasicType()).getFirstCommonSuperclass((ObjectType) arrType2 - .getBasicType()), arrType1.getDimensions()); - } - } - if ((this instanceof ArrayType) || (t instanceof ArrayType)) { - return Type.OBJECT; - // TODO: Is there a proof of OBJECT being the direct ancestor of - // every ArrayType? - } - if (((this instanceof ObjectType) && ((ObjectType) this) - .referencesInterfaceExact()) - || ((t instanceof ObjectType) && ((ObjectType) t) - .referencesInterfaceExact())) { - return Type.OBJECT; - // TODO: The above line is correct comparing to the vmspec2. But one - // could - // make class file verification a bit stronger here by using the - // notion of - // superinterfaces or even castability or assignment compatibility. - } - // this and t are ObjectTypes, see above. - ObjectType thiz = (ObjectType) this; - ObjectType other = (ObjectType) t; - JavaClass[] thiz_sups = Repository.getSuperClasses(thiz.getClassName()); - JavaClass[] other_sups = Repository.getSuperClasses(other - .getClassName()); - if ((thiz_sups == null) || (other_sups == null)) { - return null; - } - // Waaahh... - JavaClass[] this_sups = new JavaClass[thiz_sups.length + 1]; - JavaClass[] t_sups = new JavaClass[other_sups.length + 1]; - System.arraycopy(thiz_sups, 0, this_sups, 1, thiz_sups.length); - System.arraycopy(other_sups, 0, t_sups, 1, other_sups.length); - this_sups[0] = Repository.lookupClass(thiz.getClassName()); - t_sups[0] = Repository.lookupClass(other.getClassName()); - for (int i = 0; i < t_sups.length; i++) { - for (int j = 0; j < this_sups.length; j++) { - if (this_sups[j].equals(t_sups[i])) { - return new ObjectType(this_sups[j].getClassName()); - } - } - } - // Huh? Did you ask for Type.OBJECT's superclass?? - return null; - } - - /** - * This commutative operation returns the first common superclass (narrowest - * ReferenceType referencing a class, not an interface). If one of the types - * is a superclass of the other, the former is returned. If "this" is - * Type.NULL, then t is returned. If t is Type.NULL, then "this" is - * returned. If "this" equals t ['this.equals(t)'] "this" is returned. If - * "this" or t is an ArrayType, then Type.OBJECT is returned. If "this" or t - * is a ReferenceType referencing an interface, then Type.OBJECT is - * returned. If not all of the two classes' superclasses cannot be found, - * "null" is returned. See the JVM specification edition 2, - * "�4.9.2 The Bytecode Verifier". - * - * @deprecated use getFirstCommonSuperclass(ReferenceType t) which has - * slightly changed semantics. - * @throws ClassNotFoundException - * on failure to find superclasses of this type, or the type - * passed as a parameter - */ - @Deprecated - public ReferenceType firstCommonSuperclass(ReferenceType t) - throws ClassNotFoundException { - if (this.equals(Type.NULL)) { - return t; - } - if (t.equals(Type.NULL)) { - return this; - } - if (this.equals(t)) { - return this; - /* - * TODO: Above sounds a little arbitrary. On the other hand, there - * is no object referenced by Type.NULL so we can also say all the - * objects referenced by Type.NULL were derived from - * java.lang.Object. However, the Java Language's "instanceof" - * operator proves us wrong: "null" is not referring to an instance - * of java.lang.Object :) - */ - } - if ((this instanceof ArrayType) || (t instanceof ArrayType)) { - return Type.OBJECT; - // TODO: Is there a proof of OBJECT being the direct ancestor of - // every ArrayType? - } - if (((this instanceof ObjectType) && ((ObjectType) this) - .referencesInterface()) - || ((t instanceof ObjectType) && ((ObjectType) t) - .referencesInterface())) { - return Type.OBJECT; - // TODO: The above line is correct comparing to the vmspec2. But one - // could - // make class file verification a bit stronger here by using the - // notion of - // superinterfaces or even castability or assignment compatibility. - } - // this and t are ObjectTypes, see above. - ObjectType thiz = (ObjectType) this; - ObjectType other = (ObjectType) t; - JavaClass[] thiz_sups = Repository.getSuperClasses(thiz.getClassName()); - JavaClass[] other_sups = Repository.getSuperClasses(other - .getClassName()); - if ((thiz_sups == null) || (other_sups == null)) { - return null; - } - // Waaahh... - JavaClass[] this_sups = new JavaClass[thiz_sups.length + 1]; - JavaClass[] t_sups = new JavaClass[other_sups.length + 1]; - System.arraycopy(thiz_sups, 0, this_sups, 1, thiz_sups.length); - System.arraycopy(other_sups, 0, t_sups, 1, other_sups.length); - this_sups[0] = Repository.lookupClass(thiz.getClassName()); - t_sups[0] = Repository.lookupClass(other.getClassName()); - for (int i = 0; i < t_sups.length; i++) { - for (int j = 0; j < this_sups.length; j++) { - if (this_sups[j].equals(t_sups[i])) { - return new ObjectType(this_sups[j].getClassName()); - } - } - } - // Huh? Did you ask for Type.OBJECT's superclass?? - return null; - } -} diff --git a/src/org/apache/bcel/generic/ReturnInstruction.java b/src/org/apache/bcel/generic/ReturnInstruction.java deleted file mode 100644 index 509de9e..0000000 --- a/src/org/apache/bcel/generic/ReturnInstruction.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; -import org.apache.bcel.ExceptionConstants; - -/** - * Super class for the xRETURN family of instructions. - * - * @version $Id: ReturnInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class ReturnInstruction extends Instruction implements - ExceptionThrower, TypedInstruction, StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - ReturnInstruction() { - } - - /** - * @param opcode - * of instruction - */ - protected ReturnInstruction(short opcode) { - super(opcode, (short) 1); - } - - public Type getType() { - switch (opcode) { - case Constants.IRETURN: - return Type.INT; - case Constants.LRETURN: - return Type.LONG; - case Constants.FRETURN: - return Type.FLOAT; - case Constants.DRETURN: - return Type.DOUBLE; - case Constants.ARETURN: - return Type.OBJECT; - case Constants.RETURN: - return Type.VOID; - default: // Never reached - throw new ClassGenException("Unknown type " + opcode); - } - } - - @Override - public Class[] getExceptions() { - return new Class[] { ExceptionConstants.ILLEGAL_MONITOR_STATE }; - } - - /** - * @return type associated with the instruction - */ - @Override - public Type getType(ConstantPoolGen cp) { - return getType(); - } -} diff --git a/src/org/apache/bcel/generic/ReturnaddressType.java b/src/org/apache/bcel/generic/ReturnaddressType.java deleted file mode 100644 index 8847ac8..0000000 --- a/src/org/apache/bcel/generic/ReturnaddressType.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import org.apache.bcel.Constants; - -/** - * Returnaddress, the type JSR or JSR_W instructions push upon the stack. - * - * see vmspec2 3.3.3 - * - * @version $Id: ReturnaddressType.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author Enver Haase - */ -public class ReturnaddressType extends Type { - - /** - * - */ - private static final long serialVersionUID = 1L; - public static final ReturnaddressType NO_TARGET = new ReturnaddressType(); - private InstructionHandle returnTarget; - - /** - * A Returnaddress [that doesn't know where to return to]. - */ - private ReturnaddressType() { - super(Constants.T_ADDRESS, ""); - } - - /** - * Creates a ReturnaddressType object with a target. - */ - public ReturnaddressType(InstructionHandle returnTarget) { - super(Constants.T_ADDRESS, ""); - this.returnTarget = returnTarget; - } - - /** - * @return a hash code value for the object. - */ - @Override - public int hashCode() { - if (returnTarget == null) { - return 0; - } - return returnTarget.hashCode(); - } - - /** - * Returns if the two Returnaddresses refer to the same target. - */ - @Override - public boolean equals(Object rat) { - if (!(rat instanceof ReturnaddressType)) { - return false; - } - ReturnaddressType that = (ReturnaddressType) rat; - if (this.returnTarget == null || that.returnTarget == null) { - return that.returnTarget == this.returnTarget; - } - return that.returnTarget.equals(this.returnTarget); - } - - /** - * @return the target of this ReturnaddressType - */ - public InstructionHandle getTarget() { - return returnTarget; - } -} diff --git a/src/org/apache/bcel/generic/SALOAD.java b/src/org/apache/bcel/generic/SALOAD.java deleted file mode 100644 index 1cdf688..0000000 --- a/src/org/apache/bcel/generic/SALOAD.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * SALOAD - Load short from array - * - *
      - * Stack: ..., arrayref, index -> ..., value
      - * 
      - * - * @version $Id: SALOAD.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class SALOAD extends ArrayInstruction implements StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public SALOAD() { - super(org.apache.bcel.Constants.SALOAD); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackProducer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitSALOAD(this); - } -} diff --git a/src/org/apache/bcel/generic/SASTORE.java b/src/org/apache/bcel/generic/SASTORE.java deleted file mode 100644 index 2cab8c0..0000000 --- a/src/org/apache/bcel/generic/SASTORE.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * SASTORE - Store into short array - * - *
      - * Stack: ..., arrayref, index, value -> ...
      - * 
      - * - * @version $Id: SASTORE.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class SASTORE extends ArrayInstruction implements StackConsumer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public SASTORE() { - super(org.apache.bcel.Constants.SASTORE); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitExceptionThrower(this); - v.visitTypedInstruction(this); - v.visitArrayInstruction(this); - v.visitSASTORE(this); - } -} diff --git a/src/org/apache/bcel/generic/SIPUSH.java b/src/org/apache/bcel/generic/SIPUSH.java deleted file mode 100644 index 6647d61..0000000 --- a/src/org/apache/bcel/generic/SIPUSH.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * SIPUSH - Push short - * - *
      - * Stack: ... -> ..., value
      - * 
      - * - * @version $Id: SIPUSH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class SIPUSH extends Instruction implements ConstantPushInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - private short b; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - SIPUSH() { - } - - public SIPUSH(short b) { - super(org.apache.bcel.Constants.SIPUSH, (short) 3); - this.b = b; - } - - /** - * Dump instruction as short code to stream out. - */ - @Override - public void dump(DataOutputStream out) throws IOException { - super.dump(out); - out.writeShort(b); - } - - /** - * @return mnemonic for instruction - */ - @Override - public String toString(boolean verbose) { - return super.toString(verbose) + " " + b; - } - - /** - * Read needed data (e.g. index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - length = 3; - b = bytes.readShort(); - } - - @Override - public Number getValue() { - return new Integer(b); - } - - /** - * @return Type.SHORT - */ - @Override - public Type getType(ConstantPoolGen cp) { - return Type.SHORT; - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitPushInstruction(this); - v.visitStackProducer(this); - v.visitTypedInstruction(this); - v.visitConstantPushInstruction(this); - v.visitSIPUSH(this); - } -} diff --git a/src/org/apache/bcel/generic/SWAP.java b/src/org/apache/bcel/generic/SWAP.java deleted file mode 100644 index ce28366..0000000 --- a/src/org/apache/bcel/generic/SWAP.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * SWAP - Swa top operand stack word - * - *
      - * Stack: ..., word2, word1 -> ..., word1, word2
      - * 
      - * - * @version $Id: SWAP.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class SWAP extends StackInstruction implements StackConsumer, - StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - - public SWAP() { - super(org.apache.bcel.Constants.SWAP); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitStackProducer(this); - v.visitStackInstruction(this); - v.visitSWAP(this); - } -} diff --git a/src/org/apache/bcel/generic/SWITCH.java b/src/org/apache/bcel/generic/SWITCH.java deleted file mode 100644 index 3a8937f..0000000 --- a/src/org/apache/bcel/generic/SWITCH.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * SWITCH - Branch depending on int value, generates either LOOKUPSWITCH or - * TABLESWITCH instruction, depending on whether the match values (int[]) can be - * sorted with no gaps between the numbers. - * - * @version $Id: SWITCH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class SWITCH implements CompoundInstruction { - - private int[] match; - private InstructionHandle[] targets; - private Select instruction; - private int match_length; - - /** - * Template for switch() constructs. If the match array can be sorted in - * ascending order with gaps no larger than max_gap between the numbers, a - * TABLESWITCH instruction is generated, and a LOOKUPSWITCH otherwise. The - * former may be more efficient, but needs more space. - * - * Note, that the key array always will be sorted, though we leave the - * original arrays unaltered. - * - * @param match - * array of match values (case 2: ... case 7: ..., etc.) - * @param targets - * the instructions to be branched to for each case - * @param target - * the default target - * @param max_gap - * maximum gap that may between case branches - */ - public SWITCH(int[] match, InstructionHandle[] targets, - InstructionHandle target, int max_gap) { - this.match = match.clone(); - this.targets = targets.clone(); - if ((match_length = match.length) < 2) { - instruction = new TABLESWITCH(match, targets, target); - } else { - sort(0, match_length - 1); - if (matchIsOrdered(max_gap)) { - fillup(max_gap, target); - instruction = new TABLESWITCH(this.match, this.targets, target); - } else { - instruction = new LOOKUPSWITCH(this.match, this.targets, target); - } - } - } - - public SWITCH(int[] match, InstructionHandle[] targets, - InstructionHandle target) { - this(match, targets, target, 1); - } - - private final void fillup(int max_gap, InstructionHandle target) { - int max_size = match_length + match_length * max_gap; - int[] m_vec = new int[max_size]; - InstructionHandle[] t_vec = new InstructionHandle[max_size]; - int count = 1; - m_vec[0] = match[0]; - t_vec[0] = targets[0]; - for (int i = 1; i < match_length; i++) { - int prev = match[i - 1]; - int gap = match[i] - prev; - for (int j = 1; j < gap; j++) { - m_vec[count] = prev + j; - t_vec[count] = target; - count++; - } - m_vec[count] = match[i]; - t_vec[count] = targets[i]; - count++; - } - match = new int[count]; - targets = new InstructionHandle[count]; - System.arraycopy(m_vec, 0, match, 0, count); - System.arraycopy(t_vec, 0, targets, 0, count); - } - - /** - * Sort match and targets array with QuickSort. - */ - private final void sort(int l, int r) { - int i = l, j = r; - int h, m = match[(l + r) / 2]; - InstructionHandle h2; - do { - while (match[i] < m) { - i++; - } - while (m < match[j]) { - j--; - } - if (i <= j) { - h = match[i]; - match[i] = match[j]; - match[j] = h; // Swap elements - h2 = targets[i]; - targets[i] = targets[j]; - targets[j] = h2; // Swap instructions, too - i++; - j--; - } - } while (i <= j); - if (l < j) { - sort(l, j); - } - if (i < r) { - sort(i, r); - } - } - - /** - * @return match is sorted in ascending order with no gap bigger than - * max_gap? - */ - private final boolean matchIsOrdered(int max_gap) { - for (int i = 1; i < match_length; i++) { - if (match[i] - match[i - 1] > max_gap) { - return false; - } - } - return true; - } - - @Override - public final InstructionList getInstructionList() { - return new InstructionList(instruction); - } - - public final Instruction getInstruction() { - return instruction; - } -} diff --git a/src/org/apache/bcel/generic/Select.java b/src/org/apache/bcel/generic/Select.java deleted file mode 100644 index 19213d4..0000000 --- a/src/org/apache/bcel/generic/Select.java +++ /dev/null @@ -1,254 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * Select - Abstract super class for LOOKUPSWITCH and TABLESWITCH instructions. - * - *

      - * We use our super's target property as the default target. - * - * @version $Id: Select.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see LOOKUPSWITCH - * @see TABLESWITCH - * @see InstructionList - */ -public abstract class Select extends BranchInstruction implements - VariableLengthInstruction, StackProducer { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected int[] match; // matches, i.e., case 1: ... - protected int[] indices; // target offsets - protected InstructionHandle[] targets; // target objects in instruction list - protected int fixed_length; // fixed length defined by subclasses - protected int match_length; // number of cases - protected int padding = 0; // number of pad bytes for alignment - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - Select() { - } - - /** - * (Match, target) pairs for switch. `Match' and `targets' must have the - * same length of course. - * - * @param match - * array of matching values - * @param targets - * instruction targets - * @param defaultTarget - * default instruction target - */ - Select(short opcode, int[] match, InstructionHandle[] targets, - InstructionHandle defaultTarget) { - super(opcode, defaultTarget); - this.targets = targets; - for (int i = 0; i < targets.length; i++) { - notifyTarget(null, targets[i], this); - } - this.match = match; - if ((match_length = match.length) != targets.length) { - throw new ClassGenException( - "Match and target array have not the same length"); - } - indices = new int[match_length]; - } - - /** - * Since this is a variable length instruction, it may shift the following - * instructions which then need to update their position. - * - * Called by InstructionList.setPositions when setting the position for - * every instruction. In the presence of variable length instructions - * `setPositions' performs multiple passes over the instruction list to - * calculate the correct (byte) positions and offsets by calling this - * function. - * - * @param offset - * additional offset caused by preceding (variable length) - * instructions - * @param max_offset - * the maximum offset that may be caused by these instructions - * @return additional offset caused by possible change of this instruction's - * length - */ - @Override - protected int updatePosition(int offset, int max_offset) { - position += offset; // Additional offset caused by preceding SWITCHs, - // GOTOs, etc. - short old_length = length; - /* - * Alignment on 4-byte-boundary, + 1, because of tag byte. - */ - padding = (4 - ((position + 1) % 4)) % 4; - length = (short) (fixed_length + padding); // Update length - return length - old_length; - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - out.writeByte(opcode); - for (int i = 0; i < padding; i++) { - out.writeByte(0); - } - index = getTargetOffset(); // Write default target offset - out.writeInt(index); - } - - /** - * Read needed data (e.g. index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - padding = (4 - (bytes.getIndex() % 4)) % 4; // Compute number of pad - // bytes - for (int i = 0; i < padding; i++) { - bytes.readByte(); - } - // Default branch target common for both cases (TABLESWITCH, - // LOOKUPSWITCH) - index = bytes.readInt(); - } - - /** - * @return mnemonic for instruction - */ - @Override - public String toString(boolean verbose) { - StringBuffer buf = new StringBuffer(super.toString(verbose)); - if (verbose) { - for (int i = 0; i < match_length; i++) { - String s = "null"; - if (targets[i] != null) { - s = targets[i].getInstruction().toString(); - } - buf.append("(").append(match[i]).append(", ").append(s) - .append(" = {").append(indices[i]).append("})"); - } - } else { - buf.append(" ..."); - } - return buf.toString(); - } - - /** - * Set branch target for `i'th case - */ - public void setTarget(int i, InstructionHandle target) { - notifyTarget(targets[i], target, this); - targets[i] = target; - } - - /** - * @param old_ih - * old target - * @param new_ih - * new target - */ - @Override - public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih) { - boolean targeted = false; - if (target == old_ih) { - targeted = true; - setTarget(new_ih); - } - for (int i = 0; i < targets.length; i++) { - if (targets[i] == old_ih) { - targeted = true; - setTarget(i, new_ih); - } - } - if (!targeted) { - throw new ClassGenException("Not targeting " + old_ih); - } - } - - /** - * @return true, if ih is target of this instruction - */ - @Override - public boolean containsTarget(InstructionHandle ih) { - if (target == ih) { - return true; - } - for (int i = 0; i < targets.length; i++) { - if (targets[i] == ih) { - return true; - } - } - return false; - } - - @Override - protected Object clone() throws CloneNotSupportedException { - Select copy = (Select) super.clone(); - copy.match = match.clone(); - copy.indices = indices.clone(); - copy.targets = targets.clone(); - return copy; - } - - /** - * Inform targets that they're not targeted anymore. - */ - @Override - void dispose() { - super.dispose(); - for (int i = 0; i < targets.length; i++) { - targets[i].removeTargeter(this); - } - } - - /** - * @return array of match indices - */ - public int[] getMatchs() { - return match; - } - - /** - * @return array of match target offsets - */ - public int[] getIndices() { - return indices; - } - - /** - * @return array of match targets - */ - public InstructionHandle[] getTargets() { - return targets; - } -} diff --git a/src/org/apache/bcel/generic/StackConsumer.java b/src/org/apache/bcel/generic/StackConsumer.java deleted file mode 100644 index e1460ad..0000000 --- a/src/org/apache/bcel/generic/StackConsumer.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denote an instruction that may consume a value from the stack. - * - * @version $Id: StackConsumer.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface StackConsumer { - - /** - * @return how many words are consumed from stack - */ - public int consumeStack(ConstantPoolGen cpg); -} diff --git a/src/org/apache/bcel/generic/StackInstruction.java b/src/org/apache/bcel/generic/StackInstruction.java deleted file mode 100644 index 277bffd..0000000 --- a/src/org/apache/bcel/generic/StackInstruction.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Super class for stack operations like DUP and POP. - * - * @version $Id: StackInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class StackInstruction extends Instruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - StackInstruction() { - } - - /** - * @param opcode - * instruction opcode - */ - protected StackInstruction(short opcode) { - super(opcode, (short) 1); - } - - /** - * @return Type.UNKNOWN - */ - public Type getType(ConstantPoolGen cp) { - return Type.UNKNOWN; - } -} diff --git a/src/org/apache/bcel/generic/StackProducer.java b/src/org/apache/bcel/generic/StackProducer.java deleted file mode 100644 index 783b3d4..0000000 --- a/src/org/apache/bcel/generic/StackProducer.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denote an instruction that may produce a value on top of the stack (this - * excludes DUP_X1, e.g.) - * - * @version $Id: StackProducer.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface StackProducer { - - /** - * @return how many words are produced on stack - */ - public int produceStack(ConstantPoolGen cpg); -} diff --git a/src/org/apache/bcel/generic/StoreInstruction.java b/src/org/apache/bcel/generic/StoreInstruction.java deleted file mode 100644 index 1b3ae70..0000000 --- a/src/org/apache/bcel/generic/StoreInstruction.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denotes an unparameterized instruction to store a value into a local - * variable, e.g. ISTORE. - * - * @version $Id: StoreInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public abstract class StoreInstruction extends LocalVariableInstruction - implements PopInstruction { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. tag and length - * are defined in readInstruction and initFromFile, respectively. - */ - StoreInstruction(short canon_tag, short c_tag) { - super(canon_tag, c_tag); - } - - /** - * @param opcode - * Instruction opcode - * @param c_tag - * Instruction number for compact version, ASTORE_0, e.g. - * @param n - * local variable index (unsigned short) - */ - protected StoreInstruction(short opcode, short c_tag, int n) { - super(opcode, c_tag, n); - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitStackConsumer(this); - v.visitPopInstruction(this); - v.visitTypedInstruction(this); - v.visitLocalVariableInstruction(this); - v.visitStoreInstruction(this); - } -} diff --git a/src/org/apache/bcel/generic/TABLESWITCH.java b/src/org/apache/bcel/generic/TABLESWITCH.java deleted file mode 100644 index eb0677c..0000000 --- a/src/org/apache/bcel/generic/TABLESWITCH.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.io.DataOutputStream; -import java.io.IOException; -import org.apache.bcel.util.ByteSequence; - -/** - * TABLESWITCH - Switch within given range of values, i.e., low..high - * - * @version $Id: TABLESWITCH.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @see SWITCH - */ -public class TABLESWITCH extends Select { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Empty constructor needed for the Class.newInstance() statement in - * Instruction.readInstruction(). Not to be used otherwise. - */ - TABLESWITCH() { - } - - /** - * @param match - * sorted array of match values, match[0] must be low value, - * match[match_length - 1] high value - * @param targets - * where to branch for matched values - * @param defaultTarget - * default branch - */ - public TABLESWITCH(int[] match, InstructionHandle[] targets, - InstructionHandle defaultTarget) { - super(org.apache.bcel.Constants.TABLESWITCH, match, targets, - defaultTarget); - length = (short) (13 + match_length * 4); /* - * Alignment remainder assumed 0 - * here, until dump time - */ - fixed_length = length; - } - - /** - * Dump instruction as byte code to stream out. - * - * @param out - * Output stream - */ - @Override - public void dump(DataOutputStream out) throws IOException { - super.dump(out); - int low = (match_length > 0) ? match[0] : 0; - out.writeInt(low); - int high = (match_length > 0) ? match[match_length - 1] : 0; - out.writeInt(high); - for (int i = 0; i < match_length; i++) { - out.writeInt(indices[i] = getTargetOffset(targets[i])); - } - } - - /** - * Read needed data (e.g. index) from file. - */ - @Override - protected void initFromFile(ByteSequence bytes, boolean wide) - throws IOException { - super.initFromFile(bytes, wide); - int low = bytes.readInt(); - int high = bytes.readInt(); - match_length = high - low + 1; - fixed_length = (short) (13 + match_length * 4); - length = (short) (fixed_length + padding); - match = new int[match_length]; - indices = new int[match_length]; - targets = new InstructionHandle[match_length]; - for (int i = low; i <= high; i++) { - match[i - low] = i; - } - for (int i = 0; i < match_length; i++) { - indices[i] = bytes.readInt(); - } - } - - /** - * Call corresponding visitor method(s). The order is: Call visitor methods - * of implemented interfaces first, then call methods according to the class - * hierarchy in descending order, i.e., the most specific visitXXX() call - * comes last. - * - * @param v - * Visitor object - */ - @Override - public void accept(Visitor v) { - v.visitVariableLengthInstruction(this); - v.visitStackProducer(this); - v.visitBranchInstruction(this); - v.visitSelect(this); - v.visitTABLESWITCH(this); - } -} diff --git a/src/org/apache/bcel/generic/TargetLostException.java b/src/org/apache/bcel/generic/TargetLostException.java deleted file mode 100644 index 42d00b6..0000000 --- a/src/org/apache/bcel/generic/TargetLostException.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Thrown by InstructionList.remove() when one or multiple disposed instruction - * are still being referenced by a InstructionTargeter object. I.e. the - * InstructionTargeter has to be notified that (one of) the InstructionHandle it - * is referencing is being removed from the InstructionList and thus not valid - * anymore. - * - * Making this an exception instead of a return value forces the user to handle - * these case explicitely in a try { ... } catch. The following code illustrates - * how this may be done: - * - *

      - *     ...
      - *     try {
      - * il.delete(start_ih, end_ih);
      - *     } catch(TargetLostException e) {
      - *       InstructionHandle[] targets = e.getTargets();
      - *  for(int i=0; i < targets.length; i++) {
      - *    InstructionTargeter[] targeters = targets[i].getTargeters();
      - *     
      - *    for(int j=0; j < targeters.length; j++)
      - *      targeters[j].updateTarget(targets[i], new_target);
      - *       }
      - *     }
      - * 
      - * - * @see InstructionHandle - * @see InstructionList - * @see InstructionTargeter - * @version $Id: TargetLostException.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class TargetLostException extends Exception { - - /** - * - */ - private static final long serialVersionUID = 1L; - private InstructionHandle[] targets; - - TargetLostException(InstructionHandle[] t, String mesg) { - super(mesg); - targets = t; - } - - /** - * @return list of instructions still being targeted. - */ - public InstructionHandle[] getTargets() { - return targets; - } -} diff --git a/src/org/apache/bcel/generic/Type.java b/src/org/apache/bcel/generic/Type.java deleted file mode 100644 index 5cd5ad7..0000000 --- a/src/org/apache/bcel/generic/Type.java +++ /dev/null @@ -1,340 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.bcel.Constants; -import org.apache.bcel.classfile.ClassFormatException; -import org.apache.bcel.classfile.Utility; - -/** - * Abstract super class for all possible java types, namely basic types such as - * int, object types like String and array types, e.g. int[] - * - * @version $Id: Type.java 393344 2006-04-12 00:38:34Z tcurdt $ - * @author M. Dahm - */ -public abstract class Type implements java.io.Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected byte type; - protected String signature; // signature for the type - /** - * Predefined constants - */ - public static final BasicType VOID = new BasicType(Constants.T_VOID); - public static final BasicType BOOLEAN = new BasicType(Constants.T_BOOLEAN); - public static final BasicType INT = new BasicType(Constants.T_INT); - public static final BasicType SHORT = new BasicType(Constants.T_SHORT); - public static final BasicType BYTE = new BasicType(Constants.T_BYTE); - public static final BasicType LONG = new BasicType(Constants.T_LONG); - public static final BasicType DOUBLE = new BasicType(Constants.T_DOUBLE); - public static final BasicType FLOAT = new BasicType(Constants.T_FLOAT); - public static final BasicType CHAR = new BasicType(Constants.T_CHAR); - public static final ObjectType OBJECT = new ObjectType("java.lang.Object"); - public static final ObjectType CLASS = new ObjectType("java.lang.Class"); - public static final ObjectType STRING = new ObjectType("java.lang.String"); - public static final ObjectType STRINGBUFFER = new ObjectType( - "java.lang.StringBuffer"); - public static final ObjectType THROWABLE = new ObjectType( - "java.lang.Throwable"); - public static final Type[] NO_ARGS = new Type[0]; - public static final ReferenceType NULL = new ReferenceType() { - - /** - * - */ - private static final long serialVersionUID = 1L; - }; - public static final Type UNKNOWN = new Type(Constants.T_UNKNOWN, - "") { - - /** - * - */ - private static final long serialVersionUID = 1L; - }; - - protected Type(byte t, String s) { - type = t; - signature = s; - } - - /** - * @return hashcode of Type - */ - @Override - public int hashCode() { - return type ^ signature.hashCode(); - } - - /** - * @return whether the Types are equal - */ - @Override - public boolean equals(Object o) { - if (o instanceof Type) { - Type t = (Type) o; - return (type == t.type) && signature.equals(t.signature); - } - return false; - } - - /** - * @return signature for given type. - */ - public String getSignature() { - return signature; - } - - /** - * @return type as defined in Constants - */ - public byte getType() { - return type; - } - - /** - * @return stack size of this type (2 for long and double, 0 for void, 1 - * otherwise) - */ - public int getSize() { - switch (type) { - case Constants.T_DOUBLE: - case Constants.T_LONG: - return 2; - case Constants.T_VOID: - return 0; - default: - return 1; - } - } - - /** - * @return Type string, e.g. `int[]' - */ - @Override - public String toString() { - return ((this.equals(Type.NULL) || (type >= Constants.T_UNKNOWN))) ? signature - : Utility.signatureToString(signature, false); - } - - /** - * Convert type to Java method signature, e.g. int[] f(java.lang.String x) - * becomes (Ljava/lang/String;)[I - * - * @param return_type - * what the method returns - * @param arg_types - * what are the argument types - * @return method signature for given type(s). - */ - public static String getMethodSignature(Type return_type, Type[] arg_types) { - StringBuffer buf = new StringBuffer("("); - int length = (arg_types == null) ? 0 : arg_types.length; - for (int i = 0; i < length; i++) { - buf.append(arg_types[i].getSignature()); - } - buf.append(')'); - buf.append(return_type.getSignature()); - return buf.toString(); - } - - private static ThreadLocal consumed_chars = new ThreadLocal() { - - @Override - protected Integer initialValue() { - return new Integer(0); - } - };// int consumed_chars=0; // Remember position in string, see - // getArgumentTypes - - private static int unwrap(ThreadLocal tl) { - return tl.get().intValue(); - } - - private static void wrap(ThreadLocal tl, int value) { - tl.set(new Integer(value)); - } - - /** - * Convert signature to a Type object. - * - * @param signature - * signature string such as Ljava/lang/String; - * @return type object - */ - public static final Type getType(String signature) - throws StringIndexOutOfBoundsException { - byte type = Utility.typeOfSignature(signature); - if (type <= Constants.T_VOID) { - // corrected concurrent private static field acess - wrap(consumed_chars, 1); - return BasicType.getType(type); - } else if (type == Constants.T_ARRAY) { - int dim = 0; - do { // Count dimensions - dim++; - } while (signature.charAt(dim) == '['); - // Recurse, but just once, if the signature is ok - Type t = getType(signature.substring(dim)); - // corrected concurrent private static field acess - // consumed_chars += dim; // update counter - is replaced by - int _temp = unwrap(consumed_chars) + dim; - wrap(consumed_chars, _temp); - return new ArrayType(t, dim); - } else { // type == T_REFERENCE - int index = signature.indexOf(';'); // Look for closing `;' - if (index < 0) { - throw new ClassFormatException("Invalid signature: " - + signature); - } - // corrected concurrent private static field acess - wrap(consumed_chars, index + 1); // "Lblabla;" `L' and `;' are - // removed - return new ObjectType(signature.substring(1, index).replace('/', - '.')); - } - } - - /** - * Convert return value of a method (signature) to a Type object. - * - * @param signature - * signature string such as (Ljava/lang/String;)V - * @return return type - */ - public static Type getReturnType(String signature) { - try { - // Read return type after `)' - int index = signature.lastIndexOf(')') + 1; - return getType(signature.substring(index)); - } catch (StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid method signature: " - + signature); - } - } - - /** - * Convert arguments of a method (signature) to an array of Type objects. - * - * @param signature - * signature string such as (Ljava/lang/String;)V - * @return array of argument types - */ - public static Type[] getArgumentTypes(String signature) { - List vec = new ArrayList(); - int index; - Type[] types; - try { // Read all declarations between for `(' and `)' - if (signature.charAt(0) != '(') { - throw new ClassFormatException("Invalid method signature: " - + signature); - } - index = 1; // current string position - while (signature.charAt(index) != ')') { - vec.add(getType(signature.substring(index))); - // corrected concurrent private static field acess - index += unwrap(consumed_chars); // update position - } - } catch (StringIndexOutOfBoundsException e) { // Should never occur - throw new ClassFormatException("Invalid method signature: " - + signature); - } - types = new Type[vec.size()]; - vec.toArray(types); - return types; - } - - /** - * Convert runtime java.lang.Class to BCEL Type object. - * - * @param cl - * Java class - * @return corresponding Type object - */ - public static Type getType(java.lang.Class cl) { - if (cl == null) { - throw new IllegalArgumentException("Class must not be null"); - } - /* - * That's an amzingly easy case, because getName() returns the - * signature. That's what we would have liked anyway. - */ - if (cl.isArray()) { - return getType(cl.getName()); - } else if (cl.isPrimitive()) { - if (cl == Integer.TYPE) { - return INT; - } else if (cl == Void.TYPE) { - return VOID; - } else if (cl == Double.TYPE) { - return DOUBLE; - } else if (cl == Float.TYPE) { - return FLOAT; - } else if (cl == Boolean.TYPE) { - return BOOLEAN; - } else if (cl == Byte.TYPE) { - return BYTE; - } else if (cl == Short.TYPE) { - return SHORT; - } else if (cl == Byte.TYPE) { - return BYTE; - } else if (cl == Long.TYPE) { - return LONG; - } else if (cl == Character.TYPE) { - return CHAR; - } else { - throw new IllegalStateException( - "Ooops, what primitive type is " + cl); - } - } else { // "Real" class - return new ObjectType(cl.getName()); - } - } - - /** - * Convert runtime java.lang.Class[] to BCEL Type objects. - * - * @param classes - * an array of runtime class objects - * @return array of corresponding Type objects - */ - public static Type[] getTypes(java.lang.Class[] classes) { - Type[] ret = new Type[classes.length]; - for (int i = 0; i < ret.length; i++) { - ret[i] = getType(classes[i]); - } - return ret; - } - - public static String getSignature(java.lang.reflect.Method meth) { - StringBuffer sb = new StringBuffer("("); - Class[] params = meth.getParameterTypes(); // avoid clone - for (int j = 0; j < params.length; j++) { - sb.append(getType(params[j]).getSignature()); - } - sb.append(")"); - sb.append(getType(meth.getReturnType()).getSignature()); - return sb.toString(); - } -} diff --git a/src/org/apache/bcel/generic/TypedInstruction.java b/src/org/apache/bcel/generic/TypedInstruction.java deleted file mode 100644 index 98d0e43..0000000 --- a/src/org/apache/bcel/generic/TypedInstruction.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Get the type associated with an instruction, int for ILOAD, or the type of - * the field of a PUTFIELD instruction, e.g.. - * - * @version $Id: TypedInstruction.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface TypedInstruction { - - public Type getType(ConstantPoolGen cpg); -} diff --git a/src/org/apache/bcel/generic/UnconditionalBranch.java b/src/org/apache/bcel/generic/UnconditionalBranch.java deleted file mode 100644 index 74266b7..0000000 --- a/src/org/apache/bcel/generic/UnconditionalBranch.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denotes an instruction to perform an unconditional branch, i.e., GOTO, JSR. - * - * @version $Id: UnconditionalBranch.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * - * @see GOTO - * @see JSR - */ -public interface UnconditionalBranch { -} diff --git a/src/org/apache/bcel/generic/VariableLengthInstruction.java b/src/org/apache/bcel/generic/VariableLengthInstruction.java deleted file mode 100644 index f05aa29..0000000 --- a/src/org/apache/bcel/generic/VariableLengthInstruction.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Denotes an instruction to be a variable length instruction, such as GOTO, - * JSR, LOOKUPSWITCH and TABLESWITCH. - * - * @version $Id: VariableLengthInstruction.java 386056 2006-03-15 11:31:56Z - * tcurdt $ - * @author M. Dahm - * - * @see GOTO - * @see JSR - * @see LOOKUPSWITCH - * @see TABLESWITCH - */ -public interface VariableLengthInstruction { -} diff --git a/src/org/apache/bcel/generic/Visitor.java b/src/org/apache/bcel/generic/Visitor.java deleted file mode 100644 index e2588e2..0000000 --- a/src/org/apache/bcel/generic/Visitor.java +++ /dev/null @@ -1,388 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.generic; - -/** - * Interface implementing the Visitor pattern programming style. I.e., a class - * that implements this interface can handle all types of instructions with the - * properly typed methods just by calling the accept() method. - * - * @version $Id: Visitor.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public interface Visitor { - - public void visitStackInstruction(StackInstruction obj); - - public void visitLocalVariableInstruction(LocalVariableInstruction obj); - - public void visitBranchInstruction(BranchInstruction obj); - - public void visitLoadClass(LoadClass obj); - - public void visitFieldInstruction(FieldInstruction obj); - - public void visitIfInstruction(IfInstruction obj); - - public void visitConversionInstruction(ConversionInstruction obj); - - public void visitPopInstruction(PopInstruction obj); - - public void visitStoreInstruction(StoreInstruction obj); - - public void visitTypedInstruction(TypedInstruction obj); - - public void visitSelect(Select obj); - - public void visitJsrInstruction(JsrInstruction obj); - - public void visitGotoInstruction(GotoInstruction obj); - - public void visitUnconditionalBranch(UnconditionalBranch obj); - - public void visitPushInstruction(PushInstruction obj); - - public void visitArithmeticInstruction(ArithmeticInstruction obj); - - public void visitCPInstruction(CPInstruction obj); - - public void visitInvokeInstruction(InvokeInstruction obj); - - public void visitArrayInstruction(ArrayInstruction obj); - - public void visitAllocationInstruction(AllocationInstruction obj); - - public void visitReturnInstruction(ReturnInstruction obj); - - public void visitFieldOrMethod(FieldOrMethod obj); - - public void visitConstantPushInstruction(ConstantPushInstruction obj); - - public void visitExceptionThrower(ExceptionThrower obj); - - public void visitLoadInstruction(LoadInstruction obj); - - public void visitVariableLengthInstruction(VariableLengthInstruction obj); - - public void visitStackProducer(StackProducer obj); - - public void visitStackConsumer(StackConsumer obj); - - public void visitACONST_NULL(ACONST_NULL obj); - - public void visitGETSTATIC(GETSTATIC obj); - - public void visitIF_ICMPLT(IF_ICMPLT obj); - - public void visitMONITOREXIT(MONITOREXIT obj); - - public void visitIFLT(IFLT obj); - - public void visitLSTORE(LSTORE obj); - - public void visitPOP2(POP2 obj); - - public void visitBASTORE(BASTORE obj); - - public void visitISTORE(ISTORE obj); - - public void visitCHECKCAST(CHECKCAST obj); - - public void visitFCMPG(FCMPG obj); - - public void visitI2F(I2F obj); - - public void visitATHROW(ATHROW obj); - - public void visitDCMPL(DCMPL obj); - - public void visitARRAYLENGTH(ARRAYLENGTH obj); - - public void visitDUP(DUP obj); - - public void visitINVOKESTATIC(INVOKESTATIC obj); - - public void visitLCONST(LCONST obj); - - public void visitDREM(DREM obj); - - public void visitIFGE(IFGE obj); - - public void visitCALOAD(CALOAD obj); - - public void visitLASTORE(LASTORE obj); - - public void visitI2D(I2D obj); - - public void visitDADD(DADD obj); - - public void visitINVOKESPECIAL(INVOKESPECIAL obj); - - public void visitIAND(IAND obj); - - public void visitPUTFIELD(PUTFIELD obj); - - public void visitILOAD(ILOAD obj); - - public void visitDLOAD(DLOAD obj); - - public void visitDCONST(DCONST obj); - - public void visitNEW(NEW obj); - - public void visitIFNULL(IFNULL obj); - - public void visitLSUB(LSUB obj); - - public void visitL2I(L2I obj); - - public void visitISHR(ISHR obj); - - public void visitTABLESWITCH(TABLESWITCH obj); - - public void visitIINC(IINC obj); - - public void visitDRETURN(DRETURN obj); - - public void visitFSTORE(FSTORE obj); - - public void visitDASTORE(DASTORE obj); - - public void visitIALOAD(IALOAD obj); - - public void visitDDIV(DDIV obj); - - public void visitIF_ICMPGE(IF_ICMPGE obj); - - public void visitLAND(LAND obj); - - public void visitIDIV(IDIV obj); - - public void visitLOR(LOR obj); - - public void visitCASTORE(CASTORE obj); - - public void visitFREM(FREM obj); - - public void visitLDC(LDC obj); - - public void visitBIPUSH(BIPUSH obj); - - public void visitDSTORE(DSTORE obj); - - public void visitF2L(F2L obj); - - public void visitFMUL(FMUL obj); - - public void visitLLOAD(LLOAD obj); - - public void visitJSR(JSR obj); - - public void visitFSUB(FSUB obj); - - public void visitSASTORE(SASTORE obj); - - public void visitALOAD(ALOAD obj); - - public void visitDUP2_X2(DUP2_X2 obj); - - public void visitRETURN(RETURN obj); - - public void visitDALOAD(DALOAD obj); - - public void visitSIPUSH(SIPUSH obj); - - public void visitDSUB(DSUB obj); - - public void visitL2F(L2F obj); - - public void visitIF_ICMPGT(IF_ICMPGT obj); - - public void visitF2D(F2D obj); - - public void visitI2L(I2L obj); - - public void visitIF_ACMPNE(IF_ACMPNE obj); - - public void visitPOP(POP obj); - - public void visitI2S(I2S obj); - - public void visitIFEQ(IFEQ obj); - - public void visitSWAP(SWAP obj); - - public void visitIOR(IOR obj); - - public void visitIREM(IREM obj); - - public void visitIASTORE(IASTORE obj); - - public void visitNEWARRAY(NEWARRAY obj); - - public void visitINVOKEINTERFACE(INVOKEINTERFACE obj); - - public void visitINEG(INEG obj); - - public void visitLCMP(LCMP obj); - - public void visitJSR_W(JSR_W obj); - - public void visitMULTIANEWARRAY(MULTIANEWARRAY obj); - - public void visitDUP_X2(DUP_X2 obj); - - public void visitSALOAD(SALOAD obj); - - public void visitIFNONNULL(IFNONNULL obj); - - public void visitDMUL(DMUL obj); - - public void visitIFNE(IFNE obj); - - public void visitIF_ICMPLE(IF_ICMPLE obj); - - public void visitLDC2_W(LDC2_W obj); - - public void visitGETFIELD(GETFIELD obj); - - public void visitLADD(LADD obj); - - public void visitNOP(NOP obj); - - public void visitFALOAD(FALOAD obj); - - public void visitINSTANCEOF(INSTANCEOF obj); - - public void visitIFLE(IFLE obj); - - public void visitLXOR(LXOR obj); - - public void visitLRETURN(LRETURN obj); - - public void visitFCONST(FCONST obj); - - public void visitIUSHR(IUSHR obj); - - public void visitBALOAD(BALOAD obj); - - public void visitDUP2(DUP2 obj); - - public void visitIF_ACMPEQ(IF_ACMPEQ obj); - - public void visitIMPDEP1(IMPDEP1 obj); - - public void visitMONITORENTER(MONITORENTER obj); - - public void visitLSHL(LSHL obj); - - public void visitDCMPG(DCMPG obj); - - public void visitD2L(D2L obj); - - public void visitIMPDEP2(IMPDEP2 obj); - - public void visitL2D(L2D obj); - - public void visitRET(RET obj); - - public void visitIFGT(IFGT obj); - - public void visitIXOR(IXOR obj); - - public void visitINVOKEVIRTUAL(INVOKEVIRTUAL obj); - - public void visitFASTORE(FASTORE obj); - - public void visitIRETURN(IRETURN obj); - - public void visitIF_ICMPNE(IF_ICMPNE obj); - - public void visitFLOAD(FLOAD obj); - - public void visitLDIV(LDIV obj); - - public void visitPUTSTATIC(PUTSTATIC obj); - - public void visitAALOAD(AALOAD obj); - - public void visitD2I(D2I obj); - - public void visitIF_ICMPEQ(IF_ICMPEQ obj); - - public void visitAASTORE(AASTORE obj); - - public void visitARETURN(ARETURN obj); - - public void visitDUP2_X1(DUP2_X1 obj); - - public void visitFNEG(FNEG obj); - - public void visitGOTO_W(GOTO_W obj); - - public void visitD2F(D2F obj); - - public void visitGOTO(GOTO obj); - - public void visitISUB(ISUB obj); - - public void visitF2I(F2I obj); - - public void visitDNEG(DNEG obj); - - public void visitICONST(ICONST obj); - - public void visitFDIV(FDIV obj); - - public void visitI2B(I2B obj); - - public void visitLNEG(LNEG obj); - - public void visitLREM(LREM obj); - - public void visitIMUL(IMUL obj); - - public void visitIADD(IADD obj); - - public void visitLSHR(LSHR obj); - - public void visitLOOKUPSWITCH(LOOKUPSWITCH obj); - - public void visitDUP_X1(DUP_X1 obj); - - public void visitFCMPL(FCMPL obj); - - public void visitI2C(I2C obj); - - public void visitLMUL(LMUL obj); - - public void visitLUSHR(LUSHR obj); - - public void visitISHL(ISHL obj); - - public void visitLALOAD(LALOAD obj); - - public void visitASTORE(ASTORE obj); - - public void visitANEWARRAY(ANEWARRAY obj); - - public void visitFRETURN(FRETURN obj); - - public void visitFADD(FADD obj); - - public void visitBREAKPOINT(BREAKPOINT obj); -} diff --git a/src/org/apache/bcel/generic/package.html b/src/org/apache/bcel/generic/package.html deleted file mode 100644 index 201d573..0000000 --- a/src/org/apache/bcel/generic/package.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - -

      -This package contains the "generic" part of the -Byte Code Engineering -Library, i.e., classes to dynamically modify class objects and -byte code instructions. -

      - - diff --git a/src/org/apache/bcel/package.html b/src/org/apache/bcel/package.html deleted file mode 100644 index aaded50..0000000 --- a/src/org/apache/bcel/package.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - -

      -This package contains basic classes for the -Byte Code Engineering Library - and constants defined by the - - JVM specification. -

      - - diff --git a/src/org/apache/bcel/util/BCELComparator.java b/src/org/apache/bcel/util/BCELComparator.java deleted file mode 100644 index 89770c1..0000000 --- a/src/org/apache/bcel/util/BCELComparator.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.util; - -/** - * Used for BCEL comparison strategy - * - * @author M. Dahm - * @version $Id: BCELComparator.java 410087 2006-05-29 12:12:19Z tcurdt $ - * @since 5.2 - */ -public interface BCELComparator { - - /** - * Compare two objects and return what THIS.equals(THAT) should return - * - * @param THIS - * @param THAT - * @return true if and only if THIS equals THAT - */ - public boolean equals(Object THIS, Object THAT); - - /** - * Return hashcode for THIS.hashCode() - * - * @param THIS - * @return hashcode for THIS.hashCode() - */ - public int hashCode(Object THIS); -} diff --git a/src/org/apache/bcel/util/BCELFactory.java b/src/org/apache/bcel/util/BCELFactory.java deleted file mode 100644 index ea52018..0000000 --- a/src/org/apache/bcel/util/BCELFactory.java +++ /dev/null @@ -1,336 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.util; - -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import org.apache.bcel.Constants; -import org.apache.bcel.classfile.Utility; -import org.apache.bcel.generic.AllocationInstruction; -import org.apache.bcel.generic.ArrayInstruction; -import org.apache.bcel.generic.ArrayType; -import org.apache.bcel.generic.BranchHandle; -import org.apache.bcel.generic.BranchInstruction; -import org.apache.bcel.generic.CHECKCAST; -import org.apache.bcel.generic.CPInstruction; -import org.apache.bcel.generic.CodeExceptionGen; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.ConstantPushInstruction; -import org.apache.bcel.generic.EmptyVisitor; -import org.apache.bcel.generic.FieldInstruction; -import org.apache.bcel.generic.IINC; -import org.apache.bcel.generic.INSTANCEOF; -import org.apache.bcel.generic.Instruction; -import org.apache.bcel.generic.InstructionConstants; -import org.apache.bcel.generic.InstructionHandle; -import org.apache.bcel.generic.InvokeInstruction; -import org.apache.bcel.generic.LDC; -import org.apache.bcel.generic.LDC2_W; -import org.apache.bcel.generic.LocalVariableInstruction; -import org.apache.bcel.generic.MULTIANEWARRAY; -import org.apache.bcel.generic.MethodGen; -import org.apache.bcel.generic.NEWARRAY; -import org.apache.bcel.generic.ObjectType; -import org.apache.bcel.generic.RET; -import org.apache.bcel.generic.ReturnInstruction; -import org.apache.bcel.generic.Select; -import org.apache.bcel.generic.Type; - -/** - * Factory creates il.append() statements, and sets instruction targets. A - * helper class for BCELifier. - * - * @see BCELifier - * @version $Id: BCELFactory.java 410087 2006-05-29 12:12:19Z tcurdt $ - * @author M. Dahm - */ -class BCELFactory extends EmptyVisitor { - - private MethodGen _mg; - private PrintWriter _out; - private ConstantPoolGen _cp; - - BCELFactory(MethodGen mg, PrintWriter out) { - _mg = mg; - _cp = mg.getConstantPool(); - _out = out; - } - - private Map branch_map = new HashMap(); // Map - - public void start() { - if (!_mg.isAbstract() && !_mg.isNative()) { - for (InstructionHandle ih = _mg.getInstructionList().getStart(); ih != null; ih = ih - .getNext()) { - Instruction i = ih.getInstruction(); - if (i instanceof BranchInstruction) { - branch_map.put(i, ih); // memorize container - } - if (ih.hasTargeters()) { - if (i instanceof BranchInstruction) { - _out.println(" InstructionHandle ih_" - + ih.getPosition() + ";"); - } else { - _out.print(" InstructionHandle ih_" - + ih.getPosition() + " = "); - } - } else { - _out.print(" "); - } - if (!visitInstruction(i)) { - i.accept(this); - } - } - updateBranchTargets(); - updateExceptionHandlers(); - } - } - - private boolean visitInstruction(Instruction i) { - short opcode = i.getOpcode(); - if ((InstructionConstants.INSTRUCTIONS[opcode] != null) - && !(i instanceof ConstantPushInstruction) - && !(i instanceof ReturnInstruction)) { // Handled below - _out.println("il.append(InstructionConstants." - + i.getName().toUpperCase(Locale.ENGLISH) + ");"); - return true; - } - return false; - } - - @Override - public void visitLocalVariableInstruction(LocalVariableInstruction i) { - short opcode = i.getOpcode(); - Type type = i.getType(_cp); - if (opcode == Constants.IINC) { - _out.println("il.append(new IINC(" + i.getIndex() + ", " - + ((IINC) i).getIncrement() + "));"); - } else { - String kind = (opcode < Constants.ISTORE) ? "Load" : "Store"; - _out.println("il.append(_factory.create" + kind + "(" - + BCELifier.printType(type) + ", " + i.getIndex() + "));"); - } - } - - @Override - public void visitArrayInstruction(ArrayInstruction i) { - short opcode = i.getOpcode(); - Type type = i.getType(_cp); - String kind = (opcode < Constants.IASTORE) ? "Load" : "Store"; - _out.println("il.append(_factory.createArray" + kind + "(" - + BCELifier.printType(type) + "));"); - } - - @Override - public void visitFieldInstruction(FieldInstruction i) { - short opcode = i.getOpcode(); - String class_name = i.getClassName(_cp); - String field_name = i.getFieldName(_cp); - Type type = i.getFieldType(_cp); - _out.println("il.append(_factory.createFieldAccess(\"" + class_name - + "\", \"" + field_name + "\", " + BCELifier.printType(type) - + ", " + "Constants." - + Constants.OPCODE_NAMES[opcode].toUpperCase(Locale.ENGLISH) - + "));"); - } - - @Override - public void visitInvokeInstruction(InvokeInstruction i) { - short opcode = i.getOpcode(); - String class_name = i.getClassName(_cp); - String method_name = i.getMethodName(_cp); - Type type = i.getReturnType(_cp); - Type[] arg_types = i.getArgumentTypes(_cp); - _out.println("il.append(_factory.createInvoke(\"" + class_name - + "\", \"" + method_name + "\", " + BCELifier.printType(type) - + ", " + BCELifier.printArgumentTypes(arg_types) + ", " - + "Constants." - + Constants.OPCODE_NAMES[opcode].toUpperCase(Locale.ENGLISH) - + "));"); - } - - @Override - public void visitAllocationInstruction(AllocationInstruction i) { - Type type; - if (i instanceof CPInstruction) { - type = ((CPInstruction) i).getType(_cp); - } else { - type = ((NEWARRAY) i).getType(); - } - short opcode = ((Instruction) i).getOpcode(); - int dim = 1; - switch (opcode) { - case Constants.NEW: - _out.println("il.append(_factory.createNew(\"" - + ((ObjectType) type).getClassName() + "\"));"); - break; - case Constants.MULTIANEWARRAY: - dim = ((MULTIANEWARRAY) i).getDimensions(); - case Constants.ANEWARRAY: - case Constants.NEWARRAY: - if (type instanceof ArrayType) { - type = ((ArrayType) type).getBasicType(); - } - _out.println("il.append(_factory.createNewArray(" - + BCELifier.printType(type) + ", (short) " + dim + "));"); - break; - default: - throw new RuntimeException("Oops: " + opcode); - } - } - - private void createConstant(Object value) { - String embed = value.toString(); - if (value instanceof String) { - embed = '"' + Utility.convertString(value.toString()) + '"'; - } else if (value instanceof Character) { - embed = "(char)0x" - + Integer.toHexString(((Character) value).charValue()); - } - _out.println("il.append(new PUSH(_cp, " + embed + "));"); - } - - @Override - public void visitLDC(LDC i) { - createConstant(i.getValue(_cp)); - } - - @Override - public void visitLDC2_W(LDC2_W i) { - createConstant(i.getValue(_cp)); - } - - @Override - public void visitConstantPushInstruction(ConstantPushInstruction i) { - createConstant(i.getValue()); - } - - @Override - public void visitINSTANCEOF(INSTANCEOF i) { - Type type = i.getType(_cp); - _out.println("il.append(new INSTANCEOF(_cp.addClass(" - + BCELifier.printType(type) + ")));"); - } - - @Override - public void visitCHECKCAST(CHECKCAST i) { - Type type = i.getType(_cp); - _out.println("il.append(_factory.createCheckCast(" - + BCELifier.printType(type) + "));"); - } - - @Override - public void visitReturnInstruction(ReturnInstruction i) { - Type type = i.getType(_cp); - _out.println("il.append(_factory.createReturn(" - + BCELifier.printType(type) + "));"); - } - - // Memorize BranchInstructions that need an update - private List branches = new ArrayList(); - - @Override - public void visitBranchInstruction(BranchInstruction bi) { - BranchHandle bh = (BranchHandle) branch_map.get(bi); - int pos = bh.getPosition(); - String name = bi.getName() + "_" + pos; - if (bi instanceof Select) { - Select s = (Select) bi; - branches.add(bi); - StringBuffer args = new StringBuffer("new int[] { "); - int[] matchs = s.getMatchs(); - for (int i = 0; i < matchs.length; i++) { - args.append(matchs[i]); - if (i < matchs.length - 1) { - args.append(", "); - } - } - args.append(" }"); - _out.print("Select " + name + " = new " - + bi.getName().toUpperCase(Locale.ENGLISH) + "(" + args - + ", new InstructionHandle[] { "); - for (int i = 0; i < matchs.length; i++) { - _out.print("null"); - if (i < matchs.length - 1) { - _out.print(", "); - } - } - _out.println(" }, null);"); - } else { - int t_pos = bh.getTarget().getPosition(); - String target; - if (pos > t_pos) { - target = "ih_" + t_pos; - } else { - branches.add(bi); - target = "null"; - } - _out.println(" BranchInstruction " + name - + " = _factory.createBranchInstruction(" + "Constants." - + bi.getName().toUpperCase(Locale.ENGLISH) + ", " + target - + ");"); - } - if (bh.hasTargeters()) { - _out.println(" ih_" + pos + " = il.append(" + name + ");"); - } else { - _out.println(" il.append(" + name + ");"); - } - } - - @Override - public void visitRET(RET i) { - _out.println("il.append(new RET(" + i.getIndex() + ")));"); - } - - private void updateBranchTargets() { - for (Iterator i = branches.iterator(); i.hasNext();) { - BranchInstruction bi = i.next(); - BranchHandle bh = (BranchHandle) branch_map.get(bi); - int pos = bh.getPosition(); - String name = bi.getName() + "_" + pos; - int t_pos = bh.getTarget().getPosition(); - _out.println(" " + name + ".setTarget(ih_" + t_pos + ");"); - if (bi instanceof Select) { - InstructionHandle[] ihs = ((Select) bi).getTargets(); - for (int j = 0; j < ihs.length; j++) { - t_pos = ihs[j].getPosition(); - _out.println(" " + name + ".setTarget(" + j + ", ih_" - + t_pos + ");"); - } - } - } - } - - private void updateExceptionHandlers() { - CodeExceptionGen[] handlers = _mg.getExceptionHandlers(); - for (int i = 0; i < handlers.length; i++) { - CodeExceptionGen h = handlers[i]; - String type = (h.getCatchType() == null) ? "null" : BCELifier - .printType(h.getCatchType()); - _out.println(" method.addExceptionHandler(" + "ih_" - + h.getStartPC().getPosition() + ", " + "ih_" - + h.getEndPC().getPosition() + ", " + "ih_" - + h.getHandlerPC().getPosition() + ", " + type + ");"); - } - } -} diff --git a/src/org/apache/bcel/util/BCELifier.java b/src/org/apache/bcel/util/BCELifier.java deleted file mode 100644 index a10b5da..0000000 --- a/src/org/apache/bcel/util/BCELifier.java +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.util; - -import java.io.OutputStream; -import java.io.PrintWriter; -import java.util.Locale; -import org.apache.bcel.Constants; -import org.apache.bcel.Repository; -import org.apache.bcel.classfile.ClassParser; -import org.apache.bcel.classfile.ConstantValue; -import org.apache.bcel.classfile.Field; -import org.apache.bcel.classfile.JavaClass; -import org.apache.bcel.classfile.Method; -import org.apache.bcel.classfile.Utility; -import org.apache.bcel.generic.ArrayType; -import org.apache.bcel.generic.ConstantPoolGen; -import org.apache.bcel.generic.MethodGen; -import org.apache.bcel.generic.Type; - -/** - * This class takes a given JavaClass object and converts it to a Java program - * that creates that very class using BCEL. This gives new users of BCEL a - * useful example showing how things are done with BCEL. It does not cover all - * features of BCEL, but tries to mimic hand-written code as close as possible. - * - * @version $Id: BCELifier.java 394939 2006-04-18 13:23:49Z tcurdt $ - * @author M. Dahm - */ -public class BCELifier extends org.apache.bcel.classfile.EmptyVisitor { - - private static final int FLAG_FOR_UNKNOWN = -1; - private static final int FLAG_FOR_CLASS = 0; - private static final int FLAG_FOR_METHOD = 1; - private JavaClass _clazz; - private PrintWriter _out; - private ConstantPoolGen _cp; - - /** - * @param clazz - * Java class to "decompile" - * @param out - * where to output Java program - */ - public BCELifier(JavaClass clazz, OutputStream out) { - _clazz = clazz; - _out = new PrintWriter(out); - _cp = new ConstantPoolGen(_clazz.getConstantPool()); - } - - /** - * Start Java code generation - */ - public void start() { - visitJavaClass(_clazz); - _out.flush(); - } - - @Override - public void visitJavaClass(JavaClass clazz) { - String class_name = clazz.getClassName(); - String super_name = clazz.getSuperclassName(); - String package_name = clazz.getPackageName(); - String inter = Utility.printArray(clazz.getInterfaceNames(), false, - true); - if (!"".equals(package_name)) { - class_name = class_name.substring(package_name.length() + 1); - _out.println("package " + package_name + ";"); - _out.println(); - } - _out.println("import org.apache.bcel.generic.*;"); - _out.println("import org.apache.bcel.classfile.*;"); - _out.println("import org.apache.bcel.*;"); - _out.println("import java.io.*;"); - _out.println(); - _out.println("public class " + class_name - + "Creator implements Constants {"); - _out.println(" private InstructionFactory _factory;"); - _out.println(" private ConstantPoolGen _cp;"); - _out.println(" private ClassGen _cg;"); - _out.println(); - _out.println(" public " + class_name + "Creator() {"); - _out.println(" _cg = new ClassGen(\"" - + (("".equals(package_name)) ? class_name : package_name + "." - + class_name) + "\", \"" + super_name + "\", " + "\"" - + clazz.getSourceFileName() + "\", " - + printFlags(clazz.getAccessFlags(), FLAG_FOR_CLASS) + ", " - + "new String[] { " + inter + " });"); - _out.println(); - _out.println(" _cp = _cg.getConstantPool();"); - _out.println(" _factory = new InstructionFactory(_cg, _cp);"); - _out.println(" }"); - _out.println(); - printCreate(); - Field[] fields = clazz.getFields(); - if (fields.length > 0) { - _out.println(" private void createFields() {"); - _out.println(" FieldGen field;"); - for (int i = 0; i < fields.length; i++) { - fields[i].accept(this); - } - _out.println(" }"); - _out.println(); - } - Method[] methods = clazz.getMethods(); - for (int i = 0; i < methods.length; i++) { - _out.println(" private void createMethod_" + i + "() {"); - methods[i].accept(this); - _out.println(" }"); - _out.println(); - } - printMain(); - _out.println("}"); - } - - private void printCreate() { - _out.println(" public void create(OutputStream out) throws IOException {"); - Field[] fields = _clazz.getFields(); - if (fields.length > 0) { - _out.println(" createFields();"); - } - Method[] methods = _clazz.getMethods(); - for (int i = 0; i < methods.length; i++) { - _out.println(" createMethod_" + i + "();"); - } - _out.println(" _cg.getJavaClass().dump(out);"); - _out.println(" }"); - _out.println(); - } - - private void printMain() { - String class_name = _clazz.getClassName(); - _out.println(" public static void main(String[] args) throws Exception {"); - _out.println(" " + class_name + "Creator creator = new " - + class_name + "Creator();"); - _out.println(" creator.create(new FileOutputStream(\"" + class_name - + ".class\"));"); - _out.println(" }"); - } - - @Override - public void visitField(Field field) { - _out.println(); - _out.println(" field = new FieldGen(" - + printFlags(field.getAccessFlags()) + ", " - + printType(field.getSignature()) + ", \"" + field.getName() - + "\", _cp);"); - ConstantValue cv = field.getConstantValue(); - if (cv != null) { - String value = cv.toString(); - _out.println(" field.setInitValue(" + value + ")"); - } - _out.println(" _cg.addField(field.getField());"); - } - - @Override - public void visitMethod(Method method) { - MethodGen mg = new MethodGen(method, _clazz.getClassName(), _cp); - Type result_type = mg.getReturnType(); - Type[] arg_types = mg.getArgumentTypes(); - _out.println(" InstructionList il = new InstructionList();"); - _out.println(" MethodGen method = new MethodGen(" - + printFlags(method.getAccessFlags(), FLAG_FOR_METHOD) + ", " - + printType(result_type) + ", " + printArgumentTypes(arg_types) - + ", " + "new String[] { " - + Utility.printArray(mg.getArgumentNames(), false, true) - + " }, \"" + method.getName() + "\", \"" - + _clazz.getClassName() + "\", il, _cp);"); - _out.println(); - BCELFactory factory = new BCELFactory(mg, _out); - factory.start(); - _out.println(" method.setMaxStack();"); - _out.println(" method.setMaxLocals();"); - _out.println(" _cg.addMethod(method.getMethod());"); - _out.println(" il.dispose();"); - } - - static String printFlags(int flags) { - return printFlags(flags, FLAG_FOR_UNKNOWN); - } - - static String printFlags(int flags, int reason) { - if (flags == 0) { - return "0"; - } - StringBuffer buf = new StringBuffer(); - for (int i = 0, pow = 1; pow <= Constants.MAX_ACC_FLAG; i++) { - if ((flags & pow) != 0) { - if ((pow == Constants.ACC_SYNCHRONIZED) - && (reason == FLAG_FOR_CLASS)) { - buf.append("ACC_SUPER | "); - } else if ((pow == Constants.ACC_VOLATILE) - && (reason == FLAG_FOR_METHOD)) { - buf.append("ACC_BRIDGE | "); - } else if ((pow == Constants.ACC_TRANSIENT) - && (reason == FLAG_FOR_METHOD)) { - buf.append("ACC_VARARGS | "); - } else { - buf.append("ACC_") - .append(Constants.ACCESS_NAMES[i] - .toUpperCase(Locale.ENGLISH)).append(" | "); - } - } - pow <<= 1; - } - String str = buf.toString(); - return str.substring(0, str.length() - 3); - } - - static String printArgumentTypes(Type[] arg_types) { - if (arg_types.length == 0) { - return "Type.NO_ARGS"; - } - StringBuffer args = new StringBuffer(); - for (int i = 0; i < arg_types.length; i++) { - args.append(printType(arg_types[i])); - if (i < arg_types.length - 1) { - args.append(", "); - } - } - return "new Type[] { " + args.toString() + " }"; - } - - static String printType(Type type) { - return printType(type.getSignature()); - } - - static String printType(String signature) { - Type type = Type.getType(signature); - byte t = type.getType(); - if (t <= Constants.T_VOID) { - return "Type." - + Constants.TYPE_NAMES[t].toUpperCase(Locale.ENGLISH); - } else if (type.toString().equals("java.lang.String")) { - return "Type.STRING"; - } else if (type.toString().equals("java.lang.Object")) { - return "Type.OBJECT"; - } else if (type.toString().equals("java.lang.StringBuffer")) { - return "Type.STRINGBUFFER"; - } else if (type instanceof ArrayType) { - ArrayType at = (ArrayType) type; - return "new ArrayType(" + printType(at.getBasicType()) + ", " - + at.getDimensions() + ")"; - } else { - return "new ObjectType(\"" - + Utility.signatureToString(signature, false) + "\")"; - } - } - - /** - * Default main method - */ - public static void main(String[] argv) throws Exception { - JavaClass java_class; - String name = argv[0]; - if ((java_class = Repository.lookupClass(name)) == null) { - java_class = new ClassParser(name).parse(); // May throw IOException - } - BCELifier bcelifier = new BCELifier(java_class, System.out); - bcelifier.start(); - } -} diff --git a/src/org/apache/bcel/util/ByteSequence.java b/src/org/apache/bcel/util/ByteSequence.java deleted file mode 100644 index 918827d..0000000 --- a/src/org/apache/bcel/util/ByteSequence.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.util; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; - -/** - * Utility class that implements a sequence of bytes which can be read via the - * `readByte()' method. This is used to implement a wrapper for the Java byte - * code stream to gain some more readability. - * - * @version $Id: ByteSequence.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public final class ByteSequence extends DataInputStream { - - private ByteArrayStream byte_stream; - - public ByteSequence(byte[] bytes) { - super(new ByteArrayStream(bytes)); - byte_stream = (ByteArrayStream) in; - } - - public final int getIndex() { - return byte_stream.getPosition(); - } - - final void unreadByte() { - byte_stream.unreadByte(); - } - - private static final class ByteArrayStream extends ByteArrayInputStream { - - ByteArrayStream(byte[] bytes) { - super(bytes); - } - - final int getPosition() { - return pos; - } // is protected in ByteArrayInputStream - - final void unreadByte() { - if (pos > 0) { - pos--; - } - } - } -} diff --git a/src/org/apache/bcel/util/ClassPath.java b/src/org/apache/bcel/util/ClassPath.java deleted file mode 100644 index 76c42b2..0000000 --- a/src/org/apache/bcel/util/ClassPath.java +++ /dev/null @@ -1,425 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.util; - -import java.io.DataInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FilenameFilter; -import java.io.IOException; -import java.io.InputStream; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.StringTokenizer; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -/** - * Responsible for loading (class) files from the CLASSPATH. Inspired by - * sun.tools.ClassPath. - * - * @version $Id: ClassPath.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ClassPath implements Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - public static final ClassPath SYSTEM_CLASS_PATH = new ClassPath(); - private PathEntry[] paths; - private String class_path; - - /** - * Search for classes in given path. - */ - public ClassPath(String class_path) { - this.class_path = class_path; - List vec = new ArrayList(); - for (StringTokenizer tok = new StringTokenizer(class_path, - System.getProperty("path.separator")); tok.hasMoreTokens();) { - String path = tok.nextToken(); - if (!path.equals("")) { - File file = new File(path); - try { - if (file.exists()) { - if (file.isDirectory()) { - vec.add(new Dir(path)); - } else { - vec.add(new Zip(new ZipFile(file))); - } - } - } catch (IOException e) { - System.err - .println("CLASSPATH component " + file + ": " + e); - } - } - } - paths = new PathEntry[vec.size()]; - vec.toArray(paths); - } - - /** - * Search for classes in CLASSPATH. - * - * @deprecated Use SYSTEM_CLASS_PATH constant - */ - @Deprecated - public ClassPath() { - this(getClassPath()); - } - - /** - * @return used class path string - */ - @Override - public String toString() { - return class_path; - } - - @Override - public int hashCode() { - return class_path.hashCode(); - } - - @Override - public boolean equals(Object o) { - if (o instanceof ClassPath) { - return class_path.equals(((ClassPath) o).class_path); - } - return false; - } - - private static final void getPathComponents(String path, List list) { - if (path != null) { - StringTokenizer tok = new StringTokenizer(path, File.pathSeparator); - while (tok.hasMoreTokens()) { - String name = tok.nextToken(); - File file = new File(name); - if (file.exists()) { - list.add(name); - } - } - } - } - - /** - * Checks for class path components in the following properties: - * "java.class.path", "sun.boot.class.path", "java.ext.dirs" - * - * @return class path as used by default by BCEL - */ - public static final String getClassPath() { - String class_path = System.getProperty("java.class.path"); - String boot_path = System.getProperty("sun.boot.class.path"); - String ext_path = System.getProperty("java.ext.dirs"); - List list = new ArrayList(); - getPathComponents(class_path, list); - getPathComponents(boot_path, list); - List dirs = new ArrayList(); - getPathComponents(ext_path, dirs); - for (Iterator e = dirs.iterator(); e.hasNext();) { - File ext_dir = new File(e.next()); - String[] extensions = ext_dir.list(new FilenameFilter() { - - @Override - public boolean accept(File dir, String name) { - name = name.toLowerCase(Locale.ENGLISH); - return name.endsWith(".zip") || name.endsWith(".jar"); - } - }); - if (extensions != null) { - for (int i = 0; i < extensions.length; i++) { - list.add(ext_dir.getPath() + File.separatorChar - + extensions[i]); - } - } - } - StringBuffer buf = new StringBuffer(); - for (Iterator e = list.iterator(); e.hasNext();) { - buf.append(e.next()); - if (e.hasNext()) { - buf.append(File.pathSeparatorChar); - } - } - return buf.toString().intern(); - } - - /** - * @param name - * fully qualified class name, e.g. java.lang.String - * @return input stream for class - */ - public InputStream getInputStream(String name) throws IOException { - return getInputStream(name.replace('.', '/'), ".class"); - } - - /** - * Return stream for class or resource on CLASSPATH. - * - * @param name - * fully qualified file name, e.g. java/lang/String - * @param suffix - * file name ends with suff, e.g. .java - * @return input stream for file on class path - */ - public InputStream getInputStream(String name, String suffix) - throws IOException { - InputStream is = null; - try { - is = getClass().getClassLoader().getResourceAsStream(name + suffix); - } catch (Exception e) { - } - if (is != null) { - return is; - } - return getClassFile(name, suffix).getInputStream(); - } - - /** - * @param name - * fully qualified file name, e.g. java/lang/String - * @param suffix - * file name ends with suff, e.g. .java - * @return class file for the java class - */ - public ClassFile getClassFile(String name, String suffix) - throws IOException { - for (int i = 0; i < paths.length; i++) { - ClassFile cf; - if ((cf = paths[i].getClassFile(name, suffix)) != null) { - return cf; - } - } - throw new IOException("Couldn't find: " + name + suffix); - } - - /** - * @param name - * fully qualified class name, e.g. java.lang.String - * @return input stream for class - */ - public ClassFile getClassFile(String name) throws IOException { - return getClassFile(name, ".class"); - } - - /** - * @param name - * fully qualified file name, e.g. java/lang/String - * @param suffix - * file name ends with suffix, e.g. .java - * @return byte array for file on class path - */ - public byte[] getBytes(String name, String suffix) throws IOException { - DataInputStream dis = null; - try { - InputStream is = getInputStream(name, suffix); - if (is == null) { - throw new IOException("Couldn't find: " + name + suffix); - } - dis = new DataInputStream(is); - byte[] bytes = new byte[is.available()]; - dis.readFully(bytes); - return bytes; - } finally { - if (dis != null) { - dis.close(); - } - } - } - - /** - * @return byte array for class - */ - public byte[] getBytes(String name) throws IOException { - return getBytes(name, ".class"); - } - - /** - * @param name - * name of file to search for, e.g. java/lang/String.java - * @return full (canonical) path for file - */ - public String getPath(String name) throws IOException { - int index = name.lastIndexOf('.'); - String suffix = ""; - if (index > 0) { - suffix = name.substring(index); - name = name.substring(0, index); - } - return getPath(name, suffix); - } - - /** - * @param name - * name of file to search for, e.g. java/lang/String - * @param suffix - * file name suffix, e.g. .java - * @return full (canonical) path for file, if it exists - */ - public String getPath(String name, String suffix) throws IOException { - return getClassFile(name, suffix).getPath(); - } - - private static abstract class PathEntry implements Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - - abstract ClassFile getClassFile(String name, String suffix) - throws IOException; - } - - /** - * Contains information about file/ZIP entry of the Java class. - */ - public interface ClassFile { - - /** - * @return input stream for class file. - */ - public abstract InputStream getInputStream() throws IOException; - - /** - * @return canonical path to class file. - */ - public abstract String getPath(); - - /** - * @return base path of found class, i.e. class is contained relative to - * that path, which may either denote a directory, or zip file - */ - public abstract String getBase(); - - /** - * @return modification time of class file. - */ - public abstract long getTime(); - - /** - * @return size of class file. - */ - public abstract long getSize(); - } - - private static class Dir extends PathEntry { - - /** - * - */ - private static final long serialVersionUID = 1L; - private String dir; - - Dir(String d) { - dir = d; - } - - @Override - ClassFile getClassFile(String name, String suffix) throws IOException { - final File file = new File(dir + File.separatorChar - + name.replace('.', File.separatorChar) + suffix); - return file.exists() ? new ClassFile() { - - @Override - public InputStream getInputStream() throws IOException { - return new FileInputStream(file); - } - - @Override - public String getPath() { - try { - return file.getCanonicalPath(); - } catch (IOException e) { - return null; - } - } - - @Override - public long getTime() { - return file.lastModified(); - } - - @Override - public long getSize() { - return file.length(); - } - - @Override - public String getBase() { - return dir; - } - } : null; - } - - @Override - public String toString() { - return dir; - } - } - - private static class Zip extends PathEntry { - - /** - * - */ - private static final long serialVersionUID = 1L; - private ZipFile zip; - - Zip(ZipFile z) { - zip = z; - } - - @Override - ClassFile getClassFile(String name, String suffix) throws IOException { - final ZipEntry entry = zip - .getEntry(name.replace('.', '/') + suffix); - return (entry != null) ? new ClassFile() { - - @Override - public InputStream getInputStream() throws IOException { - return zip.getInputStream(entry); - } - - @Override - public String getPath() { - return entry.toString(); - } - - @Override - public long getTime() { - return entry.getTime(); - } - - @Override - public long getSize() { - return entry.getSize(); - } - - @Override - public String getBase() { - return zip.getName(); - } - } : null; - } - } -} diff --git a/src/org/apache/bcel/util/ClassQueue.java b/src/org/apache/bcel/util/ClassQueue.java deleted file mode 100644 index 8b761a4..0000000 --- a/src/org/apache/bcel/util/ClassQueue.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.util; - -import java.util.LinkedList; -import org.apache.bcel.classfile.JavaClass; - -/** - * Utility class implementing a (typesafe) queue of JavaClass objects. - * - * @version $Id: ClassQueue.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - */ -public class ClassQueue implements java.io.Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - protected LinkedList vec = new LinkedList(); - - public void enqueue(JavaClass clazz) { - vec.addLast(clazz); - } - - public JavaClass dequeue() { - return vec.removeFirst(); - } - - public boolean empty() { - return vec.isEmpty(); - } - - @Override - public String toString() { - return vec.toString(); - } -} diff --git a/src/org/apache/bcel/util/Repository.java b/src/org/apache/bcel/util/Repository.java deleted file mode 100644 index 3d33a7c..0000000 --- a/src/org/apache/bcel/util/Repository.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.util; - -import org.apache.bcel.classfile.JavaClass; - -/** - * Abstract definition of a class repository. Instances may be used to load - * classes from different sources and may be used in the - * Repository.setRepository method. - * - * @see org.apache.bcel.Repository - * @version $Id: Repository.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @author David Dixon-Peugh - */ -public interface Repository extends java.io.Serializable { - - /** - * Store the provided class under "clazz.getClassName()" - */ - public void storeClass(JavaClass clazz); - - /** - * Remove class from repository - */ - public void removeClass(JavaClass clazz); - - /** - * Find the class with the name provided, if the class isn't there, return - * NULL. - */ - public JavaClass findClass(String className); - - /** - * Find the class with the name provided, if the class isn't there, make an - * attempt to load it. - */ - public JavaClass loadClass(String className) - throws java.lang.ClassNotFoundException; - - /** - * Find the JavaClass instance for the given run-time class object - */ - public JavaClass loadClass(Class clazz) - throws java.lang.ClassNotFoundException; - - /** - * Clear all entries from cache. - */ - public void clear(); - - /** - * Get the ClassPath associated with this Repository - */ - public ClassPath getClassPath(); -} diff --git a/src/org/apache/bcel/util/SyntheticRepository.java b/src/org/apache/bcel/util/SyntheticRepository.java deleted file mode 100644 index 784fa05..0000000 --- a/src/org/apache/bcel/util/SyntheticRepository.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.apache.bcel.util; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.ref.SoftReference; -import java.util.HashMap; -import java.util.Map; - -import org.apache.bcel.classfile.ClassParser; -import org.apache.bcel.classfile.JavaClass; - -/** - * This repository is used in situations where a Class is created outside the - * realm of a ClassLoader. Classes are loaded from the file systems using the - * paths specified in the given class path. By default, this is the value - * returned by ClassPath.getClassPath().
      - * It is designed to be used as a singleton, however it can also be used with - * custom classpaths. - * - * /** Abstract definition of a class repository. Instances may be used to load - * classes from different sources and may be used in the - * Repository.setRepository method. - * - * @see org.apache.bcel.Repository - * - * @version $Id: SyntheticRepository.java 386056 2006-03-15 11:31:56Z tcurdt $ - * @author M. Dahm - * @author David Dixon-Peugh - */ -public class SyntheticRepository implements Repository { - - /** - * - */ - private static final long serialVersionUID = 1L; - private static Map _instances = new HashMap(); // CLASSPATH - // X - // REPOSITORY - private ClassPath _path = null; - private Map> _loadedClasses = new HashMap>(); // CLASSNAME - // X - // JAVACLASS - - private SyntheticRepository(ClassPath path) { - _path = path; - } - - public static SyntheticRepository getInstance() { - return getInstance(ClassPath.SYSTEM_CLASS_PATH); - } - - public static SyntheticRepository getInstance(ClassPath classPath) { - SyntheticRepository rep = _instances.get(classPath); - if (rep == null) { - rep = new SyntheticRepository(classPath); - _instances.put(classPath, rep); - } - return rep; - } - - /** - * Store a new JavaClass instance into this Repository. - */ - @Override - public void storeClass(JavaClass clazz) { - _loadedClasses.put(clazz.getClassName(), new SoftReference( - clazz)); - clazz.setRepository(this); - } - - /** - * Remove class from repository - */ - @Override - public void removeClass(JavaClass clazz) { - _loadedClasses.remove(clazz.getClassName()); - } - - /** - * Find an already defined (cached) JavaClass object by name. - */ - @Override - public JavaClass findClass(String className) { - SoftReference ref = _loadedClasses.get(className); - if (ref == null) { - return null; - } - return (JavaClass) ref.get(); - } - - /** - * Find a JavaClass object by name. If it is already in this Repository, the - * Repository version is returned. Otherwise, the Repository's classpath is - * searched for the class (and it is added to the Repository if found). - * - * @param className - * the name of the class - * @return the JavaClass object - * @throws ClassNotFoundException - * if the class is not in the Repository, and could not be found - * on the classpath - */ - @Override - public JavaClass loadClass(String className) throws ClassNotFoundException { - if (className == null || className.equals("")) { - throw new IllegalArgumentException("Invalid class name " - + className); - } - className = className.replace('/', '.'); // Just in case, canonical form - JavaClass clazz = findClass(className); - if (clazz != null) { - return clazz; - } - try { - return loadClass(_path.getInputStream(className), className); - } catch (IOException e) { - throw new ClassNotFoundException( - "Exception while looking for class " + className + ": " - + e.toString()); - } - } - - /** - * Find the JavaClass object for a runtime Class object. If a class with the - * same name is already in this Repository, the Repository version is - * returned. Otherwise, getResourceAsStream() is called on the Class object - * to find the class's representation. If the representation is found, it is - * added to the Repository. - * - * @see Class - * @param clazz - * the runtime Class object - * @return JavaClass object for given runtime class - * @throws ClassNotFoundException - * if the class is not in the Repository, and its representation - * could not be found - */ - @Override - public JavaClass loadClass(Class clazz) throws ClassNotFoundException { - String className = clazz.getName(); - JavaClass repositoryClass = findClass(className); - if (repositoryClass != null) { - return repositoryClass; - } - String name = className; - int i = name.lastIndexOf('.'); - if (i > 0) { - name = name.substring(i + 1); - } - return loadClass(clazz.getResourceAsStream(name + ".class"), className); - } - - private JavaClass loadClass(InputStream is, String className) - throws ClassNotFoundException { - try { - if (is != null) { - ClassParser parser = new ClassParser(is, className); - JavaClass clazz = parser.parse(); - storeClass(clazz); - return clazz; - } - } catch (IOException e) { - throw new ClassNotFoundException( - "Exception while looking for class " + className + ": " - + e.toString()); - } - throw new ClassNotFoundException("SyntheticRepository could not load " - + className); - } - - /** - * ClassPath associated with the Repository. - */ - @Override - public ClassPath getClassPath() { - return _path; - } - - /** - * Clear all entries from cache. - */ - @Override - public void clear() { - _loadedClasses.clear(); - } -} diff --git a/src/org/apache/bcel/util/package.html b/src/org/apache/bcel/util/package.html deleted file mode 100644 index a58b20f..0000000 --- a/src/org/apache/bcel/util/package.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - -

      -This package contains utility classes for the -Byte Code Engineering -Library, namely: -

      -

      -

        -
      • Collection classes for JavaClass objects
      • -
      • A converter for class files to HTML
      • -
      • A tool to find instructions patterns via regular expressions
      • -
      • A class to find classes as defined in the CLASSPATH
      • -
      • A class loader that allows to create classes at run time
      • -
      - -

      - -