1.1 --- a/boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java Tue Mar 31 15:40:22 2015 +0200
1.2 +++ b/boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java Sat Apr 11 07:41:04 2015 +0200
1.3 @@ -71,6 +71,7 @@
1.4 import javax.lang.model.element.TypeElement;
1.5 import javax.lang.model.element.VariableElement;
1.6 import javax.lang.model.type.ArrayType;
1.7 +import javax.lang.model.type.DeclaredType;
1.8 import javax.lang.model.type.ExecutableType;
1.9 import javax.lang.model.type.TypeKind;
1.10 import javax.lang.model.type.TypeMirror;
1.11 @@ -295,8 +296,8 @@
1.12 tm = ((ArrayType)tm).getComponentType();
1.13 }
1.14 sb.append('L');
1.15 - sb.append(tm.toString().replace('.', '/'));
1.16 - sb.append(';');
1.17 + Element elm = processingEnv.getTypeUtils().asElement(tm);
1.18 + dumpElems(sb, elm, ';');
1.19 }
1.20 }
1.21 sb.append(')');
1.22 @@ -304,6 +305,21 @@
1.23 }
1.24 }
1.25
1.26 + private static void dumpElems(StringBuilder sb, Element e, char after) {
1.27 + if (e == null) {
1.28 + return;
1.29 + }
1.30 + if (e.getKind() == ElementKind.PACKAGE) {
1.31 + PackageElement pe = (PackageElement) e;
1.32 + sb.append(pe.getQualifiedName().toString().replace('.', '/')).append('/');
1.33 + return;
1.34 + }
1.35 + Element p = e.getEnclosingElement();
1.36 + dumpElems(sb, p, '$');
1.37 + sb.append(e.getSimpleName());
1.38 + sb.append(after);
1.39 + }
1.40 +
1.41 private void generateJavaScriptBodyList(Map<String,Set<TypeElement>> bodies) {
1.42 if (bodies.isEmpty()) {
1.43 return;
2.1 --- a/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java Tue Mar 31 15:40:22 2015 +0200
2.2 +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java Sat Apr 11 07:41:04 2015 +0200
2.3 @@ -183,6 +183,16 @@
2.4 Method st = methodClass.getMethod("parseInt", String.class);
2.5 assertEquals(st.invoke(null, "42"), 42, "Meaning of JavaScript?");
2.6 }
2.7 +
2.8 + @Test public void passEnum() throws Throwable {
2.9 + Class<?> enmClazz = methodClass.getDeclaredClasses()[0];
2.10 + assertTrue(Enum.class.isAssignableFrom(enmClazz), "It is an enum: " + enmClazz);
2.11 + Class<? extends Enum> enmClazz2 = enmClazz.asSubclass(Enum.class);
2.12 + Method st = methodClass.getMethod("fromEnum", enmClazz);
2.13 +
2.14 + Object valueB = Enum.valueOf(enmClazz2, "B");
2.15 + assertEquals(st.invoke(null, valueB), "B", "Converts to string");
2.16 + }
2.17
2.18 @Test public void firstLong() throws Throwable {
2.19 Method st = methodClass.getMethod("chooseLong", boolean.class, boolean.class, long.class, long.class);
3.1 --- a/boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java Tue Mar 31 15:40:22 2015 +0200
3.2 +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java Sat Apr 11 07:41:04 2015 +0200
3.3 @@ -106,6 +106,9 @@
3.4 @JavaScriptBody(args = { "v" }, javacall = true, body = "return @java.lang.Integer::parseInt(Ljava/lang/String;)(v);")
3.5 public static native int parseInt(String v);
3.6
3.7 + @JavaScriptBody(args = { "v" }, body = "return v.toString();")
3.8 + public static native String fromEnum(Enm v);
3.9 +
3.10 @JavaScriptBody(args = "arr", body = "return arr;")
3.11 public static native Object[] arr(Object[] arr);
3.12
3.13 @@ -137,4 +140,8 @@
3.14
3.15 @JavaScriptBody(args = { "x" }, keepAlive = false, body = "throw 'Do not call me!'")
3.16 public static native int checkAllowGC(Object x);
3.17 +
3.18 + enum Enm {
3.19 + A, B;
3.20 + }
3.21 }