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.components.ServiceManager
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.projectRoots.Sdk
|
import com.intellij.openapi.projectRoots.Sdk
|
||||||
import com.intellij.openapi.roots.ProjectRootManager
|
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.psi.search.NonClasspathDirectoriesScope
|
import com.intellij.psi.search.NonClasspathDirectoriesScope
|
||||||
import com.intellij.util.containers.SLRUCache
|
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.idea.stubindex.KotlinSourceFilterScope
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
|
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
|
||||||
import java.io.File
|
|
||||||
import kotlin.script.experimental.dependencies.ScriptDependencies
|
import kotlin.script.experimental.dependencies.ScriptDependencies
|
||||||
|
|
||||||
data class ScriptModuleInfo(
|
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 {
|
sealed class ScriptDependenciesInfo(val project: Project) : IdeaModuleInfo, BinaryModuleInfo {
|
||||||
abstract val sdk: Sdk?
|
abstract val sdk: Sdk?
|
||||||
|
|
||||||
@@ -97,7 +80,10 @@ sealed class ScriptDependenciesInfo(val project: Project) : IdeaModuleInfo, Bina
|
|||||||
get() = ScriptDependenciesManager.getInstance(project).getScriptDependencies(scriptFile)
|
get() = ScriptDependenciesManager.getInstance(project).getScriptDependencies(scriptFile)
|
||||||
|
|
||||||
override val sdk: Sdk?
|
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 {
|
override fun contentScope(): GlobalSearchScope {
|
||||||
return ServiceManager.getService(project, ScriptBinariesScopeCache::class.java).get(externalDependencies)
|
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) {
|
class ForProject(project: Project) : ScriptDependenciesInfo(project) {
|
||||||
override val sdk: Sdk?
|
override val sdk: Sdk?
|
||||||
get() = findJdk(null, project)
|
get() = ScriptDependenciesManager.getScriptDefaultSdk(project)
|
||||||
|
|
||||||
override fun contentScope(): GlobalSearchScope {
|
override fun contentScope(): GlobalSearchScope {
|
||||||
// we do not know which scripts these dependencies are
|
// 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.components.ServiceManager
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.openapi.project.Project
|
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.StandardFileSystems
|
||||||
|
import com.intellij.openapi.vfs.VfsUtil
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.util.io.URLUtil
|
import com.intellij.util.io.URLUtil
|
||||||
import org.jetbrains.annotations.TestOnly
|
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.idea.core.script.dependencies.SyncScriptDependenciesLoader
|
||||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
|
import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
|
||||||
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.script.experimental.dependencies.ScriptDependencies
|
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 getScriptClasspath(file: VirtualFile): List<VirtualFile> = toVfsRoots(cacheUpdater.getCurrentDependencies(file).classpath)
|
||||||
fun getScriptDependencies(file: VirtualFile): ScriptDependencies = cacheUpdater.getCurrentDependencies(file)
|
fun getScriptDependencies(file: VirtualFile): ScriptDependencies = cacheUpdater.getCurrentDependencies(file)
|
||||||
|
fun getScriptSdk(file: VirtualFile): Sdk? = getScriptSdk(getScriptDependencies(file))
|
||||||
|
|
||||||
fun getAllScriptsClasspathScope() = cache.allScriptsClasspathScope
|
fun getAllScriptsClasspathScope() = cache.allScriptsClasspathScope
|
||||||
fun getAllLibrarySourcesScope() = cache.allLibrarySourcesScope
|
fun getAllLibrarySourcesScope() = cache.allLibrarySourcesScope
|
||||||
@@ -57,6 +62,24 @@ class ScriptDependenciesManager internal constructor(
|
|||||||
fun getInstance(project: Project): ScriptDependenciesManager =
|
fun getInstance(project: Project): ScriptDependenciesManager =
|
||||||
ServiceManager.getService(project, ScriptDependenciesManager::class.java)
|
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> {
|
fun toVfsRoots(roots: Iterable<File>): List<VirtualFile> {
|
||||||
return roots.mapNotNull { it.classpathEntryToVfs() }
|
return roots.mapNotNull { it.classpathEntryToVfs() }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user