-Xjdk-release. Review fixes. Pass nullable jdkRelease
This commit is contained in:
@@ -56,7 +56,7 @@ class ClasspathRootsResolver(
|
||||
private val requireStdlibModule: Boolean,
|
||||
private val outputDirectory: VirtualFile?,
|
||||
private val javaFileManager: KotlinCliJavaFileManager,
|
||||
private val jdkRelease: Int
|
||||
private val jdkRelease: Int?
|
||||
) {
|
||||
val javaModuleGraph = JavaModuleGraph(javaModuleFinder)
|
||||
|
||||
@@ -125,7 +125,7 @@ class ClasspathRootsResolver(
|
||||
modules += module
|
||||
}
|
||||
}
|
||||
if (jdkRelease <= 0 || jdkRelease >= 9) {
|
||||
if (jdkRelease == null || jdkRelease >= 9) {
|
||||
addModularRoots(modules, result)
|
||||
} else {
|
||||
//TODO: see also `addJvmSdkRoots` usages, some refactoring is required with moving such logic into one place
|
||||
|
||||
@@ -239,7 +239,7 @@ class KotlinCoreEnvironment private constructor(
|
||||
val javaFileManager = ServiceManager.getService(project, CoreJavaFileManager::class.java) as KotlinCliJavaFileManagerImpl
|
||||
|
||||
val jdkHome = configuration.get(JVMConfigurationKeys.JDK_HOME)
|
||||
val releaseTarget = configuration.get(JVMConfigurationKeys.JDK_RELEASE, 0)
|
||||
val releaseTarget = configuration.get(JVMConfigurationKeys.JDK_RELEASE)
|
||||
val javaModuleFinder = CliJavaModuleFinder(
|
||||
jdkHome,
|
||||
messageCollector,
|
||||
@@ -289,7 +289,7 @@ class KotlinCoreEnvironment private constructor(
|
||||
CliJavaModuleResolver(classpathRootsResolver.javaModuleGraph, javaModules, javaModuleFinder.systemModules.toList(), project)
|
||||
)
|
||||
|
||||
val finderFactory = CliVirtualFileFinderFactory(rootsIndex, releaseTarget != 0)
|
||||
val finderFactory = CliVirtualFileFinderFactory(rootsIndex, releaseTarget != null)
|
||||
project.registerService(MetadataFinderFactory::class.java, finderFactory)
|
||||
project.registerService(VirtualFileFinderFactory::class.java, finderFactory)
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ class CliJavaModuleFinder(
|
||||
private val messageCollector: MessageCollector?,
|
||||
private val javaFileManager: KotlinCliJavaFileManager,
|
||||
project: Project,
|
||||
private val releaseTarget: Int
|
||||
private val jdkRelease: Int?
|
||||
) : JavaModuleFinder {
|
||||
|
||||
private val jrtFileSystemRoot = jdkHome?.path?.let { path ->
|
||||
@@ -59,7 +59,7 @@ class CliJavaModuleFinder(
|
||||
|
||||
val ctSym = lib.findChild("ct.sym")
|
||||
?: return@lazy reportError(
|
||||
"This JDK does not have the 'ct.sym' file required for the '-Xjdk-release=$releaseTarget' option: ${jdkHome.path}"
|
||||
"This JDK does not have the 'ct.sym' file required for the '-Xjdk-release=$jdkRelease' option: ${jdkHome.path}"
|
||||
)
|
||||
|
||||
ctSym
|
||||
@@ -93,7 +93,7 @@ class CliJavaModuleFinder(
|
||||
get() = compilationJdkVersion >= 12
|
||||
|
||||
private val useLastJdkApi: Boolean
|
||||
get() = releaseTarget == 0 || releaseTarget == compilationJdkVersion
|
||||
get() = jdkRelease == null || jdkRelease == compilationJdkVersion
|
||||
|
||||
fun addUserModule(module: JavaModule) {
|
||||
userModules.putIfAbsent(module.name, module)
|
||||
@@ -160,14 +160,14 @@ class CliJavaModuleFinder(
|
||||
|
||||
fun listFoldersForRelease(): List<VirtualFile> {
|
||||
if (ctSymRootFolder == null) return emptyList()
|
||||
return ctSymRootFolder!!.children.filter { matchesRelease(it.name, releaseTarget) }.flatMap {
|
||||
return ctSymRootFolder!!.children.filter { matchesRelease(it.name, jdkRelease!!) }.flatMap {
|
||||
if (isCompilationJDK12OrLater)
|
||||
it.children.toList()
|
||||
else {
|
||||
listOf(it)
|
||||
}
|
||||
}.apply {
|
||||
if (isEmpty()) reportError("'-Xrelease=${releaseTarget}' option is not supported by used JDK: ${jdkHome?.path}")
|
||||
if (isEmpty()) reportError("'-Xrelease=${jdkRelease}' option is not supported by used JDK: ${jdkHome?.path}")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,12 +180,12 @@ class CliJavaModuleFinder(
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (this.releaseTarget > 8 && ctSymRootFolder != null) {
|
||||
ctSymRootFolder!!.findChild(codeFor(releaseTarget) + if (!isCompilationJDK12OrLater) "-modules" else "")?.apply {
|
||||
if (this.jdkRelease!! > 8 && ctSymRootFolder != null) {
|
||||
ctSymRootFolder!!.findChild(codeFor(jdkRelease) + if (!isCompilationJDK12OrLater) "-modules" else "")?.apply {
|
||||
children.forEach {
|
||||
result[it.name] = it
|
||||
}
|
||||
} ?: reportError("Can't find modules signatures in `ct.sym` file for `-Xrelease=$releaseTarget` in ${ctSymFile!!.path}")
|
||||
} ?: reportError("Can't find modules signatures in `ct.sym` file for `-Xrelease=$jdkRelease` in ${ctSymFile!!.path}")
|
||||
}
|
||||
}
|
||||
return result
|
||||
|
||||
Reference in New Issue
Block a user