List of usage examples for org.objectweb.asm MethodVisitor visitLocalVariable
public void visitLocalVariable(final String name, final String descriptor, final String signature, final Label start, final Label end, final int index)
From source file:org.spongepowered.test.decompile.DoWhileTests.java
License:Open Source License
@Test public void testDoWhile() { 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 a2s .co m Label end = new Label(); Label l1 = new Label(); mv.visitLabel(l1); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); 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 = "do {\n" + " org.spongepowered.test.decompile.DoWhileTests.body();\n" + "} while (i < 5);"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.DoWhileTests.java
License:Open Source License
@Test public void testDoWhileAnd() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);/*from w ww.j a va 2s .com*/ Label end = new Label(); Label l1 = new Label(); mv.visitLabel(l1); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); 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 = "do {\n" + " org.spongepowered.test.decompile.DoWhileTests.body();\n" + "} while (a && b);"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.DoWhileTests.java
License:Open Source License
@Test public void testDoWhileOr() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);//from w ww .j a v a 2 s . c om Label end = new Label(); Label l1 = new Label(); mv.visitLabel(l1); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFNE, l1); 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 = "do {\n" + " org.spongepowered.test.decompile.DoWhileTests.body();\n" + "} while (a || b);"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.DoWhileTests.java
License:Open Source License
@Test public void testDoWhileBreak() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(IZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);// ww w . jav a 2s. co m Label end = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitLabel(l1); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFEQ, l2); mv.visitJumpInsn(GOTO, end); 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); mv.visitLocalVariable("a", "Z", null, start, end, 1); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "do {\n" + " org.spongepowered.test.decompile.DoWhileTests.body();\n" + " if (a) {\n" + " break;\n" + " }\n" + "} while (i < 5);"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.DoWhileTests.java
License:Open Source License
public void testDoWhileContinue() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(IZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);// w ww. j a va 2s. c o m Label end = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitLabel(l1); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFEQ, l2); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l2); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); 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); mv.visitLocalVariable("a", "Z", null, start, end, 1); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "do {\n" + " DoWhileTests.body();\n" + " if (a) {\n" + " continue;\n" + " }\n" + " DoWhileTests.body();\n" + "} while (i < 5);"; Assert.assertEquals(good, insn); }
From source file:org.spongepowered.test.decompile.IfTests.java
License:Open Source License
@Test public void testSimple() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(Z)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);/*from w w w . j av a 2 s .c om*/ Label end = new Label(); mv.visitVarInsn(ILOAD, 0); 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); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a) {\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 testComparisonAndNull() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ILjava/lang/Object;)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);/*from w w w. ja v a 2s . c om*/ Label ret = new Label(); Label body = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitInsn(ICONST_3); mv.visitJumpInsn(IF_ICMPLT, body); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFNULL, ret); mv.visitLabel(body); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(ret); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "I", null, start, ret, 0); mv.visitLocalVariable("b", "Ljava/lang/Object;", null, start, ret, 1); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a < 3 || b != null) {\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 testOr() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);//from w w w .jav a2 s. c o m Label ret = new Label(); Label body = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFNE, body); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFEQ, ret); mv.visitLabel(body); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(ret); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, ret, 0); mv.visitLocalVariable("b", "Z", null, start, ret, 1); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a || b) {\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 testAnd() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);/*ww w . j a va 2 s. c om*/ Label ret = new Label(); Label body = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, ret); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFEQ, ret); mv.visitLabel(body); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(ret); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, ret, 0); mv.visitLocalVariable("b", "Z", null, start, ret, 1); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a && b) {\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 testMultipleAnd() { TestMethodBuilder builder = new TestMethodBuilder("test_mth", "(ZZZ)V"); MethodVisitor mv = builder.getGenerator(); Label start = new Label(); mv.visitLabel(start);// w ww .j a va2 s . c o m Label ret = new Label(); Label body = new Label(); mv.visitVarInsn(ILOAD, 0); mv.visitJumpInsn(IFEQ, ret); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFEQ, ret); mv.visitVarInsn(ILOAD, 2); mv.visitJumpInsn(IFEQ, ret); mv.visitLabel(body); mv.visitMethodInsn(INVOKESTATIC, THIS_TYPE.getInternalName(), "body", "()V", false); mv.visitLabel(ret); mv.visitInsn(RETURN); mv.visitLocalVariable("a", "Z", null, start, ret, 0); mv.visitLocalVariable("b", "Z", null, start, ret, 1); mv.visitLocalVariable("c", "Z", null, start, ret, 2); String insn = TestHelper.getAsString(builder.finish(), "test_mth"); String good = "if (a && b && c) {\n" + " org.spongepowered.test.decompile.IfTests.body();\n" + "}"; Assert.assertEquals(good, insn); }