diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.kt index 06ff899b34f..8abbeef97bc 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.kt @@ -26,9 +26,7 @@ import org.jetbrains.kotlin.cli.common.ExitCode.* import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback import org.jetbrains.kotlin.cli.common.messages.* -import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR -import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.INFO -import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.LOGGING +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.* import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser import org.jetbrains.kotlin.cli.plugins.processCompilerPluginsOptions import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor @@ -48,13 +46,15 @@ import java.io.PrintStream abstract class CLICompiler : CLITool() { companion object { - const val SCRIPT_PLUGIN_REGISTRAR_NAME = "org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar" + const val SCRIPT_PLUGIN_REGISTRAR_NAME = + "org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar" const val SCRIPT_PLUGIN_COMMANDLINE_PROCESSOR_NAME = "org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCommandLineProcessor" } abstract val defaultPerformanceManager: CommonCompilerPerformanceManager - protected open fun createPerformanceManager(arguments: A, services: Services): CommonCompilerPerformanceManager = defaultPerformanceManager + protected open fun createPerformanceManager(arguments: A, services: Services): CommonCompilerPerformanceManager = + defaultPerformanceManager // Used in CompilerRunnerUtil#invokeExecMethod, in Eclipse plugin (KotlinCLICompiler) and in kotlin-gradle-plugin (GradleCompilerRunner) fun execAndOutputXml(errStream: PrintStream, services: Services, vararg args: String): ExitCode { @@ -179,23 +179,37 @@ abstract class CLICompiler : CLITool() { } } - if (pluginConfigurations.isNotEmpty() && (pluginClasspaths.isNotEmpty() || pluginOptions.isNotEmpty())) { - val message = buildString { - appendLine("Mixing legacy and modern plugin arguments is prohibited. Please use only one syntax") - appendLine("Legacy arguments:") - if (pluginClasspaths.isNotEmpty()) { - appendLine(" -Xplugin=${pluginClasspaths.joinToString(",")}") - } - pluginOptions.forEach { - appendLine(" -P $it") - } - appendLine("Modern arguments:") - pluginConfigurations.forEach { - appendLine(" -Xcompiler-plugin=$it") - } + if (pluginConfigurations.isNotEmpty()) { + var hasErrors = false + messageCollector.report(WARNING, "Argument -Xcompiler-plugin is experimental") + if (!arguments.useK2) { + hasErrors = true + messageCollector.report( + ERROR, + "-Xcompiler-plugin argument is allowed only for for K2 compiler. Please use -Xplugin argument or enable -Xuse-k2" + ) + } + if (pluginClasspaths.isNotEmpty() || pluginOptions.isNotEmpty()) { + hasErrors = true + val message = buildString { + appendLine("Mixing legacy and modern plugin arguments is prohibited. Please use only one syntax") + appendLine("Legacy arguments:") + if (pluginClasspaths.isNotEmpty()) { + appendLine(" -Xplugin=${pluginClasspaths.joinToString(",")}") + } + pluginOptions.forEach { + appendLine(" -P $it") + } + appendLine("Modern arguments:") + pluginConfigurations.forEach { + appendLine(" -Xcompiler-plugin=$it") + } + } + messageCollector.report(ERROR, message) + } + if (hasErrors) { + return INTERNAL_ERROR } - messageCollector.report(ERROR, message) - return INTERNAL_ERROR } if (!arguments.disableDefaultScriptingPlugin) { diff --git a/compiler/testData/cli/jvm/plugins/firAllOpenPlugin_modern.args b/compiler/testData/cli/jvm/plugins/firAllOpenPlugin_modern.args index 764570e5f68..dfbb0b8aafc 100644 --- a/compiler/testData/cli/jvm/plugins/firAllOpenPlugin_modern.args +++ b/compiler/testData/cli/jvm/plugins/firAllOpenPlugin_modern.args @@ -1,4 +1,5 @@ -d $TEMP_DIR$ +-Xuse-k2 -Xcompiler-plugin=dist/kotlinc/lib/allopen-compiler-plugin.jar=annotation=foo.AllOpen $TESTDATA_DIR$/firAllOpenPlugin.kt diff --git a/compiler/testData/cli/jvm/plugins/firAllOpenPlugin_modern.out b/compiler/testData/cli/jvm/plugins/firAllOpenPlugin_modern.out index d86bac9de59..f4b5c860a5b 100644 --- a/compiler/testData/cli/jvm/plugins/firAllOpenPlugin_modern.out +++ b/compiler/testData/cli/jvm/plugins/firAllOpenPlugin_modern.out @@ -1 +1,5 @@ +warning: argument -Xcompiler-plugin is experimental +warning: ATTENTION! + This build uses experimental K2 compiler: + -Xuse-k2 OK diff --git a/compiler/testData/cli/jvm/plugins/mixingModernAndLegacyArgs.args b/compiler/testData/cli/jvm/plugins/mixingModernAndLegacyArgs.args index dbe83513c0c..543642899dd 100644 --- a/compiler/testData/cli/jvm/plugins/mixingModernAndLegacyArgs.args +++ b/compiler/testData/cli/jvm/plugins/mixingModernAndLegacyArgs.args @@ -1,6 +1,7 @@ -d $TEMP_DIR$ -Xcompiler-plugin=dist/kotlinc/lib/noarg-compiler-plugin.jar=annotation=foo.NoArg +-Xuse-k2 -Xplugin=dist/kotlinc/lib/allopen-compiler-plugin.jar -P diff --git a/compiler/testData/cli/jvm/plugins/multipleOptionsForOnePlugin.args b/compiler/testData/cli/jvm/plugins/multipleOptionsForOnePlugin.args index 5f76fb11b84..c0e9149c866 100644 --- a/compiler/testData/cli/jvm/plugins/multipleOptionsForOnePlugin.args +++ b/compiler/testData/cli/jvm/plugins/multipleOptionsForOnePlugin.args @@ -1,4 +1,5 @@ -d $TEMP_DIR$ +-Xuse-k2 -Xcompiler-plugin=dist/kotlinc/lib/allopen-compiler-plugin.jar=annotation=foo.AllOpen1,annotation=foo.AllOpen2 $TESTDATA_DIR$/multipleOptionsForOnePlugin.kt diff --git a/compiler/testData/cli/jvm/plugins/multipleOptionsForOnePlugin.out b/compiler/testData/cli/jvm/plugins/multipleOptionsForOnePlugin.out index d86bac9de59..f4b5c860a5b 100644 --- a/compiler/testData/cli/jvm/plugins/multipleOptionsForOnePlugin.out +++ b/compiler/testData/cli/jvm/plugins/multipleOptionsForOnePlugin.out @@ -1 +1,5 @@ +warning: argument -Xcompiler-plugin is experimental +warning: ATTENTION! + This build uses experimental K2 compiler: + -Xuse-k2 OK diff --git a/compiler/testData/cli/jvm/plugins/multiplePlugins.args b/compiler/testData/cli/jvm/plugins/multiplePlugins.args index 032033a4983..dfcb30800fe 100644 --- a/compiler/testData/cli/jvm/plugins/multiplePlugins.args +++ b/compiler/testData/cli/jvm/plugins/multiplePlugins.args @@ -1,5 +1,6 @@ -d $TEMP_DIR$ +-Xuse-k2 -Xcompiler-plugin=dist/kotlinc/lib/allopen-compiler-plugin.jar=annotation=foo.AllOpen -Xcompiler-plugin=dist/kotlinc/lib/noarg-compiler-plugin.jar=annotation=foo.NoArg $TESTDATA_DIR$/multiplePlugins.kt diff --git a/compiler/testData/cli/jvm/plugins/multiplePlugins.out b/compiler/testData/cli/jvm/plugins/multiplePlugins.out index 294392adc37..1ec5c3c01b7 100644 --- a/compiler/testData/cli/jvm/plugins/multiplePlugins.out +++ b/compiler/testData/cli/jvm/plugins/multiplePlugins.out @@ -1,4 +1,7 @@ -compiler/testData/cli/jvm/plugins/multiplePlugins.kt:11:17: error: noarg constructor generation is not possible for inner classes +warning: ATTENTION! + This build uses experimental K2 compiler: + -Xuse-k2 +compiler/testData/cli/jvm/plugins/multiplePlugins.kt:11:17: error: inner class Inner(val s: String) ^ COMPILATION_ERROR diff --git a/compiler/testData/cli/jvm/plugins/multiplePluginsInSameArg.args b/compiler/testData/cli/jvm/plugins/multiplePluginsInSameArg.args index 3858669e48b..a4cdba77296 100644 --- a/compiler/testData/cli/jvm/plugins/multiplePluginsInSameArg.args +++ b/compiler/testData/cli/jvm/plugins/multiplePluginsInSameArg.args @@ -1,4 +1,5 @@ -d $TEMP_DIR$ +-Xuse-k2 -Xcompiler-plugin=dist/kotlinc/lib/allopen-compiler-plugin.jar,dist/kotlinc/lib/noarg-compiler-plugin.jar=annotation=foo.AllOpen $TESTDATA_DIR$/multiplePluginsInSameArg.kt diff --git a/compiler/testData/cli/jvm/plugins/noPluginInClasspath.args b/compiler/testData/cli/jvm/plugins/noPluginInClasspath.args index dd7a39fe7a7..71a93787fd3 100644 --- a/compiler/testData/cli/jvm/plugins/noPluginInClasspath.args +++ b/compiler/testData/cli/jvm/plugins/noPluginInClasspath.args @@ -1,4 +1,5 @@ -d $TEMP_DIR$ +-Xuse-k2 -Xcompiler-plugin=dist/kotlinc/lib/kotlin-reflect.jar $TESTDATA_DIR$/noPluginInClasspath.kt diff --git a/compiler/testData/cli/jvm/plugins/pluginSimple_modern.out b/compiler/testData/cli/jvm/plugins/pluginSimple_modern.out deleted file mode 100644 index d86bac9de59..00000000000 --- a/compiler/testData/cli/jvm/plugins/pluginSimple_modern.out +++ /dev/null @@ -1 +0,0 @@ -OK diff --git a/compiler/testData/cli/jvm/plugins/pluginSimple_modern.args b/compiler/testData/cli/jvm/plugins/pluginSimple_modern_noK2.args similarity index 100% rename from compiler/testData/cli/jvm/plugins/pluginSimple_modern.args rename to compiler/testData/cli/jvm/plugins/pluginSimple_modern_noK2.args diff --git a/compiler/testData/cli/jvm/plugins/pluginSimple_modern_noK2.out b/compiler/testData/cli/jvm/plugins/pluginSimple_modern_noK2.out new file mode 100644 index 00000000000..09389a9824c --- /dev/null +++ b/compiler/testData/cli/jvm/plugins/pluginSimple_modern_noK2.out @@ -0,0 +1,2 @@ +error: -Xcompiler-plugin argument is allowed only for for K2 compiler. Please use -Xplugin argument or enable -Xuse-k2 +COMPILATION_ERROR diff --git a/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java index 20a2f8c1f26..50ba7bf7bb4 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java @@ -109,9 +109,9 @@ public class CliTestGenerated extends AbstractCliTest { runTest("compiler/testData/cli/jvm/plugins/pluginSimple_legacy.args"); } - @TestMetadata("pluginSimple_modern.args") - public void testPluginSimple_modern() throws Exception { - runTest("compiler/testData/cli/jvm/plugins/pluginSimple_modern.args"); + @TestMetadata("pluginSimple_modern_noK2.args") + public void testPluginSimple_modern_noK2() throws Exception { + runTest("compiler/testData/cli/jvm/plugins/pluginSimple_modern_noK2.args"); } @TestMetadata("pluginWithK2Error_legacy.args")