KSCM: persist script dependencies between idea launches

This commit is contained in:
Pavel V. Talanov
2017-06-14 18:50:54 +03:00
parent 930d502b12
commit 1834721880
@@ -155,13 +155,26 @@ class KotlinScriptConfigurationManager(
fun <TF : Any> 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 <TF : Any> 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 <TF: Any> updateExternalImportsCache(files: Iterable<TF>) = cacheLock.write {
files.mapNotNull { file ->
scriptDefinitionProvider.findScriptDefinition(file)?.let {