Example usage for org.objectweb.asm MethodVisitor visitLocalVariable

List of usage examples for org.objectweb.asm MethodVisitor visitLocalVariable

Introduction

In this page you can find the example usage for org.objectweb.asm MethodVisitor visitLocalVariable.

Prototype

public void visitLocalVariable(final String name, final String descriptor, final String signature,
        final Label start, final Label end, final int index) 

Source Link

Document

Visits a local variable declaration.

Usage

From source file:org.spongepowered.test.decompile.TryCatchTests.java

License:Open Source License

@Test
public void testTryCatchNested() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "()V");
    MethodVisitor mv = builder.getGenerator();
    Label l0 = new Label();
    Label l1 = new Label();
    Label l2 = new Label();
    Label l3 = new Label();
    Label l4 = new Label();
    mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Exception");
    mv.visitTryCatchBlock(l0, l3, l4, "java/lang/NullPointerException");
    mv.visitLabel(l0);//from  w w  w. j  a  v  a  2s. com
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitLabel(l1);
    Label l5 = new Label();
    mv.visitJumpInsn(GOTO, l5);
    mv.visitLabel(l2);
    mv.visitVarInsn(ASTORE, 3);
    Label l6 = new Label();
    mv.visitLabel(l6);
    mv.visitVarInsn(ALOAD, 3);
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Exception", "printStackTrace", "()V", false);
    mv.visitLabel(l3);
    mv.visitJumpInsn(GOTO, l5);
    mv.visitLabel(l4);
    mv.visitVarInsn(ASTORE, 3);
    Label l7 = new Label();
    mv.visitLabel(l7);
    mv.visitVarInsn(ALOAD, 3);
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/NullPointerException", "printStackTrace", "()V", false);
    mv.visitLabel(l5);
    mv.visitInsn(RETURN);
    Label l8 = new Label();
    mv.visitLabel(l8);
    mv.visitLocalVariable("e", "Ljava/lang/Exception;", null, l6, l3, 3);
    mv.visitLocalVariable("e", "Ljava/lang/NullPointerException;", null, l7, l5, 3);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "try {\n" + "    try {\n" + "        org.spongepowered.test.decompile.TryCatchTests.body();\n"
            + "    } catch (Exception e) {\n" + "        e.printStackTrace();\n" + "    }\n"
            + "} catch (NullPointerException e) {\n" + "    e.printStackTrace();\n" + "}";
    Assert.assertEquals(good, insn);
}

From source file:org.spongepowered.test.decompile.TryCatchTests.java

License:Open Source License

@Test
public void testTryCatchWithControlFlow() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "()V");
    MethodVisitor mv = builder.getGenerator();
    Label l0 = new Label();
    Label l1 = new Label();
    Label l2 = new Label();
    Label l4 = new Label();
    mv.visitTryCatchBlock(l0, l1, l2, "java/lang/NullPointerException");
    mv.visitLabel(l0);/*from   w  w w.  j  a  v a 2 s . c o m*/
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitLabel(l1);
    mv.visitJumpInsn(GOTO, l4);
    mv.visitLabel(l2);
    mv.visitVarInsn(ASTORE, 2);
    mv.visitVarInsn(ALOAD, 2);
    mv.visitJumpInsn(IFNULL, l4);
    mv.visitVarInsn(ALOAD, 2);
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/NullPointerException", "printStackTrace", "()V", false);
    mv.visitLabel(l4);
    mv.visitInsn(RETURN);
    Label l5 = new Label();
    mv.visitLabel(l5);
    mv.visitLocalVariable("e", "Ljava/lang/NullPointerException;", null, l2, l5, 2);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "try {\n" + "    org.spongepowered.test.decompile.TryCatchTests.body();\n"
            + "} catch (NullPointerException e) {\n" + "    if (e != null) {\n"
            + "        e.printStackTrace();\n" + "    }\n" + "}";
    Assert.assertEquals(good, insn);
}

From source file:org.spongepowered.test.decompile.TryCatchTests.java

License:Open Source License

