KotlinScriptConfigurationManager: do not use dumbService and 'scriptExternalImportsProvider' is no longer nullable
This commit is contained in:
+18
-26
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.core.script
|
|||||||
|
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
import com.intellij.openapi.components.ServiceManager
|
import com.intellij.openapi.components.ServiceManager
|
||||||
import com.intellij.openapi.project.DumbService
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.ex.ProjectRootManagerEx
|
import com.intellij.openapi.roots.ex.ProjectRootManagerEx
|
||||||
import com.intellij.openapi.startup.StartupManager
|
import com.intellij.openapi.startup.StartupManager
|
||||||
@@ -44,9 +43,8 @@ import kotlin.concurrent.write
|
|||||||
|
|
||||||
class KotlinScriptConfigurationManager(
|
class KotlinScriptConfigurationManager(
|
||||||
private val project: Project,
|
private val project: Project,
|
||||||
private val dumbService: DumbService,
|
|
||||||
private val scriptDefinitionProvider: KotlinScriptDefinitionProvider,
|
private val scriptDefinitionProvider: KotlinScriptDefinitionProvider,
|
||||||
private val scriptExternalImportsProvider: KotlinScriptExternalImportsProvider?
|
private val scriptExternalImportsProvider: KotlinScriptExternalImportsProvider
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val kotlinEnvVars: Map<String, List<String>> by lazy {
|
private val kotlinEnvVars: Map<String, List<String>> by lazy {
|
||||||
@@ -83,38 +81,32 @@ class KotlinScriptConfigurationManager(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getScriptClasspath(file: VirtualFile): List<VirtualFile> =
|
fun getScriptClasspath(file: VirtualFile): List<VirtualFile> =
|
||||||
scriptExternalImportsProvider
|
scriptExternalImportsProvider.getExternalImports(file)
|
||||||
?.getExternalImports(file)
|
.flatMap { it.classpath }
|
||||||
?.flatMap { it.classpath }
|
.map { it.classpathEntryToVfs() }
|
||||||
?.map { it.classpathEntryToVfs() }
|
|
||||||
?: emptyList()
|
|
||||||
|
|
||||||
fun getAllScriptsClasspath(): List<VirtualFile> = cacheLock.read {
|
fun getAllScriptsClasspath(): List<VirtualFile> = cacheLock.read {
|
||||||
if (allScriptsClasspathCache == null) {
|
if (allScriptsClasspathCache == null) {
|
||||||
dumbService.runWhenSmart {
|
cacheLock.write {
|
||||||
cacheLock.write {
|
allScriptsClasspathCache =
|
||||||
allScriptsClasspathCache =
|
scriptExternalImportsProvider.getKnownCombinedClasspath()
|
||||||
(scriptExternalImportsProvider?.getKnownCombinedClasspath() ?: emptyList())
|
.distinct()
|
||||||
.distinct()
|
.mapNotNull { it.classpathEntryToVfs() }
|
||||||
.mapNotNull { it.classpathEntryToVfs() }
|
|
||||||
}
|
|
||||||
notifyRootsChanged()
|
|
||||||
}
|
}
|
||||||
|
notifyRootsChanged()
|
||||||
}
|
}
|
||||||
return allScriptsClasspathCache ?: emptyList()
|
return allScriptsClasspathCache ?: emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getAllLibrarySources(): List<VirtualFile> = cacheLock.read {
|
fun getAllLibrarySources(): List<VirtualFile> = cacheLock.read {
|
||||||
if (allLibrarySourcesCache == null) {
|
if (allLibrarySourcesCache == null) {
|
||||||
dumbService.runWhenSmart {
|
cacheLock.write {
|
||||||
cacheLock.write {
|
allLibrarySourcesCache =
|
||||||
allLibrarySourcesCache =
|
scriptExternalImportsProvider.getKnownSourceRoots()
|
||||||
(scriptExternalImportsProvider?.getKnownSourceRoots() ?: emptyList())
|
.distinct()
|
||||||
.distinct()
|
.mapNotNull { it.classpathEntryToVfs() }
|
||||||
.mapNotNull { it.classpathEntryToVfs() }
|
|
||||||
}
|
|
||||||
notifyRootsChanged()
|
|
||||||
}
|
}
|
||||||
|
notifyRootsChanged()
|
||||||
}
|
}
|
||||||
return allLibrarySourcesCache ?: emptyList()
|
return allLibrarySourcesCache ?: emptyList()
|
||||||
}
|
}
|
||||||
@@ -150,7 +142,7 @@ class KotlinScriptConfigurationManager(
|
|||||||
|
|
||||||
private fun cacheAllScriptsExtraImports() {
|
private fun cacheAllScriptsExtraImports() {
|
||||||
runReadAction {
|
runReadAction {
|
||||||
scriptExternalImportsProvider?.apply {
|
scriptExternalImportsProvider.apply {
|
||||||
invalidateCaches()
|
invalidateCaches()
|
||||||
cacheExternalImports(
|
cacheExternalImports(
|
||||||
scriptDefinitionProvider.getAllKnownFileTypes()
|
scriptDefinitionProvider.getAllKnownFileTypes()
|
||||||
@@ -160,7 +152,7 @@ class KotlinScriptConfigurationManager(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun updateExternalImportsCache(files: Iterable<VirtualFile>, onChange: () -> Unit) {
|
private fun updateExternalImportsCache(files: Iterable<VirtualFile>, onChange: () -> Unit) {
|
||||||
val isChanged = scriptExternalImportsProvider?.updateExternalImportsCache(files)?.any() ?: false
|
val isChanged = scriptExternalImportsProvider.updateExternalImportsCache(files).any()
|
||||||
if (isChanged) {
|
if (isChanged) {
|
||||||
onChange()
|
onChange()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user