Load module-info.class from multi-release jars' META-INF/versions/

This commit is contained in:
Alexander Udalov
2017-06-30 15:35:56 +03:00
parent 5b9ee88b52
commit 612e64d8e3
8 changed files with 60 additions and 2 deletions
@@ -109,7 +109,10 @@ internal class ClasspathRootsResolver(
}
private fun modularBinaryRoot(root: VirtualFile, automaticModuleName: () -> String): JavaModule? {
val moduleInfoFile = root.findChild(PsiJavaModule.MODULE_INFO_CLS_FILE)
val moduleInfoFile =
root.findChild(PsiJavaModule.MODULE_INFO_CLS_FILE)
?: root.takeIf { it.fileSystem.protocol == StandardFileSystems.JAR_PROTOCOL }
?.findFileByRelativePath(MULTI_RELEASE_MODULE_INFO_CLS_FILE)
return if (moduleInfoFile != null) {
val moduleInfo = JavaModuleInfo.read(moduleInfoFile) ?: return null
JavaModule.Explicit(moduleInfo, root, moduleInfoFile, isBinary = true)
@@ -209,4 +212,8 @@ internal class ClasspathRootsResolver(
if (file == null) null else CompilerMessageLocation.create(MessageUtil.virtualFileToPath(file))
)
}
private companion object {
const val MULTI_RELEASE_MODULE_INFO_CLS_FILE = "META-INF/versions/9/${PsiJavaModule.MODULE_INFO_CLS_FILE}"
}
}