IDE scripting: add default sdk only when used
This commit is contained in:
+1
@@ -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
|
||||
|
||||
+2
-4
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
+16
-6
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user