8184689: Test applications/ctw/Modules.java fails with AssertionError in sun.hotspot.tools.ctw.Utils.fileNameToClassName

Reviewed-by: kvn
This commit is contained in:
Igor Ignatyev 2017-08-14 12:35:38 -07:00
parent 4a77945c89
commit abf7e33aa1
2 changed files with 9 additions and 6 deletions

View File

@ -43,9 +43,16 @@ public class ClassPathJimageEntry extends PathHandler.PathEntry {
return Arrays.stream(reader.getEntryNames())
.filter(name -> name.endsWith(".class"))
.filter(name -> !name.endsWith("module-info.class"))
.map(ClassPathJimageEntry::toFileName)
.map(Utils::fileNameToClassName);
}
private static String toFileName(String name) {
final char nameSeparator = '/';
assert name.charAt(0) == nameSeparator : name;
return name.substring(name.indexOf(nameSeparator, 1) + 1);
}
@Override
protected String description() {
return "# jimage: " + root;

View File

@ -203,18 +203,14 @@ public class Utils {
* Converts the filename to classname.
*
* @param filename filename to convert
* @return corresponding classname.
* @return corresponding classname
* @throws AssertionError if filename isn't valid filename for class file -
* {@link #isClassFile(String)}
*/
public static String fileNameToClassName(String filename) {
assert isClassFile(filename);
// workaround for the class naming in jimage : /<module>/<class_name>
final char nameSeparator = '/';
int nameStart = filename.charAt(0) == nameSeparator
? filename.indexOf(nameSeparator, 1) + 1
: 0;
return filename.substring(nameStart, filename.length() - CLASSFILE_EXT.length())
return filename.substring(0, filename.length() - CLASSFILE_EXT.length())
.replace(nameSeparator, '.');
}