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.IfTests.java

License:Open Source License

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

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

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

License:Open Source License

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

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

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

License:Open Source License

@Test
public void testElif() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    mv.visitLabel(start);/*from   w ww .ja  v  a  2  s .  c om*/
    Label end = new Label();
    Label else_ = new Label();
    Label else2 = new Label();
    mv.visitVarInsn(ILOAD, 0);
    mv.visitJumpInsn(IFEQ, else_);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitJumpInsn(GOTO, end);
    mv.visitLabel(else_);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitJumpInsn(IFEQ, else2);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitJumpInsn(GOTO, end);
    mv.visitLabel(else2);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    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 = "if (a) {\n" + "    org.spongepowered.test.decompile.IfTests.body();\n" + "} else if (b) {\n"
            + "    org.spongepowered.test.decompile.IfTests.body();\n" + "} else {\n"
            + "    org.spongepowered.test.decompile.IfTests.body();\n" + "}";
    Assert.assertEquals(good, insn);
}

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

License:Open Source License

@Test
public void testNestedInstanceOf() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZLjava/lang/Object;)V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    mv.visitLabel(start);//ww  w.jav  a 2s.c om
    Label end = new Label();
    Label l1 = new Label();
    mv.visitVarInsn(ILOAD, 0);
    mv.visitJumpInsn(IFEQ, end);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitTypeInsn(INSTANCEOF, THIS_TYPE.getInternalName());
    mv.visitJumpInsn(IFEQ, l1);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitLabel(l1);
    mv.visitLabel(end);
    mv.visitInsn(RETURN);
    mv.visitLocalVariable("a", "Z", null, start, end, 0);
    mv.visitLocalVariable("b", "Ljava/lang/Object;", null, start, end, 1);

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

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

License:Open Source License

@Test
public void testNestedInstanceOfOptimized() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZLjava/lang/Object;)V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    mv.visitLabel(start);//from  w  w w  . ja  v  a  2s .  co  m
    Label end = new Label();
    mv.visitVarInsn(ILOAD, 0);
    mv.visitJumpInsn(IFEQ, end);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitTypeInsn(INSTANCEOF, THIS_TYPE.getInternalName());
    mv.visitJumpInsn(IFEQ, end);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitLabel(end);
    mv.visitInsn(RETURN);
    mv.visitLocalVariable("a", "Z", null, start, end, 0);
    mv.visitLocalVariable("b", "Ljava/lang/Object;", null, start, end, 1);

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

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

License:Open Source License

@Test
public void testIfReturns() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    mv.visitLabel(start);/*w  w  w. ja v a2  s . c  o m*/
    Label end = new Label();
    Label l1 = new Label();
    mv.visitVarInsn(ILOAD, 0);
    mv.visitJumpInsn(IFEQ, l1);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitInsn(RETURN);
    mv.visitLabel(l1);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitJumpInsn(IFEQ, end);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitInsn(RETURN);
    mv.visitLabel(end);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    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 = "if (a) {\n" + "    org.spongepowered.test.decompile.IfTests.body();\n" + "    return;\n"
            + "}\n\n" + "if (b) {\n" + "    org.spongepowered.test.decompile.IfTests.body();\n"
            + "    return;\n" + "}\n\n" + "org.spongepowered.test.decompile.IfTests.body();";
    Assert.assertEquals(good, insn);
}

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

License:Open Source License

@Test
public void testIfElseReturns() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    mv.visitLabel(start);//from w ww .  ja va  2s  .  co m
    Label end = new Label();
    Label l1 = new Label();
    Label l2 = new Label();
    mv.visitVarInsn(ILOAD, 0);
    mv.visitJumpInsn(IFEQ, l1);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitVarInsn(ILOAD, 1);
    mv.visitJumpInsn(IFEQ, l2);
    mv.visitInsn(RETURN);
    mv.visitLabel(l1);
    mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false);
    mv.visitLabel(l2);
    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 = "if (a) {\n" + "    org.spongepowered.test.decompile.IfTests.body();\n" + "    if (b) {\n"
            + "        return;\n" + "    }\n" + "} else {\n"
            + "    org.spongepowered.test.decompile.IfTests.body();\n" + "}";
    Assert.assertEquals(good, insn);
}

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

License:Open Source License

@Test
public void testNew() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "()V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    Label l1 = new Label();
    Label end = new Label();
    mv.visitLabel(start);//  w  w  w  .j a v a2s .c  om
    mv.visitTypeInsn(NEW, "java/lang/String");
    mv.visitInsn(DUP);
    mv.visitLdcInsn("Hello World");
    mv.visitMethodInsn(INVOKESPECIAL, "java/lang/String", "<init>", "(Ljava/lang/String;)V", false);
    mv.visitVarInsn(ASTORE, 0);
    mv.visitLabel(l1);
    mv.visitInsn(RETURN);
    mv.visitLabel(end);
    mv.visitLocalVariable("a", "Ljava/lang/String;", null, l1, end, 0);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "String a = new String(\"Hello World\");";
    Assert.assertEquals(good, insn);
}

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

License:Open Source License

@Test
public void testNewArray() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "()V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    Label l1 = new Label();
    Label end = new Label();
    mv.visitLabel(start);//from w w  w .  j  a v a2 s.c o  m
    mv.visitInsn(ICONST_5);
    mv.visitIntInsn(NEWARRAY, T_INT);
    mv.visitVarInsn(ASTORE, 0);
    mv.visitLabel(l1);
    mv.visitInsn(RETURN);
    mv.visitLabel(end);
    mv.visitLocalVariable("a", "[I", null, l1, end, 0);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "int[] a = new int[5];";
    Assert.assertEquals(good, insn);
}

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

License:Open Source License

@Test
public void testMultiNewArray() {
    TestMethodBuilder builder = new TestMethodBuilder("test_mth", "()V");
    MethodVisitor mv = builder.getGenerator();
    Label start = new Label();
    Label l1 = new Label();
    Label end = new Label();
    mv.visitLabel(start);/*from ww w.java2 s.  c  o  m*/
    mv.visitInsn(ICONST_5);
    mv.visitIntInsn(BIPUSH, 6);
    mv.visitMultiANewArrayInsn("[[I", 2);
    mv.visitVarInsn(ASTORE, 0);
    mv.visitLabel(l1);
    mv.visitInsn(RETURN);
    mv.visitLabel(end);
    mv.visitLocalVariable("a", "[[I", null, l1, end, 0);

    String insn = TestHelper.getAsString(builder.finish(), "test_mth");
    String good = "int[][] a = new int[5][6];";
    Assert.assertEquals(good, insn);
}