--- old/src/jdk.jdi/share/classes/com/sun/tools/jdi/JNITypeParser.java 2020-04-12 17:30:16.000000000 -0700 +++ new/src/jdk.jdi/share/classes/com/sun/tools/jdi/JNITypeParser.java 2020-04-12 17:30:16.000000000 -0700 @@ -77,12 +77,12 @@ index = typeName.indexOf("/"); // check if it's a hidden class if (index < 0) { sb.append(typeName.replace('.', '/')); + sb.append(";"); } else { sb.append(typeName.substring(0, index).replace('.', '/')); - sb.append("."); - sb.append(typeName.substring(index+1, typeName.length())); + sb.append(";"); + sb.append(typeName.substring(index, typeName.length())); } - sb.append(';'); } return sb.toString(); @@ -165,9 +165,15 @@ case (JDWP.Tag.OBJECT): int endClass = signature.indexOf(SIGNATURE_ENDCLASS, currentIndex); - String retVal = signature.substring(currentIndex - 1, - endClass + 1); - currentIndex = endClass + 1; + String retVal; + if ((endClass+1) < signature.length() && signature.charAt(endClass+1) == '/') { + // hidden class + retVal = signature.substring(currentIndex - 1); + currentIndex = signature.length(); + } else { + retVal = signature.substring(currentIndex - 1, endClass + 1); + currentIndex = endClass + 1; + } return retVal; case (JDWP.Tag.VOID): @@ -210,14 +216,14 @@ currentIndex); String retVal = signature.substring(currentIndex, endClass); - int index = retVal.indexOf("."); - if (index < 0) { - retVal = retVal.replace('/', '.'); + if ((endClass+1) < signature.length() && signature.charAt(endClass+1) == '/') { + // hidden class + retVal = retVal.replace('/', '.') + signature.substring(endClass + 1); + currentIndex = signature.length(); } else { - retVal = retVal.substring(0, index).replace('/', '.') + "/" + - retVal.substring(index + 1, retVal.length()); + retVal = retVal.replace('/', '.'); + currentIndex = endClass + 1; } - currentIndex = endClass + 1; return retVal; case (JDWP.Tag.FLOAT):