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");