# HG changeset patch # User Jaroslav Tulach # Date 1452859542 -3600 # Node ID b189d001b9bd43056c3e5353c4e71f2a0d4b121b # Parent e633fed120649b94f111d63024075585a21d4226 #257579: Erase the parameter types before computing the signature diff -r e633fed12064 -r b189d001b9bd boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java --- a/boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java Fri Jan 15 11:41:37 2016 +0100 +++ b/boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java Fri Jan 15 13:05:42 2016 +0100 @@ -75,6 +75,7 @@ import javax.lang.model.type.ExecutableType; import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.Types; import javax.tools.Diagnostic; import javax.tools.FileObject; import javax.tools.StandardLocation; @@ -301,7 +302,8 @@ tm = ((ArrayType)tm).getComponentType(); } sb.append('L'); - Element elm = processingEnv.getTypeUtils().asElement(tm); + Types tu = processingEnv.getTypeUtils(); + Element elm = tu.asElement(tu.erasure(tm)); dumpElems(sb, elm, ';'); } } @@ -413,7 +415,7 @@ return; } final TypeElement selfType = (TypeElement)m.getEnclosingElement(); - + Types tu = processingEnv.getTypeUtils(); source.append("\n public java.lang.Object ") .append(mangled) @@ -483,7 +485,7 @@ sep = ""; for (VariableElement ve : m.getParameters()) { source.append(sep); - source.append("(").append(ve.asType()); + source.append("(").append(tu.erasure(ve.asType())); source.append(")arg").append(++cnt); sep = ", "; } diff -r e633fed12064 -r b189d001b9bd boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java --- a/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java Fri Jan 15 11:41:37 2016 +0100 +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java Fri Jan 15 13:05:42 2016 +0100 @@ -46,6 +46,8 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.util.HashMap; +import java.util.Map; import org.netbeans.html.boot.spi.Fn; import org.testng.Assert; import static org.testng.Assert.*; @@ -244,6 +246,13 @@ assertEquals(res.length, 1, "One element"); assertEquals(res[0], "Ahoj", "The right string"); } + + @Test public void parametricCallback() throws Throwable { + Map map = new HashMap(); + Method st = methodClass.getMethod("callParamTypes", Map.class, int.class); + st.invoke(null, map, 42); + assertEquals(map.get("key"), Integer.valueOf(42), "The right value"); + } @Test public void checkTheTypeOfThrownException() throws Throwable { FnContext.currentPresenter(null); diff -r e633fed12064 -r b189d001b9bd boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java --- a/boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java Fri Jan 15 11:41:37 2016 +0100 +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java Fri Jan 15 13:05:42 2016 +0100 @@ -42,6 +42,7 @@ */ package org.netbeans.html.boot.impl; +import java.util.Map; import net.java.html.js.JavaScriptBody; import net.java.html.js.JavaScriptResource; @@ -140,8 +141,14 @@ @JavaScriptBody(args = { "x" }, keepAlive = false, body = "throw 'Do not call me!'") public static native int checkAllowGC(java.lang.Object x); + + @JavaScriptBody(args = { "map", "value" }, javacall = true, body = + "map.@java.util.Map::put(Ljava/lang/Object;Ljava/lang/Object;)('key',value);" + ) + public static native void callParamTypes(Map map, int value); enum Enm { A, B; } } +