Example usage for org.objectweb.asm.tree InsnList get

List of usage examples for org.objectweb.asm.tree InsnList get

Introduction

In this page you can find the example usage for org.objectweb.asm.tree InsnList get.

Prototype

public AbstractInsnNode get(final int index) 

Source Link

Document

Returns the instruction whose index is given.

Usage

From source file:de.tuberlin.uebb.jbop.optimizer.loop.ForLoopUnrollerTest.java

License:Open Source License

/**
 * Tests the Loopunroller for a loop with the test-instructions at the beginning.
 *///  www  . j av  a2 s.  c  o m
@Test
public void testForLoopTypeTwo() {
    // INIT
    final LabelNode check = new LabelNode();
    final LabelNode ende = new LabelNode();
    builder.add(ICONST_0)//
            .add(ISTORE, 1)//
            .addInsn(check)//
            .add(ICONST_5)//
            .add(ILOAD, 1)//
            .add(IF_ICMPGT, ende)//
            .add(NOP)//
            .add(NOP)//
            .add(NOP)//
            .add(IINC, 1, 1)//
            .add(GOTO, check)//
            .addInsn(ende)//
            .add(NOP)//
            .addReturn();

    // RUN
    assertEquals(14, method.instructions.size());
    final InsnList optimized = optimizer.optimize(method.instructions, method);

    // ASSERT
    assertEquals(38, optimized.size()); //
    int node = 0;
    for (int i = 0; i < 6; ++i) {
        assertEquals(i, NodeHelper.getNumberValue(optimized.get(node)).intValue());
        node++;
        assertEquals(Opcodes.ISTORE, optimized.get(node).getOpcode());
        node++;
        assertEquals(Opcodes.NOP, optimized.get(node).getOpcode());
        node++;
        assertEquals(Opcodes.NOP, optimized.get(node).getOpcode());
        node++;
        assertEquals(Opcodes.NOP, optimized.get(node).getOpcode());
        node++;
        assertEquals(Opcodes.NOP, optimized.get(node).getOpcode());
        node++;
    }
    assertEquals(Opcodes.NOP, optimized.get(node).getOpcode());
    node++;
    assertEquals(Opcodes.RETURN, optimized.get(node).getOpcode());
    node++;
}

From source file:de.tuberlin.uebb.jbop.optimizer.var.FinalFieldInlinerTest.java

License:Open Source License

/**
 * Tests that FinalFieldInliner is working correctly for int-Fields.
 * //from   w ww  .ja va2  s. c o  m
 * @throws Exception
 *           the exception
 */
@Test
public void testFinalFieldInlinerIntField() throws Exception {
    // INIT
    initTestMethod("I", 42, 1);

    // RUN
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(2, optimized.size());
    assertEquals(42, NodeHelper.getNumberValue(optimized.get(0)).intValue());
}

From source file:de.tuberlin.uebb.jbop.optimizer.var.FinalFieldInlinerTest.java

License:Open Source License

/**
 * Tests that FinalFieldInliner is working correctly for double-Fields.
 * /*from   w w  w .  j  a  va  2  s  .com*/
 * @throws Exception
 *           the exception
 */
@Test
public void testFinalFieldInlinerDoubleField() throws Exception {
    // INIT
    initTestMethod("D", 23.0, 2);

    // RUN
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(2, optimized.size());
    assertEquals(23.0, NodeHelper.getNumberValue(optimized.get(0)).doubleValue(), .0001);
}

From source file:de.tuberlin.uebb.jbop.optimizer.var.FinalFieldInlinerTest.java

License:Open Source License

/**
 * Tests that FinalFieldInliner is working correctly for long-Fields.
 * //from w  ww . j a  v  a2 s  . co  m
 * @throws Exception
 *           the exception
 */
@Test
public void testFinalFieldInlinerLongField() throws Exception {
    // INIT
    initTestMethod("J", 12L, 3);

    // RUN
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(2, optimized.size());
    assertEquals(12L, NodeHelper.getNumberValue(optimized.get(0)).longValue());
}

From source file:de.tuberlin.uebb.jbop.optimizer.var.FinalFieldInlinerTest.java

License:Open Source License

/**
 * Tests that FinalFieldInliner is working correctly for float-Fields.
 * // w w  w  .  j a v  a  2 s  . c o m
 * @throws Exception
 *           the exception
 */
@Test
public void testFinalFieldInlinerFloatField() throws Exception {
    // INIT
    initTestMethod("F", 13.13F, 4);

    // RUN
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(2, optimized.size());
    assertEquals(13.13F, NodeHelper.getNumberValue(optimized.get(0)).floatValue(), .0001);
}

From source file:de.tuberlin.uebb.jbop.optimizer.var.FinalFieldInlinerTest.java

License:Open Source License

/**
 * Tests that FinalFieldInliner is working correctly for byte-Fields.
 * /* ww w .java  2s  . c o  m*/
 * @throws Exception
 *           the exception
 */
@Test
public void testFinalFieldInlinerByteField() throws Exception {
    // INIT
    initTestMethod("B", (byte) 1, 5);

    // RUN
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(2, optimized.size());
    assertEquals((byte) 1, NodeHelper.getNumberValue(optimized.get(0)).byteValue());
}

