# HG changeset patch # User Jaroslav Tulach # Date 1438509405 -7200 # Node ID 493d5960d5204948bdf79ba00a9650ecbdab8f94 # Parent 62b289bb87c7b992e5b6612a7661308e00331ca7 Making sure parameters for non-static method invoked by reflection are correct. diff -r 62b289bb87c7 -r 493d5960d520 rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java --- a/rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Tue Jul 07 07:46:52 2015 +0200 +++ b/rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Sun Aug 02 11:56:45 2015 +0200 @@ -291,6 +291,32 @@ @Compare public boolean isArray() { return new Object[0].getClass().isArray(); } + + @Compare public String copyDataViaReflection() throws Exception { + Data d = new Data(); + d.setName("Hello world!"); + + Method getter = d.getClass().getMethod("getName"); + Object val = getter.invoke(d); + + Data clone = new Data(); + Method setter = d.getClass().getMethod("setName", String.class); + setter.invoke(clone, val); + + return clone.getName(); + } + + @Compare public String copyStaticDataViaReflection() throws Exception { + Data.setStatic("Hello world!"); + + Method getter = Data.class.getMethod("getStatic"); + Object val = getter.invoke(null); + + Method setter = Data.class.getMethod("setStatic", String.class); + setter.invoke(null, val); + + return Data.getStatic(); + } @JavaScriptBody(args = { "arr", "len" }, body="var a = arr.slice(0, len); a.sort(); return a;") private static String[] sort(String[] arr, int len) { @@ -312,4 +338,25 @@ public static abstract class Abst { public abstract int abst(); } + + public static final class Data { + private String name; + private static String nameStatic; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public static String getStatic() { + return nameStatic; + } + + public static void setStatic(String n) { + nameStatic = n; + } + } } diff -r 62b289bb87c7 -r 493d5960d520 rt/emul/mini/src/main/java/java/lang/reflect/Method.java --- a/rt/emul/mini/src/main/java/java/lang/reflect/Method.java Tue Jul 07 07:46:52 2015 +0200 +++ b/rt/emul/mini/src/main/java/java/lang/reflect/Method.java Sun Aug 02 11:56:45 2015 +0200 @@ -531,9 +531,7 @@ "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" + + " p = args;\n" + "} else {\n" + " p = args;\n" + " cll = method._data();"