Browse Source

fixes the bug reported in Issue #241.

It makes $r available in the code given to CtBehavior#insertBefore().
tags/rel_3_25_0_ga
chibash 5 years ago
parent
commit
6ea8021f15

+ 1
- 1
Readme.html View File

@@ -283,7 +283,7 @@ see javassist.Dump.

<p>-version 3.25
<ul>
<li>GitHub Issue #72 (PR #231), #242 (PR #243).
<li>GitHub Issue #72 (PR #231), #241, #242 (PR #243).
</ul>

<p>-version 3.24.1 on December 9, 2018

BIN
javassist.jar View File


+ 1
- 1
src/main/javassist/CtBehavior.java View File

@@ -782,7 +782,7 @@ public abstract class CtBehavior extends CtMember {
Modifier.isStatic(getModifiers()));
jv.recordParamNames(ca, nvars);
jv.recordLocalVariables(ca, 0);
jv.recordType(getReturnType0());
jv.recordReturnType(getReturnType0(), false);
jv.compileStmnt(src);
Bytecode b = jv.getBytecode();
int stack = b.getMaxStack();

+ 14
- 0
src/test/javassist/JvstTest5.java View File

@@ -484,4 +484,18 @@ public class JvstTest5 extends JvstTestRoot {
Object obj = make(cc.getName());
assertEquals(1, invoke(obj, "run"));
}

// Issue #241
public void testInsertBeforeAndDollarR() throws Exception {
CtClass cc = sloader.get(test5.InsertBeforeDollarR.class.getName());
CtMethod m = cc.getDeclaredMethod("foo");
m.insertBefore("{ if ($1 == 1) return ($r)$2; }");
try {
m.insertBefore("{ $_ = \"bar\"; }");
assertTrue(false);
} catch (CannotCompileException e) {}
cc.writeFile();
Object obj = make(cc.getName());
assertEquals(1, invoke(obj, "run"));
}
}

+ 14
- 0
src/test/test5/InsertBeforeDollarR.java View File

@@ -0,0 +1,14 @@
package test5;

public class InsertBeforeDollarR {
public int run() {
if (foo(1, "baz").equals("baz"))
return 1;
else
return 0;
}

public String foo(int i, Object obj) {
return String.valueOf(i);
}
}

Loading…
Cancel
Save