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.
1.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ProcessPageTest.java Sun Mar 10 21:27:06 2013 +0100
1.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ProcessPageTest.java Sun Mar 10 21:28:00 2013 +0100
1.3 @@ -180,6 +180,9 @@
1.4 }
1.5 Bck2Brwsr.generate(sb, ProcessPageTest.class.getClassLoader(), names);
1.6 sb.append("var vm = this.bck2brwsr();\n");
1.7 + for (String c : names) {
1.8 + sb.append("vm.loadClass('").append(c.replace('/', '.')).append("');\n");
1.9 + }
1.10
1.11 ScriptEngineManager sem = new ScriptEngineManager();
1.12 ScriptEngine js = sem.getEngineByExtension("js");
2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Mar 10 21:27:06 2013 +0100
2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Mar 10 21:28:00 2013 +0100
2.3 @@ -191,6 +191,9 @@
2.4 generateAnno(jc, out, classAnno);
2.5 out.append("\n };");
2.6 }
2.7 + for (String init : toInitilize.toArray()) {
2.8 + out.append("\n ").append(init).append("();");
2.9 + }
2.10 out.append("\n }");
2.11 out.append("\n if (arguments.length === 0) {");
2.12 out.append("\n if (!(this instanceof CLS)) {");
2.13 @@ -219,11 +222,11 @@
2.14 out.append("\n }");
2.15 out.append("\n return arguments[0] ? new CLS() : CLS.prototype;");
2.16 out.append("\n};");
2.17 - StringBuilder sb = new StringBuilder();
2.18 - for (String init : toInitilize.toArray()) {
2.19 - sb.append("\n").append(init).append("();");
2.20 - }
2.21 - return sb.toString();
2.22 +// StringBuilder sb = new StringBuilder();
2.23 +// for (String init : toInitilize.toArray()) {
2.24 +// sb.append("\n").append(init).append("();");
2.25 +// }
2.26 + return "";
2.27 }
2.28 private String generateStaticMethod(String prefix, MethodData m, StringArray toInitilize) throws IOException {
2.29 String jsb = javaScriptBody(prefix, m, true);
3.1 --- a/rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/StaticUse.java Sun Mar 10 21:27:06 2013 +0100
3.2 +++ b/rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/StaticUse.java Sun Mar 10 21:28:00 2013 +0100
3.3 @@ -19,6 +19,13 @@
3.4
3.5 class StaticUse {
3.6 public static final Object NON_NULL = new Object();
3.7 + public static int cnt;
3.8 + static {
3.9 + if (cnt++ != 0) {
3.10 + throw new IllegalStateException("Multiple initialization of a <cinit>");
3.11 + }
3.12 + }
3.13 +
3.14 StaticUse() {
3.15 }
3.16