# HG changeset patch # User Jaroslav Tulach # Date 1371478666 -7200 # Node ID 4ae766848ce0feddbaa01c70dc251cd58c428c81 # Parent 006617ca67070adabe01742a4c4ea15513cfa19b Allow overloaded @JavaScriptBody methods diff -r 006617ca6707 -r 4ae766848ce0 launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader.java --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader.java Mon Jun 17 16:14:55 2013 +0200 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoader.java Mon Jun 17 16:17:46 2013 +0200 @@ -70,7 +70,7 @@ ClassReader cr = new ClassReader(arr); FindInClass tst = new FindInClass(null); cr.accept(tst, 0); - if (tst.found) { + if (tst.found > 0) { ClassWriter w = new ClassWriterEx(cr, ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); FindInClass fic = new FindInClass(w); cr.accept(fic, 0); @@ -101,7 +101,7 @@ private static final class FindInClass extends ClassVisitor { private String name; - private boolean found; + private int found; public FindInClass(ClassVisitor cv) { super(Opcodes.ASM4, cv); @@ -138,7 +138,7 @@ @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { if ("Lorg/apidesign/bck2brwsr/core/JavaScriptBody;".equals(desc)) { // NOI18N - found = true; + found++; return new FindInAnno(); } return super.visitAnnotation(desc, visible); @@ -165,7 +165,7 @@ super.visitFieldInsn( Opcodes.GETSTATIC, FindInClass.this.name, - "$$bck2brwsr$$" + name, + "$$bck2brwsr$$" + name + "_" + found, "Lorg/apidesign/bck2brwsr/launcher/fximpl/Fn;" ); super.visitInsn(Opcodes.DUP); @@ -290,7 +290,7 @@ } FindInClass.this.visitField( Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, - "$$bck2brwsr$$" + name, + "$$bck2brwsr$$" + name + "_" + found, "Lorg/apidesign/bck2brwsr/launcher/fximpl/Fn;", null, null ); diff -r 006617ca6707 -r 4ae766848ce0 launcher/fx/src/test/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoaderTest.java --- a/launcher/fx/src/test/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoaderTest.java Mon Jun 17 16:14:55 2013 +0200 +++ b/launcher/fx/src/test/java/org/apidesign/bck2brwsr/launcher/fximpl/JsClassLoaderTest.java Mon Jun 17 16:17:46 2013 +0200 @@ -114,4 +114,13 @@ throw ex.getTargetException(); } } + + @Test public void overloadedMethod() throws Throwable { + Method plus = methodClass.getMethod("plus", int.class); + try { + assertEquals(plus.invoke(null, 10), 10); + } catch (InvocationTargetException ex) { + throw ex.getTargetException(); + } + } } \ No newline at end of file diff -r 006617ca6707 -r 4ae766848ce0 launcher/fx/src/test/java/org/apidesign/bck2brwsr/launcher/fximpl/JsMethods.java --- a/launcher/fx/src/test/java/org/apidesign/bck2brwsr/launcher/fximpl/JsMethods.java Mon Jun 17 16:14:55 2013 +0200 +++ b/launcher/fx/src/test/java/org/apidesign/bck2brwsr/launcher/fximpl/JsMethods.java Mon Jun 17 16:17:46 2013 +0200 @@ -31,4 +31,7 @@ @JavaScriptBody(args = {"x", "y" }, body = "return x + y;") public static native int plus(int x, int y); + + @JavaScriptBody(args = {"x"}, body = "return x;") + public static native int plus(int x); }