1.1 --- a/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/AnnotationImpl.java Mon Feb 04 23:25:32 2013 +0100
1.2 +++ b/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/AnnotationImpl.java Tue Feb 05 00:00:22 2013 +0100
1.3 @@ -41,6 +41,15 @@
1.4 + "function f(val, prop, clazz) {\n"
1.5 + " return function() {\n"
1.6 + " if (clazz == null) return val[prop];\n"
1.7 + + " if (clazz.isArray__Z()) {\n"
1.8 + + " var valarr = val[prop];\n"
1.9 + + " var cmp = clazz.getComponentType__Ljava_lang_Class_2();\n"
1.10 + + " var retarr = vm.java_lang_reflect_Array(false).newInstance__Ljava_lang_Object_2Ljava_lang_Class_2I(cmp, valarr.length);\n"
1.11 + + " for (var i = 0; i < valarr.length; i++) {\n"
1.12 + + " retarr[i] = CLS.prototype.c__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_Object_2(cmp, valarr[i]);\n"
1.13 + + " }\n"
1.14 + + " return retarr;\n"
1.15 + + " }\n"
1.16 + " return CLS.prototype.c__Ljava_lang_Object_2Ljava_lang_Class_2Ljava_lang_Object_2(clazz, val[prop]);\n"
1.17 + " };\n"
1.18 + "}\n"
1.19 @@ -109,7 +118,12 @@
1.20 for (Method m : marr) {
1.21 arr[pos++] = MethodImpl.toSignature(m);
1.22 arr[pos++] = m.getName();
1.23 - arr[pos++] = m.getReturnType().isAnnotation() ? m.getReturnType() : null;
1.24 + final Class<?> rt = m.getReturnType();
1.25 + if (rt.isArray()) {
1.26 + arr[pos++] = rt.getComponentType().isAnnotation() ? rt : null;
1.27 + } else {
1.28 + arr[pos++] = rt.isAnnotation() ? rt : null;
1.29 + }
1.30 }
1.31 return arr;
1.32 }
2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Mon Feb 04 23:25:32 2013 +0100
2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Tue Feb 05 00:00:22 2013 +0100
2.3 @@ -105,6 +105,9 @@
2.4 @Test public void jsInnerAnnotation() throws Exception {
2.5 assertExec("Check inner annotation", Classes.class, "getInnerNamer__I", Double.valueOf(Classes.getInnerNamer()));
2.6 }
2.7 + @Test public void jsInnerAnnotationFromArray() throws Exception {
2.8 + assertExec("Check inner annotation", Classes.class, "getInnerNamers__I", Double.valueOf(Classes.getInnerNamers()));
2.9 + }
2.10 @Test public void javaInvokeMethod() throws Exception {
2.11 assertEquals(Classes.reflectiveMethodCall(true, "name"), "java.io.IOException", "Calls the name() method via reflection");
2.12 }
3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Mon Feb 04 23:25:32 2013 +0100
3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Tue Feb 05 00:00:22 2013 +0100
3.3 @@ -153,6 +153,15 @@
3.4 assert cm != null : "ClassesNamer is present";
3.5 return cm.anno().value();
3.6 }
3.7 + public static int getInnerNamers() {
3.8 + ClassesMarker cm = Classes.class.getAnnotation(ClassesMarker.class);
3.9 + assert cm != null : "ClassesNamer is present";
3.10 + int sum = 0;
3.11 + for (ClassesMarker.Anno anno : cm.subs()) {
3.12 + sum += anno.value();
3.13 + }
3.14 + return sum;
3.15 + }
3.16
3.17 public static String intType() {
3.18 return Integer.TYPE.getName();