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