[CLI] Make -Xcompiler-plugin experimental and K2 only

This commit is contained in:
Dmitriy Novozhilov
2022-07-12 13:32:20 +03:00
committed by teamcity
parent 928416c9c5
commit b2e558a174
14 changed files with 58 additions and 26 deletions
@@ -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<A : CommonCompilerArguments> : CLITool<A>() {
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<A : CommonCompilerArguments> : CLITool<A>() {
}
}
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) {
@@ -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
@@ -1 +1,5 @@
warning: argument -Xcompiler-plugin is experimental
warning: ATTENTION!
This build uses experimental K2 compiler:
-Xuse-k2
OK
@@ -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
@@ -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
@@ -1 +1,5 @@
warning: argument -Xcompiler-plugin is experimental
warning: ATTENTION!
This build uses experimental K2 compiler:
-Xuse-k2
OK
@@ -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
+4 -1
View File
@@ -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
@@ -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
@@ -1,4 +1,5 @@
-d
$TEMP_DIR$
-Xuse-k2
-Xcompiler-plugin=dist/kotlinc/lib/kotlin-reflect.jar
$TESTDATA_DIR$/noPluginInClasspath.kt
@@ -1 +0,0 @@
OK
@@ -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
@@ -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")