@Test
public void testTryCatchReturnedTernary() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(Z)I");
    MethodVisitor mv = builder.getGenerator();
    Label l0 = new Label();
    Label l1 = new Label();
    Label l2 = new Label();
    mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Exception");
    mv.visitLabel(l0);//from  w w  w  .j av a2 s . c  o  m
    mv.visitVarInsn(ILOAD, 1);
    Label l3 = new Label();
    mv.visitJumpInsn(IFEQ, l3);
    mv.visitIntInsn(BIPUSH, 6);
    mv.visitJumpInsn(GOTO, l1);
    mv.visitLabel(l3);
    mv.visitInsn(ICONST_3);
    mv.visitLabel(l1);
    mv.visitInsn(IRETURN);
    mv.visitLabel(l2);
    mv.visitVarInsn(ASTORE, 2);
    Label l4 = new Label();
    mv.visitLabel(l4);
    mv.visitInsn(ICONST_0);
    mv.visitInsn(IRETURN);
    Label l5 = new Label();
    mv.visitLabel(l5);
    mv.visitLocalVariable("a", "Z", null, l0, l5, 1);
    mv.visitLocalVariable("e", "Ljava/lang/Exception;", null, l4, l5, 2);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "try {\n" + "    return a ? 6 : 3;\n" + "} catch (Exception e) {\n" + "    return 0;\n" + "}";
    Assert.assertEquals(good, insn);
}

From source file:org.spongepowered.test.decompile.WhileTests.java

License:Open Source License

@Test
public void testWhile() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(I)V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    mv.visitLabel(start);/*from w ww.  j  a va  2s  .  co m*/
    Label end = new Label();
    Label l1 = new Label();
    mv.visitLabel(l1);
    mv.visitVarInsn(ILOAD, 0);
    mv.visitInsn(ICONST_5);
    mv.visitJumpInsn(IF_ICMPGE, end);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitJumpInsn(GOTO, l1);
    mv.visitLabel(end);
    mv.visitInsn(RETURN);
    mv.visitLocalVariable("i", "I", null, start, end, 0);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "while (i < 5) {\n" + "    org.spongepowered.test.decompile.WhileTests.body();\n" + "}";
    Assert.assertEquals(good, insn);
}

From source file:org.spongepowered.test.decompile.WhileTests.java

License:Open Source License

@Test
public void testWhileInverse() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(I)V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    mv.visitLabel(start);//from  www.  j ava  2  s. co m
    Label end = new Label();
    Label l1 = new Label();
    Label l2 = new Label();
    mv.visitJumpInsn(GOTO, l2);
    mv.visitLabel(l1);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitLabel(l2);
    mv.visitVarInsn(ILOAD, 0);
    mv.visitInsn(ICONST_5);
    mv.visitJumpInsn(IF_ICMPLT, l1);
    mv.visitLabel(end);
    mv.visitInsn(RETURN);
    mv.visitLocalVariable("i", "I", null, start, end, 0);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "while (i < 5) {\n" + "    org.spongepowered.test.decompile.WhileTests.body();\n" + "}";
    Assert.assertEquals(good, insn);
}

From source file:org.spongepowered.test.decompile.WhileTests.java

License:Open Source License

@Test
public void testFor() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(I)V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    mv.visitLabel(start);//  w ww  .  j a  v  a  2  s . co m
    Label end = new Label();
    Label l1 = new Label();
    mv.visitInsn(ICONST_0);
    mv.visitVarInsn(ISTORE, 0);
    mv.visitLabel(l1);
    mv.visitVarInsn(ILOAD, 0);
    mv.visitInsn(ICONST_5);
    mv.visitJumpInsn(IF_ICMPGE, end);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitIincInsn(0, 1);
    mv.visitJumpInsn(GOTO, l1);
    mv.visitLabel(end);
    mv.visitInsn(RETURN);
    mv.visitLocalVariable("i", "I", null, start, end, 0);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "for (i = 0; i < 5; i++) {\n" + "    org.spongepowered.test.decompile.WhileTests.body();\n"
            + "}";
    Assert.assertEquals(good, insn);
}

