diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsStorage.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsStorage.kt index 9a140d15579..5cc75445761 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsStorage.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsStorage.kt @@ -22,6 +22,7 @@ class ScriptClassRootsStorage(val project: Project) : PersistentStateComponent = hashSetOf() var sources: Set = hashSetOf() var sdks: Set = hashSetOf() + var defaultSdkUsed: Boolean = false override fun getState(): ScriptClassRootsStorage? { return this diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/uсache/ScriptClassRootsBuilder.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/uсache/ScriptClassRootsBuilder.kt index 1096edae364..d2fe2aba871 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/uсache/ScriptClassRootsBuilder.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/uсache/ScriptClassRootsBuilder.kt @@ -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) } } } \ No newline at end of file diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/uсache/ScriptSdksBuilder.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/uсache/ScriptSdksBuilder.kt index 3e2d1f0694b..81dab96223e 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/uсache/ScriptSdksBuilder.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/uсache/ScriptSdksBuilder.kt @@ -22,11 +22,7 @@ class ScriptSdksBuilder( private val sdks: MutableMap = 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() + } } } \ No newline at end of file