changeset 15319:8c57f4c293bb jdk-9+131

8163476: java/lang/StackWalker/VerifyStackTrace.java fails after JDK-8163369 Reviewed-by: igerasim, chegar
author redestad
date Tue, 09 Aug 2016 15:02:27 +0200
parents 5b6bd1fc3d46
children b9021fabcd1e ef0ba6e50464
files src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java src/java.base/share/classes/java/lang/invoke/LambdaForm.java src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin.java test/java/lang/StackWalker/VerifyStackTrace.java
diffstat 4 files changed, 12 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java	Tue Aug 09 10:00:31 2016 +0200
+++ b/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java	Tue Aug 09 15:02:27 2016 +0200
@@ -191,12 +191,12 @@
         boolean doesAlloc = (which == LF_NEWINVSPECIAL);
         String linkerName, lambdaName;
         switch (which) {
-        case LF_INVVIRTUAL:    linkerName = "linkToVirtual";    lambdaName = "invokeVirtual";    break;
-        case LF_INVSTATIC:     linkerName = "linkToStatic";     lambdaName = "invokeStatic";     break;
-        case LF_INVSTATIC_INIT:linkerName = "linkToStatic";     lambdaName = "invokeStaticInit"; break;
-        case LF_INVSPECIAL:    linkerName = "linkToSpecial";    lambdaName = "invokeSpecial";    break;
-        case LF_INVINTERFACE:  linkerName = "linkToInterface";  lambdaName = "invokeInterface";  break;
-        case LF_NEWINVSPECIAL: linkerName = "linkToSpecial";    lambdaName = "newInvokeSpecial"; break;
+        case LF_INVVIRTUAL:    linkerName = "linkToVirtual";    lambdaName = "DMH.invokeVirtual";    break;
+        case LF_INVSTATIC:     linkerName = "linkToStatic";     lambdaName = "DMH.invokeStatic";     break;
+        case LF_INVSTATIC_INIT:linkerName = "linkToStatic";     lambdaName = "DMH.invokeStaticInit"; break;
+        case LF_INVSPECIAL:    linkerName = "linkToSpecial";    lambdaName = "DMH.invokeSpecial";    break;
+        case LF_INVINTERFACE:  linkerName = "linkToInterface";  lambdaName = "DMH.invokeInterface";  break;
+        case LF_NEWINVSPECIAL: linkerName = "linkToSpecial";    lambdaName = "DMH.newInvokeSpecial"; break;
         default:  throw new InternalError("which="+which);
         }
 
--- a/src/java.base/share/classes/java/lang/invoke/LambdaForm.java	Tue Aug 09 10:00:31 2016 +0200
+++ b/src/java.base/share/classes/java/lang/invoke/LambdaForm.java	Tue Aug 09 15:02:27 2016 +0200
@@ -783,7 +783,9 @@
         }
         MethodType invokerType = methodType();
         assert(vmentry == null || vmentry.getMethodType().basicType().equals(invokerType));
-        MemberName member = new MemberName(lookupClass, debugName, invokerType, REF_invokeStatic);
+        int dot = debugName.indexOf('.');
+        String methodName = (dot > 0) ? debugName.substring(dot + 1) : debugName;
+        MemberName member = new MemberName(lookupClass, methodName, invokerType, REF_invokeStatic);
         MemberName resolvedMember = MemberName.getFactory().resolveOrNull(REF_invokeStatic, member, lookupClass);
         if (resolvedMember != null) {
             vmentry = resolvedMember;
--- a/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin.java	Tue Aug 09 10:00:31 2016 +0200
+++ b/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/GenerateJLIClassesPlugin.java	Tue Aug 09 15:02:27 2016 +0200
@@ -117,7 +117,7 @@
      */
     public static Map<String, List<String>> defaultDMHMethods() {
         return Map.of(
-            DMH_INVOKE_VIRTUAL, List.of("_L", "L_L", "LI_I"),
+            DMH_INVOKE_VIRTUAL, List.of("_L", "L_L", "LI_I", "LL_V"),
             DMH_INVOKE_SPECIAL, List.of("L_I", "L_L", "LF_L", "LD_L", "LL_L",
                 "L3_L", "L4_L", "L5_L", "L6_L", "L7_L", "LI_I", "LI_L", "LIL_I",
                 "LII_I", "LII_L", "LLI_L", "LLI_I", "LILI_I", "LIIL_L",
--- a/test/java/lang/StackWalker/VerifyStackTrace.java	Tue Aug 09 10:00:31 2016 +0200
+++ b/test/java/lang/StackWalker/VerifyStackTrace.java	Tue Aug 09 15:02:27 2016 +0200
@@ -205,6 +205,8 @@
                     .replaceAll("java.base@(\\d+\\.){0,3}(\\d+)/", "java.base/")
                     .replaceAll("/[0-9]+\\.run", "/xxxxxxxx.run")
                     .replaceAll("/[0-9]+\\.invoke", "/xxxxxxxx.invoke")
+                    .replaceAll("DirectMethodHandle\\$Holder", "LambdaForm\\$DMH")
+                    .replaceAll("DMH\\.invoke", "DMH/xxxxxxxx.invoke")
                     .replaceAll("\\$[0-9]+", "\\$??");
         } else {
             return produced;