boot/src/main/java/org/apidesign/html/boot/impl/JsClassLoader.java
branchclassloader
changeset 160 b5a06e2b3b92
parent 153 16a9e0101224
child 161 ea5ca9cc685d
     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              }