From source file:org.spongepowered.test.decompile.WhileTests.java

License:Open Source License

@Test
public void testForInverse() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(I)V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    mv.visitLabel(start);//from w w w  .  j a  v a  2  s  .c o m
    Label end = new Label();
    Label l1 = new Label();
    Label l2 = new Label();
    mv.visitInsn(ICONST_0);
    mv.visitVarInsn(ISTORE, 0);
    mv.visitJumpInsn(GOTO, l2);
    mv.visitLabel(l1);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitIincInsn(0, 1);
    mv.visitLabel(l2);
    mv.visitVarInsn(ILOAD, 0);
    mv.visitInsn(ICONST_5);
    mv.visitJumpInsn(IF_ICMPLT, l1);
    mv.visitLabel(end);
    mv.visitInsn(RETURN);
    mv.visitLocalVariable("i", "I", null, start, end, 0);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "for (i = 0; i < 5; i++) {\n" + "    org.spongepowered.test.decompile.WhileTests.body();\n"
            + "}";
    Assert.assertEquals(good, insn);
}

From source file:org.spongepowered.test.decompile.WhileTests.java

License:Open Source License

@Test
public void testWhileAnd() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    mv.visitLabel(start);//from w  w  w  . j  a va  2  s . co m
    Label end = new Label();
    Label l1 = new Label();
    mv.visitLabel(l1);
    mv.visitVarInsn(ILOAD, 0);
    mv.visitJumpInsn(IFEQ, end);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitJumpInsn(IFEQ, end);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitJumpInsn(GOTO, l1);
    mv.visitLabel(end);
    mv.visitInsn(RETURN);
    mv.visitLocalVariable("a", "Z", null, start, end, 0);
    mv.visitLocalVariable("b", "Z", null, start, end, 1);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "while (a && b) {\n" + "    org.spongepowered.test.decompile.WhileTests.body();\n" + "}";
    Assert.assertEquals(good, insn);
}

From source file:org.spongepowered.test.decompile.WhileTests.java

License:Open Source License

@Test
public void testWhileAndInverse() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    mv.visitLabel(start);/* w  w w .  j av a 2 s  .c om*/
    Label end = new Label();
    Label l1 = new Label();
    Label l2 = new Label();
    mv.visitJumpInsn(GOTO, l2);
    mv.visitLabel(l1);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitLabel(l2);
    mv.visitVarInsn(ILOAD, 0);
    mv.visitJumpInsn(IFEQ, end);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitJumpInsn(IFNE, l1);
    mv.visitLabel(end);
    mv.visitInsn(RETURN);
    mv.visitLocalVariable("a", "Z", null, start, end, 0);
    mv.visitLocalVariable("b", "Z", null, start, end, 1);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "while (a && b) {\n" + "    org.spongepowered.test.decompile.WhileTests.body();\n" + "}";
    Assert.assertEquals(good, insn);
}

From source file:org.spongepowered.test.decompile.WhileTests.java

License:Open Source License

@Test
public void testWhileNestedIf() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    mv.visitLabel(start);//from  w w w .j a v a 2 s.  co m
    Label end = new Label();
    Label l1 = new Label();
    Label l2 = new Label();
    mv.visitLabel(l1);
    mv.visitVarInsn(ILOAD, 0);
    mv.visitJumpInsn(IFEQ, end);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitJumpInsn(IFEQ, l2);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitLabel(l2);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitJumpInsn(GOTO, l1);
    mv.visitLabel(end);
    mv.visitInsn(RETURN);
    mv.visitLocalVariable("a", "Z", null, start, end, 0);
    mv.visitLocalVariable("b", "Z", null, start, end, 1);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "while (a) {\n" + "    if (b) {\n"
            + "        org.spongepowered.test.decompile.WhileTests.body();\n" + "    }\n\n"
            + "    org.spongepowered.test.decompile.WhileTests.body();\n" + "}";
    Assert.assertEquals(good, insn);
}