IDE scripting: add default sdk only when used

This commit is contained in:
Sergey Rostov
2020-05-22 18:55:48 +03:00
parent 53983a99e5
commit 72aba2fce2
3 changed files with 19 additions and 10 deletions
@@ -22,6 +22,7 @@ class ScriptClassRootsStorage(val project: Project) : PersistentStateComponent<S
var classpath: Set<String> = hashSetOf()
var sources: Set<String> = hashSetOf()
var sdks: Set<String> = hashSetOf()
var defaultSdkUsed: Boolean = false
override fun getState(): ScriptClassRootsStorage? {
return this
@@ -77,10 +77,8 @@ class ScriptClassRootsBuilder(
storage.project,
storage.classpath.toMutableSet(),
storage.sources.toMutableSet(),
).also { roots ->
storage.sdks.forEach {
roots.sdks.addSdkByName(it)
}
).also {
it.sdks.fromStorage(storage)
}
}
}
@@ -22,11 +22,7 @@ class ScriptSdksBuilder(
private val sdks: MutableMap<String?, Sdk?> = mutableMapOf(),
private val remove: Sdk? = null
) {
private val defaultSdk = getScriptDefaultSdk()
init {
sdks[null] = defaultSdk
}
private val defaultSdk by lazy { getScriptDefaultSdk() }
fun build() = ScriptSdks(project, sdks)
@@ -35,7 +31,8 @@ class ScriptSdksBuilder(
}
fun addSdk(javaHome: File?): Sdk? {
if (javaHome == null) return defaultSdk
if (javaHome == null) return addDefaultSdk()
val canonicalPath = FileUtil.toSystemIndependentName(javaHome.canonicalPath)
return sdks.getOrPut(canonicalPath) {
getScriptSdkByJavaHome(javaHome) ?: defaultSdk
@@ -54,6 +51,9 @@ class ScriptSdksBuilder(
?.takeIf { it.canBeUsedForScript() }
}
fun addDefaultSdk(): Sdk? =
sdks.getOrPut(null) { defaultSdk }
fun addSdkByName(sdkName: String) {
val sdk = getProjectJdkTableSafe().allJdks
.find { it.name == sdkName }
@@ -85,5 +85,15 @@ class ScriptSdksBuilder(
fun toStorage(storage: ScriptClassRootsStorage) {
storage.sdks = sdks.values.mapNotNullTo(mutableSetOf()) { it?.name }
storage.defaultSdkUsed = sdks.containsKey(null)
}
fun fromStorage(storage: ScriptClassRootsStorage) {
storage.sdks.forEach {
addSdkByName(it)
}
if (storage.defaultSdkUsed) {
addDefaultSdk()
}
}
}