Refactoring: move method that find sdk for script to ScriptDependenciesManager
This commit is contained in:
+5
-19
@@ -8,9 +8,7 @@ package org.jetbrains.kotlin.idea.caches.project
|
||||
import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.roots.ProjectRootManager
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.psi.search.NonClasspathDirectoriesScope
|
||||
import com.intellij.util.containers.SLRUCache
|
||||
@@ -20,7 +18,6 @@ import org.jetbrains.kotlin.idea.core.script.dependencies.ScriptAdditionalIdeaDe
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
|
||||
import java.io.File
|
||||
import kotlin.script.experimental.dependencies.ScriptDependencies
|
||||
|
||||
data class ScriptModuleInfo(
|
||||
@@ -55,20 +52,6 @@ data class ScriptModuleInfo(
|
||||
}
|
||||
}
|
||||
|
||||
fun findJdk(dependencies: ScriptDependencies?, project: Project): Sdk? {
|
||||
val allJdks = getAllProjectSdks()
|
||||
// workaround for mismatched gradle wrapper and plugin version
|
||||
val javaHome = try {
|
||||
dependencies?.javaHome?.canonicalPath
|
||||
} catch (e: Throwable) {
|
||||
null
|
||||
}
|
||||
|
||||
return allJdks.find { javaHome != null && File(it.homePath).canonicalPath == javaHome }
|
||||
?: ProjectRootManager.getInstance(project).projectSdk
|
||||
?: allJdks.firstOrNull()
|
||||
}
|
||||
|
||||
sealed class ScriptDependenciesInfo(val project: Project) : IdeaModuleInfo, BinaryModuleInfo {
|
||||
abstract val sdk: Sdk?
|
||||
|
||||
@@ -97,7 +80,10 @@ sealed class ScriptDependenciesInfo(val project: Project) : IdeaModuleInfo, Bina
|
||||
get() = ScriptDependenciesManager.getInstance(project).getScriptDependencies(scriptFile)
|
||||
|
||||
override val sdk: Sdk?
|
||||
get() = findJdk(externalDependencies, project)
|
||||
get() {
|
||||
val manager = ScriptDependenciesManager.getInstance(project)
|
||||
return manager.getScriptSdk(scriptFile) ?: ScriptDependenciesManager.getScriptDefaultSdk(project)
|
||||
}
|
||||
|
||||
override fun contentScope(): GlobalSearchScope {
|
||||
return ServiceManager.getService(project, ScriptBinariesScopeCache::class.java).get(externalDependencies)
|
||||
@@ -106,7 +92,7 @@ sealed class ScriptDependenciesInfo(val project: Project) : IdeaModuleInfo, Bina
|
||||
|
||||
class ForProject(project: Project) : ScriptDependenciesInfo(project) {
|
||||
override val sdk: Sdk?
|
||||
get() = findJdk(null, project)
|
||||
get() = ScriptDependenciesManager.getScriptDefaultSdk(project)
|
||||
|
||||
override fun contentScope(): GlobalSearchScope {
|
||||
// we do not know which scripts these dependencies are
|
||||
|
||||
+24
-1
@@ -19,13 +19,17 @@ package org.jetbrains.kotlin.idea.core.script
|
||||
import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.projectRoots.JavaSdkType
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.roots.ProjectRootManager
|
||||
import com.intellij.openapi.vfs.StandardFileSystems
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.util.io.URLUtil
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.idea.caches.project.getAllProjectSdks
|
||||
import org.jetbrains.kotlin.idea.core.script.dependencies.SyncScriptDependenciesLoader
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
|
||||
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
|
||||
import java.io.File
|
||||
import kotlin.script.experimental.dependencies.ScriptDependencies
|
||||
|
||||
@@ -46,6 +50,7 @@ class ScriptDependenciesManager internal constructor(
|
||||
) {
|
||||
fun getScriptClasspath(file: VirtualFile): List<VirtualFile> = toVfsRoots(cacheUpdater.getCurrentDependencies(file).classpath)
|
||||
fun getScriptDependencies(file: VirtualFile): ScriptDependencies = cacheUpdater.getCurrentDependencies(file)
|
||||
fun getScriptSdk(file: VirtualFile): Sdk? = getScriptSdk(getScriptDependencies(file))
|
||||
|
||||
fun getAllScriptsClasspathScope() = cache.allScriptsClasspathScope
|
||||
fun getAllLibrarySourcesScope() = cache.allLibrarySourcesScope
|
||||
@@ -57,6 +62,24 @@ class ScriptDependenciesManager internal constructor(
|
||||
fun getInstance(project: Project): ScriptDependenciesManager =
|
||||
ServiceManager.getService(project, ScriptDependenciesManager::class.java)
|
||||
|
||||
fun getScriptSdk(dependencies: ScriptDependencies): Sdk? {
|
||||
// workaround for mismatched gradle wrapper and plugin version
|
||||
try {
|
||||
val javaHome = dependencies.javaHome
|
||||
?.let { VfsUtil.findFileByIoFile(it, true) }
|
||||
?: return null
|
||||
|
||||
return getAllProjectSdks().find { it.homeDirectory == javaHome }
|
||||
} 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 toVfsRoots(roots: Iterable<File>): List<VirtualFile> {
|
||||
return roots.mapNotNull { it.classpathEntryToVfs() }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user