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) }