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 classpath: Set<String> = hashSetOf()
|
||||||
var sources: Set<String> = hashSetOf()
|
var sources: Set<String> = hashSetOf()
|
||||||
var sdks: Set<String> = hashSetOf()
|
var sdks: Set<String> = hashSetOf()
|
||||||
|
var defaultSdkUsed: Boolean = false
|
||||||
|
|
||||||
override fun getState(): ScriptClassRootsStorage? {
|
override fun getState(): ScriptClassRootsStorage? {
|
||||||
return this
|
return this
|
||||||
|
|||||||
+2
-4
@@ -77,10 +77,8 @@ class ScriptClassRootsBuilder(
|
|||||||
storage.project,
|
storage.project,
|
||||||
storage.classpath.toMutableSet(),
|
storage.classpath.toMutableSet(),
|
||||||
storage.sources.toMutableSet(),
|
storage.sources.toMutableSet(),
|
||||||
).also { roots ->
|
).also {
|
||||||
storage.sdks.forEach {
|
it.sdks.fromStorage(storage)
|
||||||
roots.sdks.addSdkByName(it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+16
-6
@@ -22,11 +22,7 @@ class ScriptSdksBuilder(
|
|||||||
private val sdks: MutableMap<String?, Sdk?> = mutableMapOf(),
|
private val sdks: MutableMap<String?, Sdk?> = mutableMapOf(),
|
||||||
private val remove: Sdk? = null
|
private val remove: Sdk? = null
|
||||||
) {
|
) {
|
||||||
private val defaultSdk = getScriptDefaultSdk()
|
private val defaultSdk by lazy { getScriptDefaultSdk() }
|
||||||
|
|
||||||
init {
|
|
||||||
sdks[null] = defaultSdk
|
|
||||||
}
|
|
||||||
|
|
||||||
fun build() = ScriptSdks(project, sdks)
|
fun build() = ScriptSdks(project, sdks)
|
||||||
|
|
||||||
@@ -35,7 +31,8 @@ class ScriptSdksBuilder(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun addSdk(javaHome: File?): Sdk? {
|
fun addSdk(javaHome: File?): Sdk? {
|
||||||
if (javaHome == null) return defaultSdk
|
if (javaHome == null) return addDefaultSdk()
|
||||||
|
|
||||||
val canonicalPath = FileUtil.toSystemIndependentName(javaHome.canonicalPath)
|
val canonicalPath = FileUtil.toSystemIndependentName(javaHome.canonicalPath)
|
||||||
return sdks.getOrPut(canonicalPath) {
|
return sdks.getOrPut(canonicalPath) {
|
||||||
getScriptSdkByJavaHome(javaHome) ?: defaultSdk
|
getScriptSdkByJavaHome(javaHome) ?: defaultSdk
|
||||||
@@ -54,6 +51,9 @@ class ScriptSdksBuilder(
|
|||||||
?.takeIf { it.canBeUsedForScript() }
|
?.takeIf { it.canBeUsedForScript() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun addDefaultSdk(): Sdk? =
|
||||||
|
sdks.getOrPut(null) { defaultSdk }
|
||||||
|
|
||||||
fun addSdkByName(sdkName: String) {
|
fun addSdkByName(sdkName: String) {
|
||||||
val sdk = getProjectJdkTableSafe().allJdks
|
val sdk = getProjectJdkTableSafe().allJdks
|
||||||
.find { it.name == sdkName }
|
.find { it.name == sdkName }
|
||||||
@@ -85,5 +85,15 @@ class ScriptSdksBuilder(
|
|||||||
|
|
||||||
fun toStorage(storage: ScriptClassRootsStorage) {
|
fun toStorage(storage: ScriptClassRootsStorage) {
|
||||||
storage.sdks = sdks.values.mapNotNullTo(mutableSetOf()) { it?.name }
|
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