#257579: Erase the parameter types before computing the signature
authorJaroslav Tulach <jtulach@netbeans.org>
Fri, 15 Jan 2016 13:05:42 +0100
changeset 1043b189d001b9bd
parent 1042 e633fed12064
child 1044 f21fa2508650
#257579: Erase the parameter types before computing the signature
boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java
boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java
boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java
     1.1 --- a/boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java	Fri Jan 15 11:41:37 2016 +0100
     1.2 +++ b/boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java	Fri Jan 15 13:05:42 2016 +0100
     1.3 @@ -75,6 +75,7 @@
     1.4  import javax.lang.model.type.ExecutableType;
     1.5  import javax.lang.model.type.TypeKind;
     1.6  import javax.lang.model.type.TypeMirror;
     1.7 +import javax.lang.model.util.Types;
     1.8  import javax.tools.Diagnostic;
     1.9  import javax.tools.FileObject;
    1.10  import javax.tools.StandardLocation;
    1.11 @@ -301,7 +302,8 @@
    1.12                          tm = ((ArrayType)tm).getComponentType();
    1.13                      }
    1.14                      sb.append('L');
    1.15 -                    Element elm = processingEnv.getTypeUtils().asElement(tm);
    1.16 +                    Types tu = processingEnv.getTypeUtils();
    1.17 +                    Element elm = tu.asElement(tu.erasure(tm));
    1.18                      dumpElems(sb, elm, ';');
    1.19                  }
    1.20              }
    1.21 @@ -413,7 +415,7 @@
    1.22              return;
    1.23          }
    1.24          final TypeElement selfType = (TypeElement)m.getEnclosingElement();
    1.25 -
    1.26 +        Types tu = processingEnv.getTypeUtils();
    1.27  
    1.28          source.append("\n  public java.lang.Object ")
    1.29                  .append(mangled)
    1.30 @@ -483,7 +485,7 @@
    1.31          sep = "";
    1.32          for (VariableElement ve : m.getParameters()) {
    1.33              source.append(sep);
    1.34 -            source.append("(").append(ve.asType());
    1.35 +            source.append("(").append(tu.erasure(ve.asType()));
    1.36              source.append(")arg").append(++cnt);
    1.37              sep = ", ";
    1.38          }
     2.1 --- a/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java	Fri Jan 15 11:41:37 2016 +0100
     2.2 +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsClassLoaderBase.java	Fri Jan 15 13:05:42 2016 +0100
     2.3 @@ -46,6 +46,8 @@
     2.4  import java.lang.reflect.InvocationTargetException;
     2.5  import java.lang.reflect.Method;
     2.6  import java.lang.reflect.Modifier;
     2.7 +import java.util.HashMap;
     2.8 +import java.util.Map;
     2.9  import org.netbeans.html.boot.spi.Fn;
    2.10  import org.testng.Assert;
    2.11  import static org.testng.Assert.*;
    2.12 @@ -244,6 +246,13 @@
    2.13          assertEquals(res.length, 1, "One element");
    2.14          assertEquals(res[0], "Ahoj", "The right string");
    2.15      }
    2.16 +
    2.17 +    @Test public void parametricCallback() throws Throwable {
    2.18 +        Map<String,Integer> map = new HashMap<String, Integer>();
    2.19 +        Method st = methodClass.getMethod("callParamTypes", Map.class, int.class);
    2.20 +        st.invoke(null, map, 42);
    2.21 +        assertEquals(map.get("key"), Integer.valueOf(42), "The right value");
    2.22 +    }
    2.23      
    2.24     @Test public void checkTheTypeOfThrownException() throws Throwable {
    2.25          FnContext.currentPresenter(null);
     3.1 --- a/boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java	Fri Jan 15 11:41:37 2016 +0100
     3.2 +++ b/boot/src/test/java/org/netbeans/html/boot/impl/JsMethods.java	Fri Jan 15 13:05:42 2016 +0100
     3.3 @@ -42,6 +42,7 @@
     3.4   */
     3.5  package org.netbeans.html.boot.impl;
     3.6  
     3.7 +import java.util.Map;
     3.8  import net.java.html.js.JavaScriptBody;
     3.9  import net.java.html.js.JavaScriptResource;
    3.10  
    3.11 @@ -140,8 +141,14 @@
    3.12      
    3.13      @JavaScriptBody(args = { "x" }, keepAlive = false, body = "throw 'Do not call me!'")
    3.14      public static native int checkAllowGC(java.lang.Object x);
    3.15 +
    3.16 +    @JavaScriptBody(args = { "map", "value" }, javacall = true, body =
    3.17 +       "map.@java.util.Map::put(Ljava/lang/Object;Ljava/lang/Object;)('key',value);"
    3.18 +    )
    3.19 +    public static native void callParamTypes(Map<String,Integer> map, int value);
    3.20      
    3.21      enum Enm {
    3.22          A, B;
    3.23      }
    3.24  }
    3.25 +