# HG changeset patch # User Jaroslav Tulach # Date 1392652544 -3600 # Node ID 6ab75674111124a8b80fe6d21a25addbe69cf0e9 # Parent f57fa856ffc44cd093f83cfdfd7b87a0f606f961 Invoking non-static method needs to perform dispatch diff -r f57fa856ffc4 -r 6ab756741111 rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java --- a/rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Mon Feb 17 15:39:34 2014 +0100 +++ b/rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Mon Feb 17 16:55:44 2014 +0100 @@ -250,6 +250,17 @@ } } + @Compare public int callAbst() throws Exception { + class Impl extends Abst { + @Override + public int abst() { + return 10; + } + } + Abst impl = new Impl(); + return (int) Abst.class.getMethod("abst").invoke(impl); + } + @Compare public String componentGetNameForObjectArray() { return (new Object[3]).getClass().getComponentType().getName(); } @@ -296,4 +307,7 @@ return VMTest.create(ReflectionTest.class); } + public static abstract class Abst { + public abstract int abst(); + } } diff -r f57fa856ffc4 -r 6ab756741111 rt/emul/mini/src/main/java/java/lang/reflect/Method.java --- a/rt/emul/mini/src/main/java/java/lang/reflect/Method.java Mon Feb 17 15:39:34 2014 +0100 +++ b/rt/emul/mini/src/main/java/java/lang/reflect/Method.java Mon Feb 17 16:55:44 2014 +0100 @@ -528,15 +528,17 @@ } @JavaScriptBody(args = { "st", "method", "self", "args" }, body = - "var p;\n" + "var p; var cll;\n" + "if (st) {\n" + + " cll = self[method._name() + '__' + method._sig()];\n" + " p = new Array(1);\n" + " p[0] = self;\n" + " p = p.concat(args);\n" + "} else {\n" + " p = args;\n" + + " cll = method._data();" + "}\n" - + "return method._data().apply(self, p);\n" + + "return cll.apply(self, p);\n" ) private static native Object invoke0(boolean isStatic, Method m, Object self, Object[] args);