From source file:de.tuberlin.uebb.jbop.optimizer.var.FinalFieldInlinerTest.java

License:Open Source License

/**
 * Tests that FinalFieldInliner is working correctly for short-Fields.
 * /*from   w  w w.j ava  2s  .  c  o  m*/
 * @throws Exception
 *           the exception
 */
@Test
public void testFinalFieldInlinerShortField() throws Exception {
    // INIT
    initTestMethod("S", (short) 3, 6);

    // RUN
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(2, optimized.size());
    assertEquals((short) 3, NodeHelper.getNumberValue(optimized.get(0)).byteValue());
}

From source file:de.tuberlin.uebb.jbop.optimizer.var.FinalFieldInlinerTest.java

License:Open Source License

/**
 * Tests that FinalFieldInliner is working correctly for boolean-Fields.
 * /* w ww  .ja v  a 2 s .co  m*/
 * @throws Exception
 *           the exception
 */
@Test
public void testFinalFieldInlinerBooleanField() throws Exception {
    // INIT
    initTestMethod("Z", true, 7);

    // RUN
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(2, optimized.size());
    assertTrue(NodeHelper.getBooleanValue(optimized.get(0)));
}

From source file:de.tuberlin.uebb.jbop.optimizer.var.FinalFieldInlinerTest.java

License:Open Source License

/**
 * Tests that FinalFieldInliner is working correctly for boolean-Fields.
 * /* www  . ja v  a  2s  . c o  m*/
 * @throws Exception
 *           the exception
 */
@Test
public void testFinalFieldInlinerCharField() throws Exception {
    // INIT
    initTestMethod("C", 'C', 8);

    // RUN
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(2, optimized.size());
    assertEquals('C', NodeHelper.getCharValue(optimized.get(0)));
}

From source file:de.tuberlin.uebb.jbop.optimizer.var.FinalFieldInlinerTest.java

License:Open Source License

/**
 * Tests that finalFieldInliner is is working correctly for field-Chains with mutli-arrays.
 * /*w w w .j  a  v  a  2s  . c  o  m*/
 * @throws Exception
 *           the exception
 */
@Test
public void testFinalFieldInlinerFieldChainMultiArray() throws Exception {
    // INIT
    final ClassNodeBuilder builderC = ClassNodeBuilder.createClass("de.tuberlin.uebb.jbop.optimizer.var.CM")
            .addField("d", "[[D").withModifiers(ACC_PRIVATE, ACC_FINAL).withAnnotation(ImmutableArray.class)
            .addToConstructor(new VarInsnNode(ALOAD, 0)).//
            addToConstructor(new InsnNode(ICONST_1)).//
            addToConstructor(new TypeInsnNode(ANEWARRAY, "[D")).//
            addToConstructor(new InsnNode(DUP)).//
            addToConstructor(new InsnNode(ICONST_0)).//
            addToConstructor(new InsnNode(ICONST_1)).//
            addToConstructor(new IntInsnNode(NEWARRAY, Opcodes.T_DOUBLE)).//
            addToConstructor(new InsnNode(DUP)).//
            addToConstructor(new InsnNode(ICONST_0)).//
            addToConstructor(new InsnNode(DCONST_1)).//
            addToConstructor(new InsnNode(DASTORE)).//
            addToConstructor(new InsnNode(AASTORE)).//
            addToConstructor(new FieldInsnNode(PUTFIELD, "de/tuberlin/uebb/jbop/optimizer/var/CM", "d", "[[D")).//
            toClass();
    final ClassNodeBuilder builderB = ClassNodeBuilder.createClass("de.tuberlin.uebb.jbop.optimizer.var.BM")
            .addField("c", Type.getDescriptor(builderC.getBuildedClass())).withModifiers(ACC_PRIVATE, ACC_FINAL)
            .initWith(null).toClass();
    final ClassNodeBuilder builderA = ClassNodeBuilder.createClass("de.tuberlin.uebb.jbop.optimizer.var.AM")
            .addField("b", Type.getDescriptor(builderB.getBuildedClass())).withModifiers(ACC_PRIVATE, ACC_FINAL)
            .initWith(null).toClass();
    final ClassNodeBuilder builderTestClass = ClassNodeBuilder
            .createClass("de.tuberlin.uebb.jbop.optimizer.var.ChainedTestClassM")
            .addField("a", Type.getDescriptor(builderA.getBuildedClass())).withModifiers(ACC_PRIVATE, ACC_FINAL)
            .initWith(null).//
            addMethod("get", "()D").//
            addGetClassField("a").// ;
            addGetField(builderA, "b").//
            addGetField(builderB, "c").//
            addGetField(builderC, "d").//
            addInsn(new InsnNode(ICONST_0)).//
            addInsn(new InsnNode(AALOAD)).//
            addInsn(new InsnNode(ICONST_0)).//
            addInsn(new InsnNode(DALOAD)).//
            addInsn(new InsnNode(DRETURN));//

    // RUN
    final Object instance = builderTestClass.instance();

    inliner.setInputObject(instance);
    method = builderTestClass.getMethod("get");
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(2, optimized.size());
    assertEquals(1.0, NodeHelper.getNumberValue(optimized.get(0)).doubleValue(), .00001);
}