KotlinScriptConfigurationManager: do not use dumbService and 'scriptExternalImportsProvider' is no longer nullable

This commit is contained in:
Pavel V. Talanov
2016-06-25 19:03:16 +03:00
parent 2534a5fdfc
commit 9c09b8a37d
@@ -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()
} }