From f1b6bd591468d011629674134fdf32fb426accf3 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 9 Jun 2015 15:02:17 +0300 Subject: [PATCH] kapt: Stop compiler gracefully --- .../org/jetbrains/kotlin/cli/common/CLICompiler.java | 11 ----------- .../cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java | 2 ++ .../resolve/jvm/TopDownAnalyzerFacadeForJVM.java | 3 ++- .../extensions/AnalysisCompletedHandlerExtension.kt | 3 ++- .../org/jetbrains/kotlin/analyzer/AnalysisResult.kt | 11 ++++++++--- .../kotlin/annotation/StubProducerExtension.kt | 10 ++++++++-- 6 files changed, 22 insertions(+), 18 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java index a418738f581..197f1321b19 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java @@ -152,9 +152,6 @@ public abstract class CLICompiler { Disposer.dispose(rootDisposable); } } - catch (CompilationInterruptedException e) { - return e.exitCode; - } catch (Throwable t) { groupingCollector.report(CompilerMessageSeverity.EXCEPTION, OutputMessageUtil.renderException(t), CompilerMessageLocation.NO_LOCATION); @@ -204,12 +201,4 @@ public abstract class CLICompiler { return INTERNAL_ERROR; } } - - public static class CompilationInterruptedException extends RuntimeException { - final ExitCode exitCode; - - public CompilationInterruptedException(ExitCode exitCode) { - this.exitCode = exitCode; - } - } } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index be92d9ccc45..60ad459d4e4 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -287,6 +287,8 @@ public class KotlinToJVMBytecodeCompiler { return null; } + if (!result.getShouldGenerateCode()) return null; + result.throwIfError(); return generate(environment, result, environment.getSourceFiles(), null, null); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java index 5601544227a..31d7d7a0dc2 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java @@ -155,7 +155,8 @@ public enum TopDownAnalyzerFacadeForJVM { AnalysisCompletedHandlerExtension.Companion.getInstances(moduleContext.getProject()); for (AnalysisCompletedHandlerExtension extension : analysisCompletedHandlerExtensions) { - extension.analysisCompleted(project, module, bindingContext, files); + AnalysisResult result = extension.analysisCompleted(project, module, bindingContext, files); + if (result != null) return result; } return AnalysisResult.success(bindingContext, module); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/extensions/AnalysisCompletedHandlerExtension.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/extensions/AnalysisCompletedHandlerExtension.kt index a387b0c9799..4bd47baf21f 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/extensions/AnalysisCompletedHandlerExtension.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/extensions/AnalysisCompletedHandlerExtension.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.resolve.jvm.extensions import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor @@ -33,5 +34,5 @@ public interface AnalysisCompletedHandlerExtension { project: Project, module: ModuleDescriptor, bindingContext: BindingContext, - files: Collection) + files: Collection): AnalysisResult? } \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalysisResult.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalysisResult.kt index f91f6b8b1a4..c9b8b395f5c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalysisResult.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalysisResult.kt @@ -21,9 +21,10 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.types.ErrorUtils import kotlin.platform.platformStatic -public data open class AnalysisResult protected ( +public data open class AnalysisResult protected constructor( public val bindingContext: BindingContext, - public val moduleDescriptor: ModuleDescriptor + public val moduleDescriptor: ModuleDescriptor, + public val shouldGenerateCode: Boolean = true ) { public val error: Throwable @@ -43,7 +44,11 @@ public data open class AnalysisResult protected ( public val EMPTY: AnalysisResult = success(BindingContext.EMPTY, ErrorUtils.getErrorModule()) platformStatic public fun success(bindingContext: BindingContext, module: ModuleDescriptor): AnalysisResult { - return AnalysisResult(bindingContext, module) + return AnalysisResult(bindingContext, module, true) + } + + platformStatic public fun success(bindingContext: BindingContext, module: ModuleDescriptor, shouldGenerateCode: Boolean): AnalysisResult { + return AnalysisResult(bindingContext, module, shouldGenerateCode) } platformStatic public fun error(bindingContext: BindingContext, error: Throwable): AnalysisResult { diff --git a/plugins/annotation-collector/src/org/jetbrains/kotlin/annotation/StubProducerExtension.kt b/plugins/annotation-collector/src/org/jetbrains/kotlin/annotation/StubProducerExtension.kt index 83858117f99..e506644fd36 100644 --- a/plugins/annotation-collector/src/org/jetbrains/kotlin/annotation/StubProducerExtension.kt +++ b/plugins/annotation-collector/src/org/jetbrains/kotlin/annotation/StubProducerExtension.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.annotation import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.cli.common.CLICompiler import org.jetbrains.kotlin.cli.common.ExitCode import org.jetbrains.kotlin.cli.common.output.outputUtils.writeAllTo @@ -34,7 +35,12 @@ import java.io.File public class StubProducerExtension(val stubsOutputDir: File) : AnalysisCompletedHandlerExtension { - override fun analysisCompleted(project: Project, module: ModuleDescriptor, bindingContext: BindingContext, files: Collection) { + override fun analysisCompleted( + project: Project, + module: ModuleDescriptor, + bindingContext: BindingContext, + files: Collection + ): AnalysisResult? { val forExtraDiagnostics = BindingTraceContext() val generationState = GenerationState( @@ -60,7 +66,7 @@ public class StubProducerExtension(val stubsOutputDir: File) : AnalysisCompleted generationState.getFactory().writeAllTo(stubsOutputDir) generationState.destroy() - throw CLICompiler.CompilationInterruptedException(ExitCode.OK) + return AnalysisResult.success(BindingContext.EMPTY, module, shouldGenerateCode = false) } }