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
This commit is contained in:
Andrey Uskov
2022-09-12 21:39:48 +03:00
committed by teamcity
parent 5fcb18ac2b
commit d223dafc45
3 changed files with 18 additions and 9 deletions
@@ -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(),
@@ -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
}
}
@@ -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)
}