From dc71ac09b25ed25d7979b4d642cf6823b9a66955 Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Fri, 12 Jan 2018 10:50:59 +0300 Subject: [PATCH] Scratch: do not report errors from generated file to editor --- .../scratch/compile/KtCompilingExecutor.kt | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/compile/KtCompilingExecutor.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/compile/KtCompilingExecutor.kt index 7e11a8c1e16..d0fb9cbfa4e 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/compile/KtCompilingExecutor.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/compile/KtCompilingExecutor.kt @@ -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 } }