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 0980e6bffee..4b0ecdf636f 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.kt @@ -41,6 +41,9 @@ import java.io.File import java.io.PrintStream abstract class CLICompiler : CLITool() { + companion object { + const val SCRIPT_PLUGIN_REGISTRAR_NAME = "org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar" + } abstract val defaultPerformanceManager: CommonCompilerPerformanceManager @@ -188,9 +191,7 @@ abstract class CLICompiler : CLITool() { } private fun tryLoadScriptingPluginFromCurrentClassLoader(configuration: CompilerConfiguration): Boolean = try { - val pluginRegistrarClass = PluginCliParser::class.java.classLoader.loadClass( - "org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar" - ) + val pluginRegistrarClass = PluginCliParser::class.java.classLoader.loadClass(SCRIPT_PLUGIN_REGISTRAR_NAME) val pluginRegistrar = pluginRegistrarClass.newInstance() as? ComponentRegistrar if (pluginRegistrar != null) { configuration.add(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, pluginRegistrar) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt index 2db8cd16b44..e6444cc3136 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/FirKotlinToJvmBytecodeCompiler.kt @@ -10,11 +10,13 @@ import org.jetbrains.kotlin.asJava.FilteredJvmDiagnostics import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory +import org.jetbrains.kotlin.cli.common.CLICompiler import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.CommonCompilerPerformanceManager import org.jetbrains.kotlin.cli.common.checkKotlinPackageUsage import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.STRONG_WARNING import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots @@ -22,6 +24,7 @@ import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots import org.jetbrains.kotlin.codegen.ClassBuilderFactories import org.jetbrains.kotlin.codegen.CodegenFactory import org.jetbrains.kotlin.codegen.state.GenerationState +import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector @@ -82,6 +85,19 @@ object FirKotlinToJvmBytecodeCompiler { "ATTENTION!\n This build uses in-dev FIR: \n -Xuse-fir" ) + projectConfiguration.get(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS)?.let { pluginComponentRegistrars -> + val nonScriptPlugins = pluginComponentRegistrars.filter { + it::class.java.canonicalName != CLICompiler.SCRIPT_PLUGIN_REGISTRAR_NAME + } + if (nonScriptPlugins.isNotEmpty()) { + messageCollector.report( + CompilerMessageSeverity.ERROR, + "Compiler plugins are enabled with K2 compiler.\n K2 does not support plugins yet, so please remove -Xuse-k2 flag" + ) + return false + } + } + val outputs = ArrayList>(chunk.size) val targetIds = projectConfiguration.get(JVMConfigurationKeys.MODULES)?.map(::TargetId) val incrementalComponents = projectConfiguration.get(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS) diff --git a/compiler/testData/cli/jvm/pluginWithK2Error.args b/compiler/testData/cli/jvm/pluginWithK2Error.args new file mode 100644 index 00000000000..32f95b44ec5 --- /dev/null +++ b/compiler/testData/cli/jvm/pluginWithK2Error.args @@ -0,0 +1,10 @@ +-d +$TEMP_DIR$ +-Xplugin=dist/kotlinc/lib/android-extensions-compiler.jar +-P +plugin\:org.jetbrains.kotlin.android\:package=com.myapp +-P +plugin\:org.jetbrains.kotlin.android\:variant=main;$TESTDATA_DIR$/androidPlugin/res +$TESTDATA_DIR$/pluginSimple.kt +$TESTDATA_DIR$/androidPlugin +-Xuse-fir diff --git a/compiler/testData/cli/jvm/pluginWithK2Error.kt b/compiler/testData/cli/jvm/pluginWithK2Error.kt new file mode 100644 index 00000000000..34573286b09 --- /dev/null +++ b/compiler/testData/cli/jvm/pluginWithK2Error.kt @@ -0,0 +1,8 @@ +import android.view.* +import android.app.* +import android.widget.* +import kotlinx.android.synthetic.main.layout.* + +class MyActivity : Activity() { + init { textView.setText("Some text") } +} \ No newline at end of file diff --git a/compiler/testData/cli/jvm/pluginWithK2Error.out b/compiler/testData/cli/jvm/pluginWithK2Error.out new file mode 100644 index 00000000000..df2bf311d62 --- /dev/null +++ b/compiler/testData/cli/jvm/pluginWithK2Error.out @@ -0,0 +1,6 @@ +warning: ATTENTION! + This build uses in-dev FIR: + -Xuse-fir +error: compiler plugins are enabled with K2 compiler. + K2 does not support plugins yet, so please remove -Xuse-k2 flag +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 396a8be9af7..00e894a46b0 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java @@ -844,6 +844,11 @@ public class CliTestGenerated extends AbstractCliTest { runTest("compiler/testData/cli/jvm/pluginSimple.args"); } + @TestMetadata("pluginWithK2Error.args") + public void testPluginWithK2Error() throws Exception { + runTest("compiler/testData/cli/jvm/pluginWithK2Error.args"); + } + @TestMetadata("progressiveModeOff.args") public void testProgressiveModeOff() throws Exception { runTest("compiler/testData/cli/jvm/progressiveModeOff.args");