Making sure parameters for non-static method invoked by reflection are correct.
1.1 --- a/rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Tue Jul 07 07:46:52 2015 +0200
1.2 +++ b/rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Sun Aug 02 11:56:45 2015 +0200
1.3 @@ -291,6 +291,32 @@
1.4 @Compare public boolean isArray() {
1.5 return new Object[0].getClass().isArray();
1.6 }
1.7 +
1.8 + @Compare public String copyDataViaReflection() throws Exception {
1.9 + Data d = new Data();
1.10 + d.setName("Hello world!");
1.11 +
1.12 + Method getter = d.getClass().getMethod("getName");
1.13 + Object val = getter.invoke(d);
1.14 +
1.15 + Data clone = new Data();
1.16 + Method setter = d.getClass().getMethod("setName", String.class);
1.17 + setter.invoke(clone, val);
1.18 +
1.19 + return clone.getName();
1.20 + }
1.21 +
1.22 + @Compare public String copyStaticDataViaReflection() throws Exception {
1.23 + Data.setStatic("Hello world!");
1.24 +
1.25 + Method getter = Data.class.getMethod("getStatic");
1.26 + Object val = getter.invoke(null);
1.27 +
1.28 + Method setter = Data.class.getMethod("setStatic", String.class);
1.29 + setter.invoke(null, val);
1.30 +
1.31 + return Data.getStatic();
1.32 + }
1.33
1.34 @JavaScriptBody(args = { "arr", "len" }, body="var a = arr.slice(0, len); a.sort(); return a;")
1.35 private static String[] sort(String[] arr, int len) {
1.36 @@ -312,4 +338,25 @@
1.37 public static abstract class Abst {
1.38 public abstract int abst();
1.39 }
1.40 +
1.41 + public static final class Data {
1.42 + private String name;
1.43 + private static String nameStatic;
1.44 +
1.45 + public String getName() {
1.46 + return name;
1.47 + }
1.48 +
1.49 + public void setName(String name) {
1.50 + this.name = name;
1.51 + }
1.52 +
1.53 + public static String getStatic() {
1.54 + return nameStatic;
1.55 + }
1.56 +
1.57 + public static void setStatic(String n) {
1.58 + nameStatic = n;
1.59 + }
1.60 + }
1.61 }
2.1 --- a/rt/emul/mini/src/main/java/java/lang/reflect/Method.java Tue Jul 07 07:46:52 2015 +0200
2.2 +++ b/rt/emul/mini/src/main/java/java/lang/reflect/Method.java Sun Aug 02 11:56:45 2015 +0200
2.3 @@ -531,9 +531,7 @@
2.4 "var p; var cll;\n"
2.5 + "if (st) {\n"
2.6 + " cll = self[method._name() + '__' + method._sig()];\n"
2.7 - + " p = new Array(1);\n"
2.8 - + " p[0] = self;\n"
2.9 - + " p = p.concat(args);\n"
2.10 + + " p = args;\n"
2.11 + "} else {\n"
2.12 + " p = args;\n"
2.13 + " cll = method._data();"