# HG changeset patch # User Jaroslav Tulach # Date 1362947280 -3600 # Node ID b0b23e5ebf9d26ab6ca1a7108a32ed4e055e8622 # Parent 32de226580406a7da4b8da920b2e575a18d49746 Trying to make the static compilation mode as close to lazy one as possible: Class initializer method are not executed until the class is really referenced. diff -r 32de22658040 -r b0b23e5ebf9d javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ProcessPageTest.java --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ProcessPageTest.java Sun Mar 10 21:27:06 2013 +0100 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ProcessPageTest.java Sun Mar 10 21:28:00 2013 +0100 @@ -180,6 +180,9 @@ } Bck2Brwsr.generate(sb, ProcessPageTest.class.getClassLoader(), names); sb.append("var vm = this.bck2brwsr();\n"); + for (String c : names) { + sb.append("vm.loadClass('").append(c.replace('/', '.')).append("');\n"); + } ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine js = sem.getEngineByExtension("js"); diff -r 32de22658040 -r b0b23e5ebf9d rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Mar 10 21:27:06 2013 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Mar 10 21:28:00 2013 +0100 @@ -191,6 +191,9 @@ generateAnno(jc, out, classAnno); out.append("\n };"); } + for (String init : toInitilize.toArray()) { + out.append("\n ").append(init).append("();"); + } out.append("\n }"); out.append("\n if (arguments.length === 0) {"); out.append("\n if (!(this instanceof CLS)) {"); @@ -219,11 +222,11 @@ out.append("\n }"); out.append("\n return arguments[0] ? new CLS() : CLS.prototype;"); out.append("\n};"); - StringBuilder sb = new StringBuilder(); - for (String init : toInitilize.toArray()) { - sb.append("\n").append(init).append("();"); - } - return sb.toString(); +// StringBuilder sb = new StringBuilder(); +// for (String init : toInitilize.toArray()) { +// sb.append("\n").append(init).append("();"); +// } + return ""; } private String generateStaticMethod(String prefix, MethodData m, StringArray toInitilize) throws IOException { String jsb = javaScriptBody(prefix, m, true); diff -r 32de22658040 -r b0b23e5ebf9d rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/StaticUse.java --- a/rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/StaticUse.java Sun Mar 10 21:27:06 2013 +0100 +++ b/rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/StaticUse.java Sun Mar 10 21:28:00 2013 +0100 @@ -19,6 +19,13 @@ class StaticUse { public static final Object NON_NULL = new Object(); + public static int cnt; + static { + if (cnt++ != 0) { + throw new IllegalStateException("Multiple initialization of a "); + } + } + StaticUse() { }