Reset scriptDependencies file attribute when dependencies update fails with fatal error
This commit is contained in:
+12
-14
@@ -30,25 +30,23 @@ import kotlin.reflect.KProperty
|
||||
import kotlin.script.experimental.dependencies.ScriptDependencies
|
||||
|
||||
var VirtualFile.scriptDependencies: ScriptDependencies? by ScriptDependenciesProperty()
|
||||
private val scriptDependencies = FileAttribute("kotlin-script-dependencies", 3, false)
|
||||
private val scriptDependencies = FileAttribute("kotlin-script-dependencies", 4, false)
|
||||
|
||||
private class ScriptDependenciesProperty {
|
||||
|
||||
operator fun setValue(file: VirtualFile, property: KProperty<*>, newValue: ScriptDependencies?) {
|
||||
if (file !is VirtualFileWithId) return
|
||||
|
||||
if (newValue != null) {
|
||||
val output = scriptDependencies.writeAttribute(file)
|
||||
output.use {
|
||||
with(newValue) {
|
||||
with(output) {
|
||||
writeFileList(classpath)
|
||||
writeStringList(imports)
|
||||
writeNullable(javaHome, DataOutput::writeFile)
|
||||
writeFileList(scripts)
|
||||
writeFileList(sources)
|
||||
val output = scriptDependencies.writeAttribute(file)
|
||||
output.use {
|
||||
it.writeNullable(newValue) { value ->
|
||||
with(value) {
|
||||
writeFileList(classpath)
|
||||
writeStringList(imports)
|
||||
writeNullable(javaHome, DataOutput::writeFile)
|
||||
writeFileList(scripts)
|
||||
writeFileList(sources)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -59,8 +57,8 @@ private class ScriptDependenciesProperty {
|
||||
|
||||
val input = scriptDependencies.readAttribute(file)
|
||||
return input?.use {
|
||||
with(input) {
|
||||
return ScriptDependencies(
|
||||
it.readNullable {
|
||||
ScriptDependencies(
|
||||
classpath = readFileList(),
|
||||
imports = readStringList(),
|
||||
javaHome = readNullable(DataInput::readFile),
|
||||
|
||||
+12
-6
@@ -208,7 +208,7 @@ class ScriptDependenciesUpdater(
|
||||
}
|
||||
ServiceManager.getService(project, ScriptReportSink::class.java)?.attachReports(file, result.reports)
|
||||
val resultingDependencies = result.dependencies?.adjustByDefinition(scriptDef) ?: return
|
||||
if (saveNewDependencies(resultingDependencies, file)) {
|
||||
if (saveNewDependencies(resultingDependencies, file, result.reports.any { it.severity == ScriptReport.Severity.FATAL })) {
|
||||
notifyRootsChanged()
|
||||
}
|
||||
}
|
||||
@@ -217,16 +217,22 @@ class ScriptDependenciesUpdater(
|
||||
|
||||
fun updateSync(file: VirtualFile, scriptDef: KotlinScriptDefinition): Boolean {
|
||||
val result = contentLoader.loadContentsAndResolveDependencies(scriptDef, file)
|
||||
if (result.reports.any { it.severity == ScriptReport.Severity.FATAL }) return false
|
||||
|
||||
val newDeps = result.dependencies?.adjustByDefinition(scriptDef) ?: ScriptDependencies.Empty
|
||||
return saveNewDependencies(newDeps, file)
|
||||
return saveNewDependencies(newDeps, file, result.reports.any { it.severity == ScriptReport.Severity.FATAL })
|
||||
}
|
||||
|
||||
private fun saveNewDependencies(new: ScriptDependencies, file: VirtualFile): Boolean {
|
||||
private fun saveNewDependencies(
|
||||
new: ScriptDependencies,
|
||||
file: VirtualFile,
|
||||
hasFatalErrors: Boolean
|
||||
): Boolean {
|
||||
val rootsChanged = cache.hasNotCachedRoots(new)
|
||||
if (cache.save(file, new)) {
|
||||
file.scriptDependencies = new
|
||||
if (hasFatalErrors) {
|
||||
file.scriptDependencies = null
|
||||
} else {
|
||||
file.scriptDependencies = new
|
||||
}
|
||||
}
|
||||
return rootsChanged
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user