diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesManager.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesManager.kt index 3c4f1da282a..c9b17ee61d4 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesManager.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesManager.kt @@ -73,17 +73,33 @@ class ScriptDependenciesManager internal constructor( } catch (e: Throwable) { return null } - - return getAllProjectSdks().find { javaHome != null && File(it.homePath).canonicalPath == javaHome } } - fun getScriptDefaultSdk(project: Project): Sdk? = - ProjectRootManager.getInstance(project).projectSdk ?: getAllProjectSdks().firstOrNull() + fun getScriptDefaultSdk(project: Project): Sdk? { + val projectSdk = getProjectSdk(project) + if (projectSdk != null) return projectSdk + + val anyJavaSdk = getAllProjectSdks().find { it.canBeUsedForScript() } + if (anyJavaSdk != null) { + return anyJavaSdk + } + + log.warn( + "Default Script SDK is null: " + + "projectSdk = ${ProjectRootManager.getInstance(project).projectSdk}, " + + "all sdks = ${getAllProjectSdks().joinToString("\n")}" + ) + return null + } + + fun getProjectSdk(project: Project) = ProjectRootManager.getInstance(project).projectSdk?.takeIf { it.canBeUsedForScript() } fun toVfsRoots(roots: Iterable): List { return roots.mapNotNull { it.classpathEntryToVfs() } } + private fun Sdk.canBeUsedForScript() = sdkType is JavaSdkType + private fun File.classpathEntryToVfs(): VirtualFile? { val res = when { !exists() -> null