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.module.Module
import com.intellij.openapi.roots.OrderEnumerator import com.intellij.openapi.roots.OrderEnumerator
import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.codegen.ClassBuilderFactories import org.jetbrains.kotlin.codegen.ClassBuilderFactories
import org.jetbrains.kotlin.codegen.CompilationErrorHandler import org.jetbrains.kotlin.codegen.CompilationErrorHandler
import org.jetbrains.kotlin.codegen.KotlinCodegenFacade 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 } val diagnostics = bindingContext.diagnostics.filter { it.severity == Severity.ERROR }
if (diagnostics.isNotEmpty()) { if (diagnostics.isNotEmpty()) {
diagnostics.forEach { diagnostic -> diagnostics.forEach { diagnostic ->
if (diagnostic.psiElement.containingFile == psiFile) { val errorText = DefaultErrorMessages.render(diagnostic)
val scratchExpression = file.findExpression( if (psiFile == file.psiFile) {
diagnostic.psiElement.getLineNumber(true), if (diagnostic.psiElement.containingFile == psiFile) {
diagnostic.psiElement.getLineNumber(false) val scratchExpression = file.findExpression(diagnostic.psiElement)
) handlers.forEach {
handlers.forEach { it.handle(file, scratchExpression, ScratchOutput(errorText, ScratchOutputType.ERROR))
it.handle( }
file, } else {
scratchExpression, handlers.forEach { it.error(file, errorText) }
ScratchOutput(DefaultErrorMessages.render(diagnostic), ScratchOutputType.ERROR)
)
} }
} else {
handlers.forEach { it.error(file, errorText) }
} }
} }
return@runReadAction false return@runReadAction false
@@ -191,6 +192,10 @@ class KtCompilingExecutor(file: ScratchFile) : ScratchExecutor(file) {
handlers.forEach { it.onFinish(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 { private fun ScratchFile.findExpression(lineStart: Int, lineEnd: Int): ScratchExpression {
return getExpressions().first { it.lineStart == lineStart && it.lineEnd == lineEnd } return getExpressions().first { it.lineStart == lineStart && it.lineEnd == lineEnd }
} }