[CLI] Report compilation error if compiler plugins are enabled alongside with K2 compiler
^KT-52037 Fixed
This commit is contained in:
@@ -41,6 +41,9 @@ import java.io.File
|
|||||||
import java.io.PrintStream
|
import java.io.PrintStream
|
||||||
|
|
||||||
abstract class CLICompiler<A : CommonCompilerArguments> : CLITool<A>() {
|
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
|
abstract val defaultPerformanceManager: CommonCompilerPerformanceManager
|
||||||
|
|
||||||
@@ -188,9 +191,7 @@ abstract class CLICompiler<A : CommonCompilerArguments> : CLITool<A>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun tryLoadScriptingPluginFromCurrentClassLoader(configuration: CompilerConfiguration): Boolean = try {
|
private fun tryLoadScriptingPluginFromCurrentClassLoader(configuration: CompilerConfiguration): Boolean = try {
|
||||||
val pluginRegistrarClass = PluginCliParser::class.java.classLoader.loadClass(
|
val pluginRegistrarClass = PluginCliParser::class.java.classLoader.loadClass(SCRIPT_PLUGIN_REGISTRAR_NAME)
|
||||||
"org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar"
|
|
||||||
)
|
|
||||||
val pluginRegistrar = pluginRegistrarClass.newInstance() as? ComponentRegistrar
|
val pluginRegistrar = pluginRegistrarClass.newInstance() as? ComponentRegistrar
|
||||||
if (pluginRegistrar != null) {
|
if (pluginRegistrar != null) {
|
||||||
configuration.add(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, pluginRegistrar)
|
configuration.add(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, pluginRegistrar)
|
||||||
|
|||||||
+16
@@ -10,11 +10,13 @@ import org.jetbrains.kotlin.asJava.FilteredJvmDiagnostics
|
|||||||
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl
|
import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
|
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.CLIConfigurationKeys
|
||||||
import org.jetbrains.kotlin.cli.common.CommonCompilerPerformanceManager
|
import org.jetbrains.kotlin.cli.common.CommonCompilerPerformanceManager
|
||||||
import org.jetbrains.kotlin.cli.common.checkKotlinPackageUsage
|
import org.jetbrains.kotlin.cli.common.checkKotlinPackageUsage
|
||||||
import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
|
import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
|
||||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
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.CompilerMessageSeverity.STRONG_WARNING
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||||
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
|
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.ClassBuilderFactories
|
||||||
import org.jetbrains.kotlin.codegen.CodegenFactory
|
import org.jetbrains.kotlin.codegen.CodegenFactory
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
|
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
|
||||||
import org.jetbrains.kotlin.config.*
|
import org.jetbrains.kotlin.config.*
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
||||||
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
||||||
@@ -82,6 +85,19 @@ object FirKotlinToJvmBytecodeCompiler {
|
|||||||
"ATTENTION!\n This build uses in-dev FIR: \n -Xuse-fir"
|
"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 outputs = ArrayList<Pair<FirResult, GenerationState>>(chunk.size)
|
||||||
val targetIds = projectConfiguration.get(JVMConfigurationKeys.MODULES)?.map(::TargetId)
|
val targetIds = projectConfiguration.get(JVMConfigurationKeys.MODULES)?.map(::TargetId)
|
||||||
val incrementalComponents = projectConfiguration.get(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS)
|
val incrementalComponents = projectConfiguration.get(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS)
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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") }
|
||||||
|
}
|
||||||
@@ -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");
|
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")
|
@TestMetadata("progressiveModeOff.args")
|
||||||
public void testProgressiveModeOff() throws Exception {
|
public void testProgressiveModeOff() throws Exception {
|
||||||
runTest("compiler/testData/cli/jvm/progressiveModeOff.args");
|
runTest("compiler/testData/cli/jvm/progressiveModeOff.args");
|
||||||
|
|||||||
Reference in New Issue
Block a user