Fix warning in scripts that dependencies are not available

^KT-30441 Fixed
This commit is contained in:
Natalia Selezneva
2019-03-25 19:31:45 +03:00
parent 791ab05e08
commit 224f37ca00
2 changed files with 15 additions and 4 deletions
@@ -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( showNotification(
file, file,
"Highlighting in scripts is not available until all Script Dependencies are loaded" "Highlighting in scripts is not available until all Script Dependencies are loaded"
@@ -92,8 +92,8 @@ class ScriptDependenciesUpdater(
} }
private fun updateDependencies(file: VirtualFile, scriptDef: KotlinScriptDefinition) { private fun updateDependencies(file: VirtualFile, scriptDef: KotlinScriptDefinition) {
val loader = when (scriptDef.dependencyResolver) { val loader = when {
is AsyncDependenciesResolver, is LegacyResolverWrapper -> asyncLoader isAsyncDependencyResolver(scriptDef) -> asyncLoader
else -> syncLoader else -> syncLoader
} }
loader.updateDependencies(file, scriptDef) loader.updateDependencies(file, scriptDef)
@@ -167,13 +167,18 @@ class ScriptDependenciesUpdater(
} }
private fun areDependenciesCached(file: VirtualFile): Boolean { private fun areDependenciesCached(file: VirtualFile): Boolean {
return cache[file] != null return cache[file] != null || file.scriptDependencies != null
} }
private fun areDependenciesCached(files: List<VirtualFile>): Boolean { private fun areDependenciesCached(files: List<VirtualFile>): Boolean {
return files.all { areDependenciesCached(it) } return files.all { areDependenciesCached(it) }
} }
private fun isAsyncDependencyResolver(scriptDef: KotlinScriptDefinition): Boolean {
val dependencyResolver = scriptDef.dependencyResolver
return dependencyResolver is AsyncDependenciesResolver || dependencyResolver is LegacyResolverWrapper
}
companion object { companion object {
@JvmStatic @JvmStatic
fun getInstance(project: Project): ScriptDependenciesUpdater = fun getInstance(project: Project): ScriptDependenciesUpdater =
@@ -182,6 +187,11 @@ class ScriptDependenciesUpdater(
fun areDependenciesCached(file: KtFile): Boolean { fun areDependenciesCached(file: KtFile): Boolean {
return getInstance(file.project).areDependenciesCached(file.virtualFile) 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)
}
} }
} }