Scratch: do not report errors from generated file to editor
This commit is contained in:
+16
-11
@@ -25,6 +25,7 @@ import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.roots.OrderEnumerator
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.codegen.ClassBuilderFactories
|
||||
import org.jetbrains.kotlin.codegen.CompilationErrorHandler
|
||||
import org.jetbrains.kotlin.codegen.KotlinCodegenFacade
|
||||
@@ -166,18 +167,18 @@ class KtCompilingExecutor(file: ScratchFile) : ScratchExecutor(file) {
|
||||
val diagnostics = bindingContext.diagnostics.filter { it.severity == Severity.ERROR }
|
||||
if (diagnostics.isNotEmpty()) {
|
||||
diagnostics.forEach { diagnostic ->
|
||||
if (diagnostic.psiElement.containingFile == psiFile) {
|
||||
val scratchExpression = file.findExpression(
|
||||
diagnostic.psiElement.getLineNumber(true),
|
||||
diagnostic.psiElement.getLineNumber(false)
|
||||
)
|
||||
handlers.forEach {
|
||||
it.handle(
|
||||
file,
|
||||
scratchExpression,
|
||||
ScratchOutput(DefaultErrorMessages.render(diagnostic), ScratchOutputType.ERROR)
|
||||
)
|
||||
val errorText = DefaultErrorMessages.render(diagnostic)
|
||||
if (psiFile == file.psiFile) {
|
||||
if (diagnostic.psiElement.containingFile == psiFile) {
|
||||
val scratchExpression = file.findExpression(diagnostic.psiElement)
|
||||
handlers.forEach {
|
||||
it.handle(file, scratchExpression, ScratchOutput(errorText, ScratchOutputType.ERROR))
|
||||
}
|
||||
} else {
|
||||
handlers.forEach { it.error(file, errorText) }
|
||||
}
|
||||
} else {
|
||||
handlers.forEach { it.error(file, errorText) }
|
||||
}
|
||||
}
|
||||
return@runReadAction false
|
||||
@@ -191,6 +192,10 @@ class KtCompilingExecutor(file: ScratchFile) : ScratchExecutor(file) {
|
||||
handlers.forEach { it.onFinish(file) }
|
||||
}
|
||||
|
||||
private fun ScratchFile.findExpression(psiElement: PsiElement): ScratchExpression {
|
||||
return findExpression(psiElement.getLineNumber(true), psiElement.getLineNumber(false))
|
||||
}
|
||||
|
||||
private fun ScratchFile.findExpression(lineStart: Int, lineEnd: Int): ScratchExpression {
|
||||
return getExpressions().first { it.lineStart == lineStart && it.lineEnd == lineEnd }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user