This question was on the mailing list some time ago [0]. To summarize: Groovy for Java is hard to achieve since there are language constructs and APIs (if you want to completely remove the Groovy dependency) that are not available in Java.
In particular, with the introduction of site caching and other performance optimization methods, the generated Java code will be very similar to this question (for simplicity, I just threw a few script into the JD-GUI [1]):
public class script1351632333660 extends Script { public script1351632333660() { script1351632333660 this; CallSite[] arrayOfCallSite = $getCallSiteArray(); } public script1351632333660(Binding arg1) { Binding context; CallSite[] arrayOfCallSite = $getCallSiteArray(); ScriptBytecodeAdapter.invokeMethodOnSuperN($get$$class$groovy$lang$Script(), this, "setBinding", new Object[] { context }); } public Object run() { CallSite[] arrayOfCallSite = $getCallSiteArray(); Object items = ScriptBytecodeAdapter.createList(new Object[0]); Object[] item = (Object[])ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.createList(new Object[] { "Fluff", arrayOfCallSite[1].callConstructor($get$$class$java$util$Date()), (Integer)DefaultTypeTransformation.box(11235813) }), $get$array$$class$java$lang$Object()); arrayOfCallSite[2].call(items, item); arrayOfCallSite[3].callCurrent(this, items); ValueRecorder localValueRecorder = new ValueRecorder(); try { Object tmp102_101 = items; localValueRecorder.record(tmp102_101, 8); Object tmp126_121 = arrayOfCallSite[4].call(tmp102_101, new script1351632333660._run_closure1(this)); localValueRecorder.record(tmp126_121, 14); if (DefaultTypeTransformation.booleanUnbox(tmp126_121)) localValueRecorder.clear(); else ScriptBytecodeAdapter.assertFailed(AssertionRenderer.render("assert items.findAll { it }", localValueRecorder), null); } finally { localValueRecorder.clear(); throw finally; } return null; return null; } static { __$swapInit(); Long localLong1 = (Long)DefaultTypeTransformation.box(0L); __timeStamp__239_neverHappen1351632333665 = localLong1.longValue(); Long localLong2 = (Long)DefaultTypeTransformation.box(1351632333665L); __timeStamp = localLong2.longValue(); } class _run_closure1 extends Closure implements GeneratedClosure { public _run_closure1(Object _thisObject) { super(_thisObject); } public Object doCall(Object it) { CallSite[] arrayOfCallSite = $getCallSiteArray(); return it; return null; }
[0] http://groovy.329449.n5.nabble.com/Java-lt-gt-Groovy-converters-td337442.html
[1] http://java.decompiler.free.fr
source share