in src/org/jetbrains/jps/runConf/java/ClasspathUtil.java [51:92]
private static String extractRoot(URL resourceURL, String resourcePath) {
if (!(resourcePath.startsWith("/") || resourcePath.startsWith("\\"))) {
//noinspection HardCodedStringLiteral
System.err.println("precondition failed");
return null;
}
String protocol = resourceURL.getProtocol();
String resultPath = null;
if (FILE.equals(protocol)) {
String path = resourceURL.getFile();
String testPath = path.replace('\\', '/').toLowerCase();
String testResourcePath = resourcePath.replace('\\', '/').toLowerCase();
if (testPath.endsWith(testResourcePath)) {
resultPath = path.substring(0, path.length() - resourcePath.length());
}
}
else if (JAR.equals(protocol)) {
String fullPath = resourceURL.getFile();
int delimiter = fullPath.indexOf(JAR_DELIMITER);
if (delimiter >= 0) {
String archivePath = fullPath.substring(0, delimiter);
if (archivePath.startsWith(FILE + PROTOCOL_DELIMITER)) {
resultPath = archivePath.substring(FILE.length() + PROTOCOL_DELIMITER.length());
}
}
}
if (resultPath != null && resultPath.endsWith(File.separator)) {
resultPath = resultPath.substring(0, resultPath.length() - 1);
}
resultPath = replaceAll(resultPath, "%20", " ");
resultPath = replaceAll(resultPath, "%23", "#");
// !Workaround for /D:/some/path/a.jar, which doesn't work if D is subst disk
if (resultPath.startsWith("/") && resultPath.indexOf(":") == 2) {
resultPath = resultPath.substring(1);
}
return resultPath;
}