It makes $r available in the code given to CtBehavior#insertBefore().tags/rel_3_25_0_ga
<p>-version 3.25 | <p>-version 3.25 | ||||
<ul> | <ul> | ||||
<li>GitHub Issue #72 (PR #231), #242 (PR #243). | |||||
<li>GitHub Issue #72 (PR #231), #241, #242 (PR #243). | |||||
</ul> | </ul> | ||||
<p>-version 3.24.1 on December 9, 2018 | <p>-version 3.24.1 on December 9, 2018 |
Modifier.isStatic(getModifiers())); | Modifier.isStatic(getModifiers())); | ||||
jv.recordParamNames(ca, nvars); | jv.recordParamNames(ca, nvars); | ||||
jv.recordLocalVariables(ca, 0); | jv.recordLocalVariables(ca, 0); | ||||
jv.recordType(getReturnType0()); | |||||
jv.recordReturnType(getReturnType0(), false); | |||||
jv.compileStmnt(src); | jv.compileStmnt(src); | ||||
Bytecode b = jv.getBytecode(); | Bytecode b = jv.getBytecode(); | ||||
int stack = b.getMaxStack(); | int stack = b.getMaxStack(); |
Object obj = make(cc.getName()); | Object obj = make(cc.getName()); | ||||
assertEquals(1, invoke(obj, "run")); | 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")); | |||||
} | |||||
} | } |
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); | |||||
} | |||||
} |