Refactor script reports: introduce getter, check that report are changed inside attach method

This commit is contained in:
Natalia Selezneva
2019-06-28 10:44:15 +03:00
parent 68b45ce1dc
commit bd0f947222
6 changed files with 16 additions and 9 deletions
@@ -23,13 +23,16 @@ import com.intellij.openapi.util.Key
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiManager
import com.intellij.ui.EditorNotifications
import org.jetbrains.kotlin.psi.UserDataProperty
import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink
import kotlin.script.experimental.dependencies.ScriptReport
class IdeScriptReportSink(val project: Project) : ScriptReportSink {
override fun attachReports(scriptFile: VirtualFile, reports: List<ScriptReport>) {
if (getReports(scriptFile) == reports) return
// TODO: persist errors between launches?
scriptFile.putUserData(Reports, reports)
scriptFile.scriptReports = reports
ApplicationManager.getApplication().invokeLater {
if (scriptFile.isValid && !project.isDisposed) {
@@ -41,5 +44,11 @@ class IdeScriptReportSink(val project: Project) : ScriptReportSink {
}
}
object Reports : Key<List<ScriptReport>>("KOTLIN_SCRIPT_REPORTS")
companion object {
fun getReports(file: VirtualFile): List<ScriptReport> {
return file.scriptReports ?: emptyList()
}
private var VirtualFile.scriptReports: List<ScriptReport>? by UserDataProperty(Key.create("KOTLIN_SCRIPT_REPORTS"))
}
}
@@ -77,9 +77,7 @@ abstract class ScriptDependenciesLoader(protected val project: Project) {
}
private fun attachReportsIfChanged(result: ResultWithDiagnostics<*>, file: VirtualFile) {
if (file.getUserData(IdeScriptReportSink.Reports) != result.reports.takeIf { it.isNotEmpty() }) {
reporter.attachReports(file, result.reports.mapToLegacyReports())
}
reporter.attachReports(file, result.reports.mapToLegacyReports())
}
private fun save(compilationConfigurationResult: ScriptCompilationConfigurationResult?, file: VirtualFile) {