It makes $r available in the code given to CtBehavior#insertBefore().tags/rel_3_25_0_ga
@@ -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 |
@@ -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(); |
@@ -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")); | |||
} | |||
} |
@@ -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); | |||
} | |||
} |