Scratch: do not report errors from generated file to editor

This commit is contained in:
Natalia Selezneva
2018-01-12 10:50:59 +03:00
parent ad90095dc7
commit dc71ac09b2
@@ -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 }
}