--- old/src/jdk.jdi/share/classes/com/sun/tools/jdi/JNITypeParser.java 2020-03-26 16:01:08.000000000 -0700 +++ new/src/jdk.jdi/share/classes/com/sun/tools/jdi/JNITypeParser.java 2020-03-26 16:01:08.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,38 +43,45 @@ this.signature = signature; } - static String typeNameToSignature(String signature) { + static String typeNameToSignature(String typeName) { StringBuilder sb = new StringBuilder(); - int firstIndex = signature.indexOf('['); + int firstIndex = typeName.indexOf('['); int index = firstIndex; while (index != -1) { sb.append('['); - index = signature.indexOf('[', index + 1); + index = typeName.indexOf('[', index + 1); } if (firstIndex != -1) { - signature = signature.substring(0, firstIndex); + typeName = typeName.substring(0, firstIndex); } - if (signature.equals("boolean")) { + if (typeName.equals("boolean")) { sb.append('Z'); - } else if (signature.equals("byte")) { + } else if (typeName.equals("byte")) { sb.append('B'); - } else if (signature.equals("char")) { + } else if (typeName.equals("char")) { sb.append('C'); - } else if (signature.equals("short")) { + } else if (typeName.equals("short")) { sb.append('S'); - } else if (signature.equals("int")) { + } else if (typeName.equals("int")) { sb.append('I'); - } else if (signature.equals("long")) { + } else if (typeName.equals("long")) { sb.append('J'); - } else if (signature.equals("float")) { + } else if (typeName.equals("float")) { sb.append('F'); - } else if (signature.equals("double")) { + } else if (typeName.equals("double")) { sb.append('D'); } else { sb.append('L'); - sb.append(signature.replace('.', '/')); + index = typeName.indexOf("/"); // check if it's a hidden class + if (index < 0) { + sb.append(typeName.replace('.', '/')); + } else { + sb.append(typeName.substring(0, index).replace('.', '/')); + sb.append("."); + sb.append(typeName.substring(index+1, typeName.length())); + } sb.append(';'); } @@ -203,7 +210,13 @@ currentIndex); String retVal = signature.substring(currentIndex, endClass); - retVal = retVal.replace('/','.'); + int index = retVal.indexOf("."); + if (index < 0) { + retVal = retVal.replace('/', '.'); + } else { + retVal = retVal.substring(0, index).replace('/', '.') + "/" + + retVal.substring(index + 1, retVal.length()); + } currentIndex = endClass + 1; return retVal;