diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/ScriptExternalHighlightingPass.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/ScriptExternalHighlightingPass.kt index da869e04c64..b28e68a14d1 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/ScriptExternalHighlightingPass.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/ScriptExternalHighlightingPass.kt @@ -60,7 +60,8 @@ class ScriptExternalHighlightingPass( ) } - if (!ScriptDependenciesUpdater.areDependenciesCached(file)) { + // show notification only for async resolvers, for others file analysis is in progress until all dependencies are ready + if (!ScriptDependenciesUpdater.areDependenciesCached(file) && ScriptDependenciesUpdater.isAsyncDependencyResolver(file)) { showNotification( file, "Highlighting in scripts is not available until all Script Dependencies are loaded" diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesUpdater.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesUpdater.kt index d60e18c48aa..6920bc6a36f 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesUpdater.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesUpdater.kt @@ -92,8 +92,8 @@ class ScriptDependenciesUpdater( } private fun updateDependencies(file: VirtualFile, scriptDef: KotlinScriptDefinition) { - val loader = when (scriptDef.dependencyResolver) { - is AsyncDependenciesResolver, is LegacyResolverWrapper -> asyncLoader + val loader = when { + isAsyncDependencyResolver(scriptDef) -> asyncLoader else -> syncLoader } loader.updateDependencies(file, scriptDef) @@ -167,13 +167,18 @@ class ScriptDependenciesUpdater( } private fun areDependenciesCached(file: VirtualFile): Boolean { - return cache[file] != null + return cache[file] != null || file.scriptDependencies != null } private fun areDependenciesCached(files: List): Boolean { return files.all { areDependenciesCached(it) } } + private fun isAsyncDependencyResolver(scriptDef: KotlinScriptDefinition): Boolean { + val dependencyResolver = scriptDef.dependencyResolver + return dependencyResolver is AsyncDependenciesResolver || dependencyResolver is LegacyResolverWrapper + } + companion object { @JvmStatic fun getInstance(project: Project): ScriptDependenciesUpdater = @@ -182,6 +187,11 @@ class ScriptDependenciesUpdater( fun areDependenciesCached(file: KtFile): Boolean { return getInstance(file.project).areDependenciesCached(file.virtualFile) } + + fun isAsyncDependencyResolver(file: KtFile): Boolean { + val scriptDefinition = file.virtualFile.findScriptDefinition(file.project) ?: return false + return getInstance(file.project).isAsyncDependencyResolver(scriptDefinition) + } } }