diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index 00fcca192fe..22ca7f8e456 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -288,26 +288,29 @@ public class KotlinToJVMBytecodeCompiler { }, environment.getSourceFiles() ); - return analyzerWithCompilerReport.hasErrors() ? null : analyzerWithCompilerReport.getAnalyzeExhaust(); + AnalyzeExhaust exhaust = analyzerWithCompilerReport.getAnalyzeExhaust(); + assert exhaust != null : "AnalyzeExhaust should be non-null, compiling: " + environment.getSourceFiles(); + + CompilerPluginContext context = new CompilerPluginContext(environment.getProject(), exhaust.getBindingContext(), + environment.getSourceFiles()); + for (CompilerPlugin plugin : environment.getConfiguration().getList(CLIConfigurationKeys.COMPILER_PLUGINS)) { + plugin.processFiles(context); + } + + return analyzerWithCompilerReport.hasErrors() ? null : exhaust; } @NotNull private static GenerationState generate(@NotNull JetCoreEnvironment environment, @NotNull AnalyzeExhaust exhaust) { - Project project = environment.getProject(); CompilerConfiguration configuration = environment.getConfiguration(); GenerationState generationState = new GenerationState( - project, ClassBuilderFactories.BINARIES, Progress.DEAF, exhaust.getBindingContext(), environment.getSourceFiles(), + environment.getProject(), ClassBuilderFactories.BINARIES, Progress.DEAF, exhaust.getBindingContext(), environment.getSourceFiles(), configuration.get(JVMConfigurationKeys.GENERATE_NOT_NULL_ASSERTIONS, false), configuration.get(JVMConfigurationKeys.GENERATE_NOT_NULL_PARAMETER_ASSERTIONS, false), GenerationState.GenerateClassFilter.GENERATE_ALL, configuration.get(JVMConfigurationKeys.ENABLE_INLINE, InlineUtil.DEFAULT_INLINE_FLAG) ); KotlinCodegenFacade.compileCorrectFiles(generationState, CompilationErrorHandler.THROW_EXCEPTION); - - CompilerPluginContext context = new CompilerPluginContext(project, exhaust.getBindingContext(), environment.getSourceFiles()); - for (CompilerPlugin plugin : configuration.getList(CLIConfigurationKeys.COMPILER_PLUGINS)) { - plugin.processFiles(context); - } return generationState; } } diff --git a/libraries/tools/kdoc-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/doc/KDocMojo.java b/libraries/tools/kdoc-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/doc/KDocMojo.java index 5e8adbff854..0db657c1a58 100644 --- a/libraries/tools/kdoc-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/doc/KDocMojo.java +++ b/libraries/tools/kdoc-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/doc/KDocMojo.java @@ -17,8 +17,11 @@ package org.jetbrains.kotlin.maven.doc; import org.apache.maven.plugin.MojoExecutionException; +import org.jetbrains.jet.cli.common.CLICompiler; +import org.jetbrains.jet.cli.common.ExitCode; import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments; import org.jetbrains.jet.cli.common.arguments.K2JVMCompilerArguments; +import org.jetbrains.jet.cli.common.messages.MessageCollector; import org.jetbrains.jet.cli.jvm.K2JVMCompiler; import org.jetbrains.kotlin.doc.KDocArguments; import org.jetbrains.kotlin.doc.KDocCompiler; @@ -183,6 +186,21 @@ public class KDocMojo extends KotlinCompileMojoBase { return new KDocArguments(); } + @Override + protected ExitCode executeCompiler( + CLICompiler compiler, + CommonCompilerArguments arguments, + MessageCollector messageCollector + ) { + ExitCode exitCode = super.executeCompiler(compiler, arguments, messageCollector); + if (exitCode == ExitCode.COMPILATION_ERROR) { + // KDoc should ignore compilation errors, since it's not supposed to compile code. + // KDoc is supposed to generate documentation by the code that may be correct or not + return ExitCode.OK; + } + return exitCode; + } + @Override protected void configureCompilerArguments(CommonCompilerArguments arguments) throws MojoExecutionException { if (arguments instanceof K2JVMCompilerArguments) { diff --git a/libraries/tools/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/KDocCompiler.kt b/libraries/tools/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/KDocCompiler.kt index f1b226f6be5..a5dd677014d 100644 --- a/libraries/tools/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/KDocCompiler.kt +++ b/libraries/tools/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/KDocCompiler.kt @@ -6,6 +6,7 @@ import org.jetbrains.jet.cli.common.CLIConfigurationKeys import org.jetbrains.jet.cli.common.arguments.K2JVMCompilerArguments; import org.jetbrains.jet.cli.jvm.K2JVMCompiler import org.jetbrains.jet.config.CompilerConfiguration +import org.jetbrains.jet.cli.common.messages.MessageCollector /** * Main for running the KDocCompiler @@ -23,6 +24,9 @@ class KDocCompiler() : K2JVMCompiler() { protected override fun configureEnvironment(configuration : CompilerConfiguration, arguments : K2JVMCompilerArguments) { super.configureEnvironment(configuration, arguments) configuration.add(CLIConfigurationKeys.COMPILER_PLUGINS, KDoc(arguments as KDocArguments)) + + // Suppress all messages from the compiler, because KDoc is not a compiler + configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE) } protected override fun createArguments() : K2JVMCompilerArguments { diff --git a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinCompileMojoBase.java b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinCompileMojoBase.java index 302e9481deb..2d51fdd07cb 100644 --- a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinCompileMojoBase.java +++ b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinCompileMojoBase.java @@ -206,7 +206,7 @@ public abstract class KotlinCompileMojoBase extends AbstractMojo { } }; - final ExitCode exitCode = compiler.exec(messageCollector, arguments); + final ExitCode exitCode = executeCompiler(compiler, arguments, messageCollector); switch (exitCode) { case COMPILATION_ERROR: @@ -258,6 +258,15 @@ public abstract class KotlinCompileMojoBase extends AbstractMojo { return new K2JVMCompilerArguments(); } + @NotNull + protected ExitCode executeCompiler( + @NotNull CLICompiler compiler, + @NotNull CommonCompilerArguments arguments, + @NotNull MessageCollector messageCollector + ) { + return compiler.exec(messageCollector, arguments); + } + /** * Derived classes can register custom plugins or configurations */