boot/src/main/java/org/apidesign/html/boot/impl/JsClassLoader.java
changeset 171 54ac82353158
parent 164 7235d50dd452
child 188 5f3b1d7fafec
     1.1 --- a/boot/src/main/java/org/apidesign/html/boot/impl/JsClassLoader.java	Wed Jun 26 15:11:17 2013 +0200
     1.2 +++ b/boot/src/main/java/org/apidesign/html/boot/impl/JsClassLoader.java	Sat Jun 29 22:44:59 2013 +0200
     1.3 @@ -27,7 +27,9 @@
     1.4  import java.net.URL;
     1.5  import java.util.ArrayList;
     1.6  import java.util.Enumeration;
     1.7 +import java.util.HashMap;
     1.8  import java.util.List;
     1.9 +import java.util.Map;
    1.10  import org.objectweb.asm.AnnotationVisitor;
    1.11  import org.objectweb.asm.ClassReader;
    1.12  import org.objectweb.asm.ClassVisitor;
    1.13 @@ -93,11 +95,11 @@
    1.14                  is.close();
    1.15                  is = null;
    1.16                  ClassReader cr = new ClassReader(arr);
    1.17 -                FindInClass tst = new FindInClass(null);
    1.18 +                FindInClass tst = new FindInClass(null, new HashMap<String,String>());
    1.19                  cr.accept(tst, 0);
    1.20                  if (tst.found > 0) {
    1.21                      ClassWriter w = new ClassWriterEx(cr, ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
    1.22 -                    FindInClass fic = new FindInClass(w);
    1.23 +                    FindInClass fic = new FindInClass(w, tst.methods);
    1.24                      cr.accept(fic, 0);
    1.25                      arr = w.toByteArray();
    1.26                  }
    1.27 @@ -130,9 +132,11 @@
    1.28      private final class FindInClass extends ClassVisitor {
    1.29          private String name;
    1.30          private int found;
    1.31 +        private final Map<String,String> methods;
    1.32          
    1.33 -        public FindInClass(ClassVisitor cv) {
    1.34 +        public FindInClass(ClassVisitor cv, Map<String,String> methods) {
    1.35              super(Opcodes.ASM4, cv);
    1.36 +            this.methods = methods;
    1.37          }
    1.38  
    1.39          @Override
    1.40 @@ -152,6 +156,9 @@
    1.41  
    1.42          @Override
    1.43          public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
    1.44 +            int end = desc.indexOf(')');
    1.45 +            methods.put(name + desc.substring(0, end + 1), desc);
    1.46 +            
    1.47              return new FindInMethod(access, name, desc,
    1.48                  super.visitMethod(access & (~Opcodes.ACC_NATIVE), name, desc, signature, exceptions)
    1.49              );
    1.50 @@ -402,7 +409,7 @@
    1.51                  public void visitEnd() {
    1.52                      if (body != null) {
    1.53                          generateJSBody(args, javacall ? 
    1.54 -                            FnUtils.callback(body, JsClassLoader.this) : 
    1.55 +                            FnUtils.callback(body, JsClassLoader.this, FindInClass.this.name, FindInClass.this.methods) : 
    1.56                              body
    1.57                          );
    1.58                      }