diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/KotlinScriptConfigurationManager.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/KotlinScriptConfigurationManager.kt index fa1cfea3bec..bb1370a2b75 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/KotlinScriptConfigurationManager.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/KotlinScriptConfigurationManager.kt @@ -155,13 +155,26 @@ class KotlinScriptConfigurationManager( fun getExternalImports(file: TF): KotlinScriptExternalDependencies = cacheLock.read { val path = getFilePath(file) - cache[path]?.dependencies?.let { return it } + val cached = cache[path] + cached?.dependencies?.let { return it } + + tryLoadingFromDisk(cached, file, path) updateExternalImportsCache(listOf(file)) return cache[path]?.dependencies ?: NoDependencies } + private fun tryLoadingFromDisk(cached: DataAndRequest?, file: TF, path: String) { + if (cached != null || file !is VirtualFile) return + + ScriptDependenciesFileAttribute.read(file)?.let { deserialized -> + save(path, deserialized, file, persist = false) + invalidateLocalCaches() + notifyRootsChanged() + } + } + private fun updateExternalImportsCache(files: Iterable) = cacheLock.write { files.mapNotNull { file -> scriptDefinitionProvider.findScriptDefinition(file)?.let {