1.1 --- a/boot/src/main/java/org/apidesign/html/boot/impl/JsClassLoader.java Tue Jun 25 09:27:40 2013 +0200
1.2 +++ b/boot/src/main/java/org/apidesign/html/boot/impl/JsClassLoader.java Tue Jun 25 15:34:37 2013 +0200
1.3 @@ -27,6 +27,8 @@
1.4 import java.util.ArrayList;
1.5 import java.util.Enumeration;
1.6 import java.util.List;
1.7 +import java.util.logging.Level;
1.8 +import java.util.logging.Logger;
1.9 import org.objectweb.asm.AnnotationVisitor;
1.10 import org.objectweb.asm.ClassReader;
1.11 import org.objectweb.asm.ClassVisitor;
1.12 @@ -125,7 +127,7 @@
1.13 protected abstract Fn defineFn(String code, String... names);
1.14
1.15
1.16 - private static final class FindInClass extends ClassVisitor {
1.17 + private final class FindInClass extends ClassVisitor {
1.18 private String name;
1.19 private int found;
1.20
1.21 @@ -352,6 +354,7 @@
1.22 private final class FindInAnno extends AnnotationVisitor {
1.23 private List<String> args = new ArrayList<String>();
1.24 private String body;
1.25 + private boolean javacall = false;
1.26
1.27 public FindInAnno() {
1.28 super(Opcodes.ASM4);
1.29 @@ -363,6 +366,10 @@
1.30 args.add((String) value);
1.31 return;
1.32 }
1.33 + if (name.equals("javacall")) { // NOI18N
1.34 + javacall = (Boolean)value;
1.35 + return;
1.36 + }
1.37 assert name.equals("body");
1.38 body = (String) value;
1.39 }
1.40 @@ -375,7 +382,10 @@
1.41 @Override
1.42 public void visitEnd() {
1.43 if (body != null) {
1.44 - generateJSBody(args, body);
1.45 + generateJSBody(args, javacall ?
1.46 + FnUtils.callback(body, JsClassLoader.this) :
1.47 + body
1.48 + );
1.49 }
1.50 }
1.51 }