From d223dafc4559c96ff943b91b0f611b3396fef879 Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Mon, 12 Sep 2022 21:39:48 +0300 Subject: [PATCH] Don't wrap ProcessCanceledException with other exceptions ProcessCanceledException indicates that the compilation process was terminated by user. This kind of exception should not be wrapped anyhow in order to be handled on toplevel in CLICompiler. #KT-38483 Fixed --- .../kotlin/backend/common/CodegenUtil.kt | 2 ++ .../backend/common/CompilationException.kt | 22 +++++++++++-------- .../backend/jvm/codegen/FunctionCodegen.kt | 3 +++ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt index 0d2b8992b89..8662c590a4d 100644 --- a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt +++ b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.backend.common import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.progress.ProcessCanceledException import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.* @@ -236,6 +237,7 @@ object CodegenUtil { // CompilationException (the only KotlinExceptionWithAttachments possible here) is already supposed // to have all information about the context. if (exception is KotlinExceptionWithAttachments) throw exception + if (exception is ProcessCanceledException) throw exception throw BackendException( getExceptionMessage("Backend", "Exception during $phase", exception, location) + additionalMessage?.let { "\n" + it }.orEmpty(), diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CompilationException.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CompilationException.kt index fcfc90c538f..edb9890670a 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CompilationException.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CompilationException.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.backend.common +import com.intellij.openapi.progress.ProcessCanceledException import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.IrDeclaration @@ -96,13 +97,16 @@ fun Throwable.wrapWithCompilationException( message: String, file: IrFile, element: IrElement? -): CompilationException { - return CompilationException( - "$message: ${this::class.qualifiedName}: ${this.message}", - file, - element, - cause = this - ).apply { - stackTrace = this@wrapWithCompilationException.stackTrace - } +): RuntimeException { + return if (this is ProcessCanceledException) + this + else + CompilationException( + "$message: ${this::class.qualifiedName}: ${this.message}", + file, + element, + cause = this + ).apply { + stackTrace = this@wrapWithCompilationException.stackTrace + } } \ No newline at end of file diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt index 2dfce611950..0700f6fb3cf 100644 --- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt +++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.backend.jvm.codegen +import com.intellij.openapi.progress.ProcessCanceledException import org.jetbrains.kotlin.backend.common.lower.BOUND_RECEIVER_PARAMETER import org.jetbrains.kotlin.backend.common.lower.BOUND_VALUE_PARAMETER import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin @@ -42,6 +43,8 @@ class FunctionCodegen(private val irFunction: IrFunction, private val classCodeg ): SMAPAndMethodNode = try { doGenerate(reifiedTypeParameters) + } catch (e: ProcessCanceledException) { + throw e } catch (e: Throwable) { throw RuntimeException("Exception while generating code for:\n${irFunction.dump()}", e) }