Allow overloaded @JavaScriptBody methods classloader
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 17 Jun 2013 16:17:46 +0200
branchclassloader
changeset 11784ae766848ce0
parent 1177 006617ca6707
child 1179 2fee889b9830
Allow overloaded @JavaScriptBody methods
launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader.java
launcher/fx/src/test/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoaderTest.java
launcher/fx/src/test/java/org/apidesign/bck2brwsr/launcher/fximpl/JsMethods.java
     1.1 --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader.java	Mon Jun 17 16:14:55 2013 +0200
     1.2 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader.java	Mon Jun 17 16:17:46 2013 +0200
     1.3 @@ -70,7 +70,7 @@
     1.4                  ClassReader cr = new ClassReader(arr);
     1.5                  FindInClass tst = new FindInClass(null);
     1.6                  cr.accept(tst, 0);
     1.7 -                if (tst.found) {
     1.8 +                if (tst.found > 0) {
     1.9                      ClassWriter w = new ClassWriterEx(cr, ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
    1.10                      FindInClass fic = new FindInClass(w);
    1.11                      cr.accept(fic, 0);
    1.12 @@ -101,7 +101,7 @@
    1.13      
    1.14      private static final class FindInClass extends ClassVisitor {
    1.15          private String name;
    1.16 -        private boolean found;
    1.17 +        private int found;
    1.18          
    1.19          public FindInClass(ClassVisitor cv) {
    1.20              super(Opcodes.ASM4, cv);
    1.21 @@ -138,7 +138,7 @@
    1.22              @Override
    1.23              public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
    1.24                  if ("Lorg/apidesign/bck2brwsr/core/JavaScriptBody;".equals(desc)) { // NOI18N
    1.25 -                    found = true;
    1.26 +                    found++;
    1.27                      return new FindInAnno();
    1.28                  }
    1.29                  return super.visitAnnotation(desc, visible);
    1.30 @@ -165,7 +165,7 @@
    1.31                  
    1.32                  super.visitFieldInsn(
    1.33                      Opcodes.GETSTATIC, FindInClass.this.name, 
    1.34 -                    "$$bck2brwsr$$" + name, 
    1.35 +                    "$$bck2brwsr$$" + name + "_" + found, 
    1.36                      "Lorg/apidesign/bck2brwsr/launcher/fximpl/Fn;"
    1.37                  );
    1.38                  super.visitInsn(Opcodes.DUP);
    1.39 @@ -290,7 +290,7 @@
    1.40                      }
    1.41                      FindInClass.this.visitField(
    1.42                          Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, 
    1.43 -                        "$$bck2brwsr$$" + name, 
    1.44 +                        "$$bck2brwsr$$" + name + "_" + found, 
    1.45                          "Lorg/apidesign/bck2brwsr/launcher/fximpl/Fn;", 
    1.46                          null, null
    1.47                      );
     2.1 --- a/launcher/fx/src/test/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoaderTest.java	Mon Jun 17 16:14:55 2013 +0200
     2.2 +++ b/launcher/fx/src/test/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoaderTest.java	Mon Jun 17 16:17:46 2013 +0200
     2.3 @@ -114,4 +114,13 @@
     2.4              throw ex.getTargetException();
     2.5          }
     2.6      }
     2.7 +
     2.8 +    @Test public void overloadedMethod() throws Throwable {
     2.9 +        Method plus = methodClass.getMethod("plus", int.class);
    2.10 +        try {
    2.11 +            assertEquals(plus.invoke(null, 10), 10);
    2.12 +        } catch (InvocationTargetException ex) {
    2.13 +            throw ex.getTargetException();
    2.14 +        }
    2.15 +    }
    2.16  }
    2.17 \ No newline at end of file
     3.1 --- a/launcher/fx/src/test/java/org/apidesign/bck2brwsr/launcher/fximpl/JsMethods.java	Mon Jun 17 16:14:55 2013 +0200
     3.2 +++ b/launcher/fx/src/test/java/org/apidesign/bck2brwsr/launcher/fximpl/JsMethods.java	Mon Jun 17 16:17:46 2013 +0200
     3.3 @@ -31,4 +31,7 @@
     3.4      
     3.5      @JavaScriptBody(args = {"x", "y" }, body = "return x + y;")
     3.6      public static native int plus(int x, int y);
     3.7 +    
     3.8 +    @JavaScriptBody(args = {"x"}, body = "return x;")
     3.9 +    public static native int plus(int x);
    3.10  }