launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader.java
branchclassloader
changeset 1171 9753524d698f
parent 1170 ebedd84fba80
child 1172 c04c43d5fdc6
     1.1 --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader.java	Mon Jun 10 18:12:38 2013 +0200
     1.2 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader.java	Mon Jun 10 18:19:40 2013 +0200
     1.3 @@ -22,7 +22,6 @@
     1.4  import java.net.URL;
     1.5  import java.net.URLClassLoader;
     1.6  import java.util.ArrayList;
     1.7 -import java.util.Arrays;
     1.8  import java.util.List;
     1.9  import org.objectweb.asm.AnnotationVisitor;
    1.10  import org.objectweb.asm.ClassReader;
    1.11 @@ -37,7 +36,7 @@
    1.12   *
    1.13   * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
    1.14   */
    1.15 -public abstract class JsClassLoader extends URLClassLoader {
    1.16 +abstract class JsClassLoader extends URLClassLoader {
    1.17      JsClassLoader(URL[] urls, ClassLoader parent) {
    1.18          super(urls, parent);
    1.19      }
    1.20 @@ -65,24 +64,15 @@
    1.21                  }
    1.22              }
    1.23          }
    1.24 -        if (name.startsWith("org.apidesign.bck2brwsr.launcher.fximpl.JsClassLoader")) {
    1.25 +        if (name.startsWith("org.apidesign.bck2brwsr.launcher.fximpl.Fn")) {
    1.26              return Class.forName(name);
    1.27          }
    1.28          
    1.29          return super.findClass(name);
    1.30      }
    1.31      
    1.32 -    public final Fn define(String code, String... names) {
    1.33 -        return defineFn(code, names);
    1.34 -    }
    1.35 -    
    1.36 -
    1.37      protected abstract Fn defineFn(String code, String... names);
    1.38      
    1.39 -    public static abstract class Fn {
    1.40 -        public abstract Object invoke(Object... args) throws Exception;
    1.41 -    }
    1.42 -    
    1.43      
    1.44      private static final class FindInClass extends ClassVisitor {
    1.45          private String name;
    1.46 @@ -138,7 +128,7 @@
    1.47                  super.visitFieldInsn(
    1.48                      Opcodes.GETSTATIC, FindInClass.this.name, 
    1.49                      "$$bck2brwsr$$" + name, 
    1.50 -                    "Lorg/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader$Fn;"
    1.51 +                    "Lorg/apidesign/bck2brwsr/launcher/fximpl/Fn;"
    1.52                  );
    1.53                  super.visitInsn(Opcodes.DUP);
    1.54                  Label ifNotNull = new Label();
    1.55 @@ -147,10 +137,6 @@
    1.56                  // init Fn
    1.57                  super.visitInsn(Opcodes.POP);
    1.58                  super.visitLdcInsn(Type.getObjectType(FindInClass.this.name));
    1.59 -                super.visitMethodInsn(Opcodes.INVOKEVIRTUAL, 
    1.60 -                    "java/lang/Class", "getClassLoader", "()Ljava/lang/ClassLoader;"
    1.61 -                );
    1.62 -                super.visitTypeInsn(Opcodes.CHECKCAST, "org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader");
    1.63                  super.visitLdcInsn(body);
    1.64                  super.visitIntInsn(Opcodes.SIPUSH, args.size());
    1.65                  super.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/String");
    1.66 @@ -161,9 +147,9 @@
    1.67                      super.visitLdcInsn(name);
    1.68                      super.visitInsn(Opcodes.AASTORE);
    1.69                  }
    1.70 -                super.visitMethodInsn(Opcodes.INVOKEVIRTUAL, 
    1.71 -                    "org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader",
    1.72 -                    "define", "(Ljava/lang/String;[Ljava/lang/String;)Lorg/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader$Fn;"
    1.73 +                super.visitMethodInsn(Opcodes.INVOKESTATIC, 
    1.74 +                    "org/apidesign/bck2brwsr/launcher/fximpl/Fn", "define", 
    1.75 +                    "(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/String;)Lorg/apidesign/bck2brwsr/launcher/fximpl/Fn;"
    1.76                  );
    1.77                  // end of Fn init
    1.78                  
    1.79 @@ -171,7 +157,7 @@
    1.80                  super.visitIntInsn(Opcodes.SIPUSH, args.size());
    1.81                  super.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/Object");
    1.82                  super.visitMethodInsn(Opcodes.INVOKEVIRTUAL, 
    1.83 -                    "org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader$Fn", "invoke", "([Ljava/lang/Object;)Ljava/lang/Object;"
    1.84 +                    "org/apidesign/bck2brwsr/launcher/fximpl/Fn", "invoke", "([Ljava/lang/Object;)Ljava/lang/Object;"
    1.85                  );
    1.86                  super.visitInsn(Opcodes.ARETURN);
    1.87              }
    1.88 @@ -183,7 +169,7 @@
    1.89                      FindInClass.this.visitField(
    1.90                          Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, 
    1.91                          "$$bck2brwsr$$" + name, 
    1.92 -                        "Lorg/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader$Fn;", 
    1.93 +                        "Lorg/apidesign/bck2brwsr/launcher/fximpl/Fn;", 
    1.94                          null, null
    1.95                      );
    1.96                  }