diff -r fbf8eb98a8ef -r a20721a10717 vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java Mon Dec 10 11:26:32 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java Mon Dec 10 12:03:22 2012 +0100 @@ -18,6 +18,8 @@ package org.apidesign.vm4brwsr; import java.lang.reflect.Method; +import java.util.Map; +import java.util.WeakHashMap; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; @@ -85,16 +87,20 @@ private final Method m; private final boolean js; Object value; - private static Invocable code; - private static CharSequence codeSeq; + private Invocable code; + private CharSequence codeSeq; + private static final Map compiled = new WeakHashMap(); private Run(Method m, boolean js) { this.m = m; this.js = js; } - private static void compileTheCode(Class clazz) throws Exception { - if (code != null) { + private void compileTheCode(Class clazz) throws Exception { + final Object[] data = compiled.get(clazz); + if (data != null) { + code = (Invocable) data[0]; + codeSeq = (CharSequence) data[1]; return; } StringBuilder sb = new StringBuilder(); @@ -123,6 +129,7 @@ Assert.assertTrue(js instanceof Invocable, "It is invocable object: " + res); code = (Invocable) js; codeSeq = sb; + compiled.put(clazz, new Object[] { code, codeSeq }); } @Test(groups = "run") public void executeCode() throws Throwable {