1.1 --- a/rt/emul/mini/src/main/java/java/lang/Class.java Sun Nov 23 20:50:19 2014 +0100
1.2 +++ b/rt/emul/mini/src/main/java/java/lang/Class.java Sun Nov 23 21:55:46 2014 +0100
1.3 @@ -1547,6 +1547,7 @@
1.4 *
1.5 * @return an array of interfaces implemented by this class.
1.6 */
1.7 + @JavaScriptBody(args = { }, body = "return this.interfaces();")
1.8 public native Class<?>[] getInterfaces();
1.9
1.10 /**
2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Nov 23 20:50:19 2014 +0100
2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Nov 23 21:55:46 2014 +0100
2.3 @@ -296,6 +296,21 @@
2.4 append(accessClass("java_lang_Class(true);"));
2.5 append("\n CLS.$class.jvmName = '").append(cn).append("';");
2.6 append("\n CLS.$class.superclass = sprcls;");
2.7 + append("\n CLS.$class.interfaces = function() { return [");
2.8 + {
2.9 + boolean first = true;
2.10 + for (String intrfc : jc.getSuperInterfaces()) {
2.11 + if (!first) {
2.12 + append(",");
2.13 + }
2.14 + requireReference(intrfc);
2.15 + String mangledIface = mangleClassName(intrfc);
2.16 + append("\n ");
2.17 + append(accessClass(mangledIface)).append("(false).constructor.$class");
2.18 + first = false;
2.19 + }
2.20 + }
2.21 + append("\n ]; };");
2.22 append("\n CLS.$class.access = ").append(jc.getAccessFlags()+";");
2.23 append("\n CLS.$class.cnstr = CLS;");
2.24 byte[] classAnno = jc.findAnnotationData(false);
3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Sun Nov 23 20:50:19 2014 +0100
3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Sun Nov 23 21:55:46 2014 +0100
3.3 @@ -246,4 +246,12 @@
3.4 1.0
3.5 );
3.6 }
3.7 +
3.8 + @Test public void nameOfSuperInterface() throws Exception {
3.9 + String exp = Classes.superInterface();
3.10 + assertExec("Can get name of superinterface?", Classes.class,
3.11 + "superInterface__Ljava_lang_String_2",
3.12 + exp
3.13 + );
3.14 + }
3.15 }
4.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Sun Nov 23 20:50:19 2014 +0100
4.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Sun Nov 23 21:55:46 2014 +0100
4.3 @@ -260,6 +260,23 @@
4.4 return obj instanceof Serializable;
4.5 }
4.6
4.7 + public static String superInterface() {
4.8 + return dumpInterfaces(SuperSerial.class);
4.9 + }
4.10 +
4.11 + private static String dumpInterfaces(final Class<?> aClass) {
4.12 + final Class<?>[] arr = aClass.getInterfaces();
4.13 + StringBuilder sb = new StringBuilder();
4.14 + for (Class<?> c : arr) {
4.15 + sb.append(c.getName()).append("\n");
4.16 + }
4.17 + return sb.toString();
4.18 + }
4.19 +
4.20 + public static String superInterfaceInst() {
4.21 + return dumpInterfaces(new SuperSerial() {}.getClass());
4.22 + }
4.23 +
4.24 private static interface SuperSerial extends Serializable {
4.25 }
4.26 }