[CLI] Report compilation error if compiler plugins are enabled alongside with K2 compiler

^KT-52037 Fixed
This commit is contained in:
Dmitriy Novozhilov
2022-04-26 11:48:18 +04:00
parent e5bfb8295e
commit 19f4c3edda
6 changed files with 49 additions and 3 deletions
@@ -41,6 +41,9 @@ import java.io.File
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"
}
abstract val defaultPerformanceManager: CommonCompilerPerformanceManager
@@ -188,9 +191,7 @@ abstract class CLICompiler<A : CommonCompilerArguments> : CLITool<A>() {
}
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)
@@ -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<Pair<FirResult, GenerationState>>(chunk.size)
val targetIds = projectConfiguration.get(JVMConfigurationKeys.MODULES)?.map(::TargetId)
val incrementalComponents = projectConfiguration.get(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS)
+10
View File
@@ -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
+8
View File
@@ -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") }
}
+6
View File
@@ -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
@@ -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");