From d54b977c2cd4dd74c017b74dd14743f2f1a41771 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Mon, 15 Jun 2015 16:37:45 +0300 Subject: [PATCH] If KotlinBuilder throws exception, user can see its stacktrace and report by one-click. Original commit: 7511b5bafec316f50e98046a8531b400dcb565a8 --- .../kotlin/jps/build/KotlinBuilder.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index 69f86cbc819..c6e8ec9afd2 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -39,6 +39,7 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.* import org.jetbrains.kotlin.cli.common.messages.MessageCollector +import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil import org.jetbrains.kotlin.compilerRunner.CompilerEnvironment import org.jetbrains.kotlin.compilerRunner.KotlinCompilerRunner.runK2JsCompiler import org.jetbrains.kotlin.compilerRunner.KotlinCompilerRunner.runK2JvmCompiler @@ -94,6 +95,24 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR } val messageCollector = MessageCollectorAdapter(context) + try { + return doBuild(chunk, context, dirtyFilesHolder, messageCollector, outputConsumer) + } catch (e: Throwable) { + messageCollector.report( + CompilerMessageSeverity.EXCEPTION, + OutputMessageUtil.renderException(e), + CompilerMessageLocation.NO_LOCATION + ) + return ABORT + } + } + + private fun doBuild( + chunk: ModuleChunk, + context: CompileContext, + dirtyFilesHolder: DirtyFilesHolder, + messageCollector: MessageCollectorAdapter, outputConsumer: ModuleLevelBuilder.OutputConsumer + ): ModuleLevelBuilder.ExitCode { // Workaround for Android Studio if (!JpsUtils.isJsKotlinModule(chunk.representativeTarget()) && !JavaBuilder.IS_ENABLED[context, true]) { messageCollector.report(INFO, "Kotlin JPS plugin is disabled", CompilerMessageLocation.NO_LOCATION)