Java 类org.apache.bcel.generic.TABLESWITCH 实例源码

项目:findbugs-all-the-bugs    文件:DuplicateBranches.java   
private byte[] getCodeBytes(Method m, int start, int end) {
    byte[] code = m.getCode().getCode();
    byte[] bytes = new byte[end - start];
    System.arraycopy(code, start, bytes, 0, end - start);

    try {
        ByteSequence sequence = new ByteSequence(code);
        while ((sequence.available() > 0) && (sequence.getIndex() < start)) {
            Instruction.readInstruction(sequence);
        }

        int pos;
        while (sequence.available() > 0 && ((pos = sequence.getIndex()) < end)) {
            Instruction ins = Instruction.readInstruction(sequence);
            if ((ins instanceof BranchInstruction) && !(ins instanceof TABLESWITCH) && !(ins instanceof LOOKUPSWITCH)) {
                BranchInstruction bi = (BranchInstruction) ins;
                int offset = bi.getIndex();
                int target = offset + pos;
                if (target >= end) { // or target < start ??
                    byte hiByte = (byte) ((target >> 8) & 0x000000FF);
                    byte loByte = (byte) (target & 0x000000FF);
                    bytes[pos + bi.getLength() - 2 - start] = hiByte;
                    bytes[pos + bi.getLength() - 1 - start] = loByte;
                }
            }
        }
    } catch (IOException ioe) {
    }

    return bytes;
}
项目:FindBug-for-Domino-Designer    文件:DuplicateBranches.java   
private byte[] getCodeBytes(Method m, int start, int end) {
    byte[] code = m.getCode().getCode();
    byte[] bytes = new byte[end - start];
    System.arraycopy(code, start, bytes, 0, end - start);

    try {
        ByteSequence sequence = new ByteSequence(code);
        while ((sequence.available() > 0) && (sequence.getIndex() < start)) {
            Instruction.readInstruction(sequence);
        }

        int pos;
        while (sequence.available() > 0 && ((pos = sequence.getIndex()) < end)) {
            Instruction ins = Instruction.readInstruction(sequence);
            if ((ins instanceof BranchInstruction) && !(ins instanceof TABLESWITCH) && !(ins instanceof LOOKUPSWITCH)) {
                BranchInstruction bi = (BranchInstruction) ins;
                int offset = bi.getIndex();
                int target = offset + pos;
                if (target >= end) { // or target < start ??
                    byte hiByte = (byte) ((target >> 8) & 0x000000FF);
                    byte loByte = (byte) (target & 0x000000FF);
                    bytes[pos + bi.getLength() - 2 - start] = hiByte;
                    bytes[pos + bi.getLength() - 1 - start] = loByte;
                }
            }
        }
    } catch (IOException ioe) {
    }

    return bytes;
}
项目:VestaClient    文件:Pass3aVerifier.java   
/** Checks if the constraints of operands of the said instruction(s) are satisfied. */
public void visitTABLESWITCH(TABLESWITCH o){    
    // "high" must be >= "low". We cannot check this, as BCEL hides
    // it from us.
}
项目:eclectic    文件:DecompilingVisitor.java   
public void visitCode(Code code) {
    MethodGen mg = new MethodGen(_method, clazzname, cp);
    InstructionList il = mg.getInstructionList();
    InstructionHandle[] ihs = il.getInstructionHandles();

    LocalVariableGen[] lvs = mg.getLocalVariables();

    CodeExceptionGen[] ehs = mg.getExceptionHandlers();

    for (int i = 0; i < lvs.length; i++) {
        LocalVariableGen l = lvs[i];
        out.println("    // local variable " + l.getIndex() + " is \"" + l.getName()
                + "\" " + l.getType() + " from "
                + l.getStart().getPosition() + " to "
                + l.getEnd().getPosition());
    }

    out.print("\n");

    for (int i = 0; i < ihs.length; i++) {
        InstructionHandle ih = ihs[i];
        Instruction inst = ih.getInstruction();

        out.print("    " + ih.getPosition());

        if (inst instanceof BranchInstruction) {
            if (inst instanceof Select) { // Special cases LOOKUPSWITCH and
                                          // TABLESWITCH
                Select s = (Select) inst;
                int[] matchs = s.getMatchs();
                InstructionHandle[] targets = s.getTargets();

                if (s instanceof TABLESWITCH) {
                    out.println("  tableswitch " + matchs[0] + " "
                            + matchs[matchs.length - 1]);

                    for (int j = 0; j < targets.length; j++)
                        out.println("        " + targets[j].getPosition());

                } else { // LOOKUPSWITCH
                    out.println("  lookupswitch ");

                    for (int j = 0; j < targets.length; j++)
                        out.println("        " + matchs[j] + " : "
                                + targets[j].getPosition());
                }

                out.println("        default: " + s.getTarget()); // Applies
                                                                  // for
                                                                  // both
            } else {
                BranchInstruction bi = (BranchInstruction) inst;
                ih = bi.getTarget();
                //str = get(ih);
                out.println("  " + Constants.OPCODE_NAMES[bi.getOpcode()]
                        + " " + ih);
            }
        } else
            out.println("  " + inst.toString(cp.getConstantPool()));
    }

    out.print("\n");

    for (int i = 0; i < ehs.length; i++) {
        CodeExceptionGen c = ehs[i];
        ObjectType caught = c.getCatchType();
        String class_name = (caught == null) ? // catch any exception, used
                                               // when compiling finally
                "all" : caught.getClassName().replace('.', '/');

        out.println("    catch " + class_name + " from "
                + c.getStartPC().getPosition() + " to "
                + c.getEndPC().getPosition() + " using "
                + c.getHandlerPC().getPosition());
    }
}
项目:eclectic    文件:DecompilingVisitor.java   
public void visitCode(Code code) {
    MethodGen mg = new MethodGen(_method, clazzname, cp);
    InstructionList il = mg.getInstructionList();
    InstructionHandle[] ihs = il.getInstructionHandles();

    LocalVariableGen[] lvs = mg.getLocalVariables();

    CodeExceptionGen[] ehs = mg.getExceptionHandlers();

    for (int i = 0; i < lvs.length; i++) {
        LocalVariableGen l = lvs[i];
        out.println("    // local variable " + l.getIndex() + " is \"" + l.getName()
                + "\" " + l.getType() + " from "
                + l.getStart().getPosition() + " to "
                + l.getEnd().getPosition());
    }

    out.print("\n");

    for (int i = 0; i < ihs.length; i++) {
        InstructionHandle ih = ihs[i];
        Instruction inst = ih.getInstruction();

        out.print("    " + ih.getPosition());

        if (inst instanceof BranchInstruction) {
            if (inst instanceof Select) { // Special cases LOOKUPSWITCH and
                                          // TABLESWITCH
                Select s = (Select) inst;
                int[] matchs = s.getMatchs();
                InstructionHandle[] targets = s.getTargets();

                if (s instanceof TABLESWITCH) {
                    out.println("  tableswitch " + matchs[0] + " "
                            + matchs[matchs.length - 1]);

                    for (int j = 0; j < targets.length; j++)
                        out.println("        " + targets[j].getPosition());

                } else { // LOOKUPSWITCH
                    out.println("  lookupswitch ");

                    for (int j = 0; j < targets.length; j++)
                        out.println("        " + matchs[j] + " : "
                                + targets[j].getPosition());
                }

                out.println("        default: " + s.getTarget()); // Applies
                                                                  // for
                                                                  // both
            } else {
                BranchInstruction bi = (BranchInstruction) inst;
                ih = bi.getTarget();
                //str = get(ih);
                out.println("  " + Constants.OPCODE_NAMES[bi.getOpcode()]
                        + " " + ih);
            }
        } else
            out.println("  " + inst.toString(cp.getConstantPool()));
    }

    out.print("\n");

    for (int i = 0; i < ehs.length; i++) {
        CodeExceptionGen c = ehs[i];
        ObjectType caught = c.getCatchType();
        String class_name = (caught == null) ? // catch any exception, used
                                               // when compiling finally
                "all" : caught.getClassName().replace('.', '/');

        out.println("    catch " + class_name + " from "
                + c.getStartPC().getPosition() + " to "
                + c.getEndPC().getPosition() + " using "
                + c.getHandlerPC().getPosition());
    }
}