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