diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index d6b98908c96..2139b8ff041 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -4,21 +4,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/utils/compilerPluginConfiguration.kt b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/utils/compilerPluginConfiguration.kt
index 635ef8e2e5a..046cc4fcc61 100644
--- a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/utils/compilerPluginConfiguration.kt
+++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/utils/compilerPluginConfiguration.kt
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.fir.utils
import com.intellij.openapi.project.Project
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.AnalysisFlag
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.LanguageVersion
@@ -58,9 +59,20 @@ private class EnabledByDirectiveConfiguratorDecorator(
languageVersion: LanguageVersion
): Map, Any?> = original.provideAdditionalAnalysisFlags(directives, languageVersion)
- override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
+ override fun legacyRegisterCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
if (directive !in module.directives) return
- original.registerCompilerExtensions(project, module, configuration)
+ original.legacyRegisterCompilerExtensions(project, module, configuration)
+ }
+
+ override fun CompilerPluginRegistrar.ExtensionStorage.registerCompilerExtensions(
+ module: TestModule,
+ configuration: CompilerConfiguration
+ ) {
+ if (directive !in module.directives) return
+
+ with(original) {
+ this@registerCompilerExtensions.registerCompilerExtensions(module, configuration)
+ }
}
}
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/compilerPluginConfiguration.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/compilerPluginConfiguration.kt
index 11f919df665..6d2a86f2761 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/compilerPluginConfiguration.kt
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/compilerPluginConfiguration.kt
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.test.base
import com.intellij.openapi.project.Project
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.AnalysisFlag
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.LanguageVersion
@@ -58,9 +59,20 @@ private class EnabledByDirectiveConfiguratorDecorator(
languageVersion: LanguageVersion
): Map, Any?> = original.provideAdditionalAnalysisFlags(directives, languageVersion)
- override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
+ override fun legacyRegisterCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
if (directive !in module.directives) return
- original.registerCompilerExtensions(project, module, configuration)
+ original.legacyRegisterCompilerExtensions(project, module, configuration)
}
-}
\ No newline at end of file
+
+ override fun CompilerPluginRegistrar.ExtensionStorage.registerCompilerExtensions(
+ module: TestModule,
+ configuration: CompilerConfiguration
+ ) {
+ if (directive !in module.directives) return
+
+ with(original) {
+ this@registerCompilerExtensions.registerCompilerExtensions(module, configuration)
+ }
+ }
+}
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 aa43873521b..5dc7487dbb2 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
@@ -25,6 +25,7 @@ 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.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
@@ -87,21 +88,21 @@ object FirKotlinToJvmBytecodeCompiler {
"ATTENTION!\n This build uses experimental K2 compiler: \n -Xuse-k2"
)
- projectConfiguration.get(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS)?.let { pluginComponentRegistrars ->
- val notSupportedPlugins = pluginComponentRegistrars.filter {
- !it.supportsK2 && it::class.java.canonicalName != CLICompiler.SCRIPT_PLUGIN_REGISTRAR_NAME
- }
- if (notSupportedPlugins.isNotEmpty()) {
- messageCollector.report(
- CompilerMessageSeverity.ERROR,
- """
- |There are some plugins incompatible with K2 compiler:
- |${notSupportedPlugins.joinToString(separator = "\n|") { " ${it::class.qualifiedName}" }}
- |Please remove -Xuse-k2
- """.trimMargin()
- )
- return false
- }
+ val notSupportedPlugins = mutableListOf().apply {
+ projectConfiguration.get(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS).collectIncompatiblePluginNamesTo(this, ComponentRegistrar::supportsK2)
+ projectConfiguration.get(CompilerPluginRegistrar.COMPILER_PLUGIN_REGISTRARS).collectIncompatiblePluginNamesTo(this, CompilerPluginRegistrar::supportsK2)
+ }
+
+ if (notSupportedPlugins.isNotEmpty()) {
+ messageCollector.report(
+ CompilerMessageSeverity.ERROR,
+ """
+ |There are some plugins incompatible with K2 compiler:
+ |${notSupportedPlugins.joinToString(separator = "\n|") { " $it" }}
+ |Please remove -Xuse-k2
+ """.trimMargin()
+ )
+ return false
}
if (projectConfiguration.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) {
messageCollector.report(
@@ -153,6 +154,14 @@ object FirKotlinToJvmBytecodeCompiler {
)
}
+ private fun List?.collectIncompatiblePluginNamesTo(
+ destination: MutableList,
+ supportsK2: T.() -> Boolean
+ ) {
+ this?.filter { !it.supportsK2() && it::class.java.canonicalName != CLICompiler.SCRIPT_PLUGIN_REGISTRAR_NAME }
+ ?.mapTo(destination) { it::class.qualifiedName }
+ }
+
private fun CompilationContext.compileModule(): Pair? {
performanceManager?.notifyAnalysisStarted()
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt
index 4f13d455ad2..a61ee2766ce 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt
@@ -62,6 +62,8 @@ import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
import org.jetbrains.kotlin.codegen.extensions.ClassFileFactoryFinalizerExtension
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
+import org.jetbrains.kotlin.compiler.plugin.registerInProject
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.extensions.*
import org.jetbrains.kotlin.extensions.internal.CandidateInterceptor
@@ -637,12 +639,17 @@ class KotlinCoreEnvironment private constructor(
}
internal fun registerExtensionsFromPlugins(project: MockProject, configuration: CompilerConfiguration) {
+ fun createErrorMessage(extension: Any): String {
+ return "The provided plugin ${extension.javaClass.name} is not compatible with this version of compiler"
+ }
+
val messageCollector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
+
for (registrar in configuration.getList(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS)) {
try {
registrar.registerProjectComponents(project, configuration)
} catch (e: AbstractMethodError) {
- val message = "The provided plugin ${registrar.javaClass.name} is not compatible with this version of compiler"
+ val message = createErrorMessage(registrar)
// Since the scripting plugin is often discovered in the compiler environment, it is often taken from the incompatible
// location, and in many cases this is not a fatal error, therefore strong warning is generated instead of exception
if (registrar.javaClass.simpleName == "ScriptingCompilerConfigurationComponentRegistrar") {
@@ -652,8 +659,13 @@ class KotlinCoreEnvironment private constructor(
}
}
}
- }
+ val extensionStorage = CompilerPluginRegistrar.ExtensionStorage()
+ for (registrar in configuration.getList(CompilerPluginRegistrar.COMPILER_PLUGIN_REGISTRARS)) {
+ with(registrar) { extensionStorage.registerExtensions(configuration) }
+ }
+ extensionStorage.registerInProject(project) { createErrorMessage(it) }
+ }
private fun registerApplicationServicesForCLI(applicationEnvironment: KotlinCoreApplicationEnvironment) {
// ability to get text from annotations xml files
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/plugins/PluginCliParser.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/plugins/PluginCliParser.kt
index 296a0968da4..a20df52b430 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/plugins/PluginCliParser.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/plugins/PluginCliParser.kt
@@ -69,6 +69,9 @@ object PluginCliParser {
val componentRegistrars = ServiceLoaderLite.loadImplementations(ComponentRegistrar::class.java, classLoader)
configuration.addAll(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, componentRegistrars)
+ val compilerPluginRegistrars = ServiceLoaderLite.loadImplementations(CompilerPluginRegistrar::class.java, classLoader)
+ configuration.addAll(CompilerPluginRegistrar.COMPILER_PLUGIN_REGISTRARS, compilerPluginRegistrars)
+
processPluginOptions(pluginOptions, configuration, classLoader)
}
diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt
index 6f16d1d91e7..c7a2044340a 100644
--- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt
+++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.cli.jvm.config.configureJdkClasspathRoots
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.plugins.ServiceLoaderLite
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.daemon.common.CompileService
import org.jetbrains.kotlin.daemon.common.CompilerId
@@ -207,13 +208,12 @@ inline fun getValidId(counter: AtomicInteger, check: (Int) -> Boolean): Int {
fun CompilerConfiguration.configureScripting(compilerId: CompilerId) {
val error = try {
- val componentRegistrars =
- (this::class.java.classLoader as? URLClassLoader)?.let {
- ServiceLoaderLite.loadImplementations(ComponentRegistrar::class.java, it)
- } ?: ServiceLoaderLite.loadImplementations(
- ComponentRegistrar::class.java, compilerId.compilerClasspath.map(::File), this::class.java.classLoader
- )
+ val componentRegistrars = loadRegistrars(compilerId)
addAll(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, componentRegistrars)
+
+ val compilerPluginRegistrars = loadRegistrars(compilerId)
+ addAll(CompilerPluginRegistrar.COMPILER_PLUGIN_REGISTRARS, compilerPluginRegistrars)
+
null
} catch (e: NoClassDefFoundError) {
e
@@ -227,3 +227,11 @@ fun CompilerConfiguration.configureScripting(compilerId: CompilerId) {
)
}
}
+
+private inline fun CompilerConfiguration.loadRegistrars(compilerId: CompilerId): List {
+ return (this::class.java.classLoader as? URLClassLoader)?.let {
+ ServiceLoaderLite.loadImplementations(T::class.java, it)
+ } ?: ServiceLoaderLite.loadImplementations(
+ T::class.java, compilerId.compilerClasspath.map(::File), this::class.java.classLoader
+ )
+}
diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/extensions/FirExtensionRegistrar.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/extensions/FirExtensionRegistrar.kt
index df6f5e0ab23..2115c3b79ed 100644
--- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/extensions/FirExtensionRegistrar.kt
+++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/extensions/FirExtensionRegistrar.kt
@@ -20,10 +20,6 @@ abstract class FirExtensionRegistrar : FirExtensionRegistrarAdapter() {
return FirExtensionRegistrarAdapter.getInstances(project) as List
}
- fun registerExtension(project: Project, extension: FirExtensionRegistrar) {
- FirExtensionRegistrarAdapter.registerExtension(project, extension)
- }
-
internal val AVAILABLE_EXTENSIONS = listOf(
FirStatusTransformerExtension::class,
FirDeclarationGenerationExtension::class,
diff --git a/compiler/plugin-api/src/org/jetbrains/kotlin/compiler/plugin/CompilerPluginRegistrar.kt b/compiler/plugin-api/src/org/jetbrains/kotlin/compiler/plugin/CompilerPluginRegistrar.kt
new file mode 100644
index 00000000000..727a1da7420
--- /dev/null
+++ b/compiler/plugin-api/src/org/jetbrains/kotlin/compiler/plugin/CompilerPluginRegistrar.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.compiler.plugin
+
+import com.intellij.openapi.project.Project
+import org.jetbrains.annotations.TestOnly
+import org.jetbrains.kotlin.config.CompilerConfiguration
+import org.jetbrains.kotlin.config.CompilerConfigurationKey
+import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
+
+abstract class CompilerPluginRegistrar {
+ companion object {
+ val COMPILER_PLUGIN_REGISTRARS: CompilerConfigurationKey> =
+ CompilerConfigurationKey.create("Compiler plugin registrars")
+ }
+
+ abstract fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration)
+
+ class ExtensionStorage {
+ private val _registeredExtensions = mutableMapOf, MutableList>()
+ val registeredExtensions: Map, List>
+ get() = _registeredExtensions
+
+ fun ProjectExtensionDescriptor.registerExtension(extension: T) {
+ _registeredExtensions.getOrPut(this, ::mutableListOf).add(extension)
+ }
+ }
+
+ abstract val supportsK2: Boolean
+}
+
+fun CompilerPluginRegistrar.ExtensionStorage.registerInProject(
+ project: Project,
+ errorMessage: (Any) -> String = { "Error while registering ${it.javaClass.name} "}
+) {
+ for ((extensionPoint, extensions) in registeredExtensions) {
+ for (extension in extensions) {
+ @Suppress("UNCHECKED_CAST")
+ try {
+ (extensionPoint as ProjectExtensionDescriptor).registerExtensionUnsafe(project, extension)
+ } catch (e: AbstractMethodError) {
+ throw IllegalStateException(errorMessage(extension), e)
+ }
+ }
+ }
+}
+
+private fun ProjectExtensionDescriptor.registerExtensionUnsafe(project: Project, extension: Any) {
+ this.registerExtension(project, extension)
+}
+
+@TestOnly
+fun registerExtensionsForTest(
+ project: Project,
+ configuration: CompilerConfiguration,
+ register: CompilerPluginRegistrar.ExtensionStorage.(CompilerConfiguration) -> Unit
+) {
+ val extensionStorage = CompilerPluginRegistrar.ExtensionStorage().apply {
+ register(configuration)
+ }
+ extensionStorage.registerInProject(project)
+}
diff --git a/compiler/plugin-api/src/org/jetbrains/kotlin/compiler/plugin/ComponentRegistrar.kt b/compiler/plugin-api/src/org/jetbrains/kotlin/compiler/plugin/ComponentRegistrar.kt
index 75a4c23344f..4f926f8394e 100644
--- a/compiler/plugin-api/src/org/jetbrains/kotlin/compiler/plugin/ComponentRegistrar.kt
+++ b/compiler/plugin-api/src/org/jetbrains/kotlin/compiler/plugin/ComponentRegistrar.kt
@@ -17,8 +17,8 @@
package org.jetbrains.kotlin.compiler.plugin
import com.intellij.mock.MockProject
-import org.jetbrains.kotlin.config.CompilerConfigurationKey
import org.jetbrains.kotlin.config.CompilerConfiguration
+import org.jetbrains.kotlin.config.CompilerConfigurationKey
interface ComponentRegistrar {
companion object {
diff --git a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/services/AbstractEnvironmentConfigurator.kt b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/services/AbstractEnvironmentConfigurator.kt
index 066f8683e53..55bb8e4ac13 100644
--- a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/services/AbstractEnvironmentConfigurator.kt
+++ b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/services/AbstractEnvironmentConfigurator.kt
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.test.services
import com.intellij.openapi.project.Project
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar.ExtensionStorage
import org.jetbrains.kotlin.config.AnalysisFlag
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.CompilerConfigurationKey
@@ -22,7 +23,8 @@ abstract class AbstractEnvironmentConfigurator : ServicesAndDirectivesContainer
abstract fun provideAdditionalAnalysisFlags(directives: RegisteredDirectives, languageVersion: LanguageVersion): Map, Any?>
- abstract fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration)
+ abstract fun legacyRegisterCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration)
+ abstract fun ExtensionStorage.registerCompilerExtensions( module: TestModule, configuration: CompilerConfiguration)
}
class EnvironmentConfiguratorsProvider(internal val environmentConfigurators: List) : TestService
@@ -56,7 +58,9 @@ abstract class EnvironmentConfigurator(protected val testServices: TestServices)
return emptyMap()
}
- override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {}
+ override fun legacyRegisterCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {}
+
+ override fun ExtensionStorage.registerCompilerExtensions(module: TestModule, configuration: CompilerConfiguration) {}
}
class DirectiveToConfigurationKeyExtractor {
diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt
index bf0c00b29a6..8469ed5b3bf 100644
--- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt
+++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt
@@ -15,6 +15,8 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
+import org.jetbrains.kotlin.compiler.plugin.registerInProject
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.CompilerConfigurationKey
@@ -44,7 +46,14 @@ abstract class CompilerConfigurationProvider(val testServices: TestServices) : T
}
fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
- configurators.forEach { it.registerCompilerExtensions(project, module, configuration) }
+ val extensionStorage = CompilerPluginRegistrar.ExtensionStorage()
+ for (configurator in configurators) {
+ configurator.legacyRegisterCompilerExtensions(project, module, configuration)
+ with(configurator) {
+ extensionStorage.registerCompilerExtensions(module, configuration)
+ }
+ }
+ extensionStorage.registerInProject(project)
}
open fun getPackagePartProviderFactory(module: TestModule): (GlobalSearchScope) -> JvmPackagePartProvider {
diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/test-plugins/test-extension/src/main/kotlin/org/jetbrains/kotlin/test/TestKotlinPluginRegistrar.kt b/libraries/tools/kotlin-maven-plugin-test/src/it/test-plugins/test-extension/src/main/kotlin/org/jetbrains/kotlin/test/TestKotlinPluginRegistrar.kt
index ff9e14fa601..dd57cd9cc46 100644
--- a/libraries/tools/kotlin-maven-plugin-test/src/it/test-plugins/test-extension/src/main/kotlin/org/jetbrains/kotlin/test/TestKotlinPluginRegistrar.kt
+++ b/libraries/tools/kotlin-maven-plugin-test/src/it/test-plugins/test-extension/src/main/kotlin/org/jetbrains/kotlin/test/TestKotlinPluginRegistrar.kt
@@ -30,12 +30,15 @@ class TestCommandLineProcessor : CommandLineProcessor {
}
}
-class TestKotlinPluginRegistrar : ComponentRegistrar {
- override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
+class TestKotlinPluginRegistrar : CompilerPluginRegistrar() {
+ override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
val collector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)!!
val option = configuration.get(TestPluginKeys.TestOption)!!
collector.report(CompilerMessageSeverity.INFO, "Plugin applied")
collector.report(CompilerMessageSeverity.INFO, "Option value: $option")
}
+
+ override val supportsK2: Boolean
+ get() = true
}
diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/test-plugins/test-extension/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/libraries/tools/kotlin-maven-plugin-test/src/it/test-plugins/test-extension/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
similarity index 100%
rename from libraries/tools/kotlin-maven-plugin-test/src/it/test-plugins/test-extension/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
rename to libraries/tools/kotlin-maven-plugin-test/src/it/test-plugins/test-extension/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
diff --git a/plugins/allopen/allopen.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/plugins/allopen/allopen.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
similarity index 100%
rename from plugins/allopen/allopen.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
rename to plugins/allopen/allopen.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
diff --git a/plugins/allopen/allopen.cli/src/org/jetbrains/kotlin/allopen/AllOpenPlugin.kt b/plugins/allopen/allopen.cli/src/org/jetbrains/kotlin/allopen/AllOpenPlugin.kt
index e35189a4426..c421008d9f6 100644
--- a/plugins/allopen/allopen.cli/src/org/jetbrains/kotlin/allopen/AllOpenPlugin.kt
+++ b/plugins/allopen/allopen.cli/src/org/jetbrains/kotlin/allopen/AllOpenPlugin.kt
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.allopen
-import com.intellij.mock.MockProject
import org.jetbrains.kotlin.allopen.AllOpenConfigurationKeys.ANNOTATION
import org.jetbrains.kotlin.allopen.AllOpenConfigurationKeys.PRESET
import org.jetbrains.kotlin.allopen.AllOpenPluginNames.ANNOTATION_OPTION_NAME
@@ -15,7 +14,7 @@ import org.jetbrains.kotlin.compiler.plugin.*
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.CompilerConfigurationKey
import org.jetbrains.kotlin.extensions.DeclarationAttributeAltererExtension
-import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
+import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
object AllOpenConfigurationKeys {
val ANNOTATION: CompilerConfigurationKey> = CompilerConfigurationKey.create("annotation qualified name")
@@ -45,16 +44,16 @@ class AllOpenCommandLineProcessor : CommandLineProcessor {
}
}
-class AllOpenComponentRegistrar : ComponentRegistrar {
- override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
+class AllOpenComponentRegistrar : CompilerPluginRegistrar() {
+ override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
val annotations = configuration.get(ANNOTATION)?.toMutableList() ?: mutableListOf()
configuration.get(PRESET)?.forEach { preset ->
SUPPORTED_PRESETS[preset]?.let { annotations += it }
}
if (annotations.isEmpty()) return
- DeclarationAttributeAltererExtension.registerExtension(project, CliAllOpenDeclarationAttributeAltererExtension(annotations))
- FirExtensionRegistrar.registerExtension(project, FirAllOpenExtensionRegistrar(annotations))
+ DeclarationAttributeAltererExtension.registerExtension(CliAllOpenDeclarationAttributeAltererExtension(annotations))
+ FirExtensionRegistrarAdapter.registerExtension(FirAllOpenExtensionRegistrar(annotations))
}
override val supportsK2: Boolean
diff --git a/plugins/allopen/test/org/jetbrains/kotlin/allopen/AllOpenEnvironmentConfigurator.kt b/plugins/allopen/test/org/jetbrains/kotlin/allopen/AllOpenEnvironmentConfigurator.kt
index ed901dbe5b5..c9f981c25b8 100644
--- a/plugins/allopen/test/org/jetbrains/kotlin/allopen/AllOpenEnvironmentConfigurator.kt
+++ b/plugins/allopen/test/org/jetbrains/kotlin/allopen/AllOpenEnvironmentConfigurator.kt
@@ -5,25 +5,24 @@
package org.jetbrains.kotlin.allopen
-import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.allopen.fir.FirAllOpenExtensionRegistrar
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar.ExtensionStorage
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.extensions.DeclarationAttributeAltererExtension
-import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
+import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
import org.jetbrains.kotlin.test.services.TestServices
class AllOpenEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
- override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
+ override fun ExtensionStorage.registerCompilerExtensions(
+ module: TestModule,
+ configuration: CompilerConfiguration
+ ) {
val annotations = AbstractAllOpenDeclarationAttributeAltererExtension.ANNOTATIONS_FOR_TESTS +
AllOpenPluginNames.SUPPORTED_PRESETS.flatMap { it.value }
- DeclarationAttributeAltererExtension.registerExtension(
- project,
- CliAllOpenDeclarationAttributeAltererExtension(annotations)
- )
-
- FirExtensionRegistrar.registerExtension(project, FirAllOpenExtensionRegistrar(annotations))
+ DeclarationAttributeAltererExtension.registerExtension(CliAllOpenDeclarationAttributeAltererExtension(annotations))
+ FirExtensionRegistrarAdapter.registerExtension(FirAllOpenExtensionRegistrar(annotations))
}
}
diff --git a/plugins/atomicfu/atomicfu-compiler/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/plugins/atomicfu/atomicfu-compiler/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
similarity index 100%
rename from plugins/atomicfu/atomicfu-compiler/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
rename to plugins/atomicfu/atomicfu-compiler/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
diff --git a/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/extensions/AtomicfuComponentRegistrar.kt b/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/extensions/AtomicfuComponentRegistrar.kt
index 2f4ec331cc7..355b601caf1 100644
--- a/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/extensions/AtomicfuComponentRegistrar.kt
+++ b/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/extensions/AtomicfuComponentRegistrar.kt
@@ -16,22 +16,21 @@
package org.jetbrains.kotlinx.atomicfu.compiler.extensions
-import com.intellij.mock.MockProject
-import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
-import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.CompilerConfiguration
-class AtomicfuComponentRegistrar : ComponentRegistrar {
- override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
- registerExtensions(project)
+class AtomicfuComponentRegistrar : CompilerPluginRegistrar() {
+ override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
+ Companion.registerExtensions(this)
}
override val supportsK2: Boolean
get() = true
companion object {
- fun registerExtensions(project: Project) {
- IrGenerationExtension.registerExtension(project, AtomicfuLoweringExtension()) }
+ fun registerExtensions(extensionStorage: ExtensionStorage) = with(extensionStorage) {
+ IrGenerationExtension.registerExtension(AtomicfuLoweringExtension())
+ }
}
}
diff --git a/plugins/atomicfu/atomicfu-compiler/test/org/jetbrains/kotlinx/atomicfu/AbstractAtomicfuJsIrTest.kt b/plugins/atomicfu/atomicfu-compiler/test/org/jetbrains/kotlinx/atomicfu/AbstractAtomicfuJsIrTest.kt
index 413958f6a2d..d8da0a35ebb 100644
--- a/plugins/atomicfu/atomicfu-compiler/test/org/jetbrains/kotlinx/atomicfu/AbstractAtomicfuJsIrTest.kt
+++ b/plugins/atomicfu/atomicfu-compiler/test/org/jetbrains/kotlinx/atomicfu/AbstractAtomicfuJsIrTest.kt
@@ -34,7 +34,7 @@ open class AbstractAtomicfuJsIrTest : AbstractJsIrTest(
}
class AtomicfuEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
- override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
+ override fun legacyRegisterCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
IrGenerationExtension.registerExtension(project, AtomicfuLoweringExtension())
}
}
diff --git a/plugins/atomicfu/atomicfu-compiler/test/org/jetbrains/kotlinx/atomicfu/AbstractAtomicfuJvmIrTest.kt b/plugins/atomicfu/atomicfu-compiler/test/org/jetbrains/kotlinx/atomicfu/AbstractAtomicfuJvmIrTest.kt
index a5f4e1f1700..96b1ccfd40c 100644
--- a/plugins/atomicfu/atomicfu-compiler/test/org/jetbrains/kotlinx/atomicfu/AbstractAtomicfuJvmIrTest.kt
+++ b/plugins/atomicfu/atomicfu-compiler/test/org/jetbrains/kotlinx/atomicfu/AbstractAtomicfuJvmIrTest.kt
@@ -11,6 +11,8 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.codegen.AbstractAsmLikeInstructionListingTest
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar.ExtensionStorage
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
@@ -53,8 +55,8 @@ private fun TestConfigurationBuilder.configureForKotlinxAtomicfu(librariesPaths:
configuration.addJvmClasspathRoots(librariesPaths)
}
- override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
- AtomicfuComponentRegistrar.registerExtensions(project)
+ override fun ExtensionStorage.registerCompilerExtensions(module: TestModule, configuration: CompilerConfiguration) {
+ AtomicfuComponentRegistrar.registerExtensions(this)
}
}
})
diff --git a/plugins/fir-plugin-prototype/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/plugins/fir-plugin-prototype/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
similarity index 100%
rename from plugins/fir-plugin-prototype/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
rename to plugins/fir-plugin-prototype/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/FirPluginPrototypeExtensionRegistrar.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/FirPluginPrototypeExtensionRegistrar.kt
index 0846c999070..0c08a41ad5b 100644
--- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/FirPluginPrototypeExtensionRegistrar.kt
+++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/FirPluginPrototypeExtensionRegistrar.kt
@@ -5,13 +5,13 @@
package org.jetbrains.kotlin.fir.plugin
-import com.intellij.mock.MockProject
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
+import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
+import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
import org.jetbrains.kotlin.fir.plugin.generators.*
import org.jetbrains.kotlin.fir.plugin.types.FirNumberSignAttributeExtension
-import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
-import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.ir.plugin.GeneratedDeclarationsIrBodyFiller
class FirPluginPrototypeExtensionRegistrar : FirExtensionRegistrar() {
@@ -32,9 +32,12 @@ class FirPluginPrototypeExtensionRegistrar : FirExtensionRegistrar() {
}
}
-class FirPluginPrototypeComponentRegistrar : ComponentRegistrar {
- override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
- FirExtensionRegistrar.registerExtension(project, FirPluginPrototypeExtensionRegistrar())
- IrGenerationExtension.registerExtension(project, GeneratedDeclarationsIrBodyFiller())
+class FirPluginPrototypeComponentRegistrar : CompilerPluginRegistrar() {
+ override val supportsK2: Boolean
+ get() = true
+
+ override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
+ FirExtensionRegistrarAdapter.registerExtension(FirPluginPrototypeExtensionRegistrar())
+ IrGenerationExtension.registerExtension(GeneratedDeclarationsIrBodyFiller())
}
}
diff --git a/plugins/fir-plugin-prototype/tests/org/jetbrains/kotlin/fir/plugin/services/ExtensionRegistrarConfigurator.kt b/plugins/fir-plugin-prototype/tests/org/jetbrains/kotlin/fir/plugin/services/ExtensionRegistrarConfigurator.kt
index a45a90d48fa..71725a1c3d7 100644
--- a/plugins/fir-plugin-prototype/tests/org/jetbrains/kotlin/fir/plugin/services/ExtensionRegistrarConfigurator.kt
+++ b/plugins/fir-plugin-prototype/tests/org/jetbrains/kotlin/fir/plugin/services/ExtensionRegistrarConfigurator.kt
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.plugin.services
-import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar.ExtensionStorage
import org.jetbrains.kotlin.config.CompilerConfiguration
-import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
+import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
import org.jetbrains.kotlin.fir.plugin.FirPluginPrototypeExtensionRegistrar
import org.jetbrains.kotlin.ir.plugin.GeneratedDeclarationsIrBodyFiller
import org.jetbrains.kotlin.test.model.TestModule
@@ -16,8 +16,8 @@ import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
import org.jetbrains.kotlin.test.services.TestServices
class ExtensionRegistrarConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
- override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
- FirExtensionRegistrar.registerExtension(project, FirPluginPrototypeExtensionRegistrar())
- IrGenerationExtension.registerExtension(project, GeneratedDeclarationsIrBodyFiller())
+ override fun ExtensionStorage.registerCompilerExtensions(module: TestModule, configuration: CompilerConfiguration) {
+ FirExtensionRegistrarAdapter.registerExtension(FirPluginPrototypeExtensionRegistrar())
+ IrGenerationExtension.registerExtension(GeneratedDeclarationsIrBodyFiller())
}
}
diff --git a/plugins/imports-dumper/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/plugins/imports-dumper/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
similarity index 100%
rename from plugins/imports-dumper/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
rename to plugins/imports-dumper/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
diff --git a/plugins/imports-dumper/src/org/jetbrains/kotlin/importsDumper/ImportsDumperComponentRegistrar.kt b/plugins/imports-dumper/src/org/jetbrains/kotlin/importsDumper/ImportsDumperComponentRegistrar.kt
index 957e36396a5..38135d6ef2c 100644
--- a/plugins/imports-dumper/src/org/jetbrains/kotlin/importsDumper/ImportsDumperComponentRegistrar.kt
+++ b/plugins/imports-dumper/src/org/jetbrains/kotlin/importsDumper/ImportsDumperComponentRegistrar.kt
@@ -5,14 +5,16 @@
package org.jetbrains.kotlin.importsDumper
-import com.intellij.mock.MockProject
-import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
-class ImportsDumperComponentRegistrar : ComponentRegistrar {
- override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
+class ImportsDumperComponentRegistrar : CompilerPluginRegistrar() {
+ override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
val destinationPath = configuration[ImportsDumperConfigurationKeys.DESTINATION] ?: return
- AnalysisHandlerExtension.registerExtension(project, ImportsDumperExtension(destinationPath))
+ AnalysisHandlerExtension.registerExtension(ImportsDumperExtension(destinationPath))
}
-}
\ No newline at end of file
+
+ override val supportsK2: Boolean
+ get() = false
+}
diff --git a/plugins/jvm-abi-gen/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/plugins/jvm-abi-gen/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
similarity index 100%
rename from plugins/jvm-abi-gen/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
rename to plugins/jvm-abi-gen/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
diff --git a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiComponentRegistrar.kt b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiComponentRegistrar.kt
index 3750274b4f6..eedf59454c5 100644
--- a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiComponentRegistrar.kt
+++ b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiComponentRegistrar.kt
@@ -5,21 +5,20 @@
package org.jetbrains.kotlin.jvm.abi
-import com.intellij.mock.MockProject
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
import org.jetbrains.kotlin.codegen.extensions.ClassFileFactoryFinalizerExtension
-import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
import java.io.File
-class JvmAbiComponentRegistrar : ComponentRegistrar {
- override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
+class JvmAbiComponentRegistrar : CompilerPluginRegistrar() {
+ override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
val outputPath = configuration.getNotNull(JvmAbiConfigurationKeys.OUTPUT_PATH)
val messageCollector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE)
if (configuration.get(JvmAbiConfigurationKeys.LEGACY_ABI_GEN, false)) {
@@ -33,14 +32,14 @@ class JvmAbiComponentRegistrar : ComponentRegistrar {
val extension = JvmAbiAnalysisHandlerExtension(configuration.copy().apply {
put(JVMConfigurationKeys.OUTPUT_DIRECTORY, File(outputPath))
})
- AnalysisHandlerExtension.registerExtension(project, extension)
+ AnalysisHandlerExtension.registerExtension(extension)
} else {
// Use the single-pass implementation, using the new ABI flag in the metadata.
configuration.put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true)
val builderExtension = JvmAbiClassBuilderInterceptor()
val outputExtension = JvmAbiOutputExtension(File(outputPath), builderExtension.abiClassInfo, messageCollector)
- ClassBuilderInterceptorExtension.registerExtension(project, builderExtension)
- ClassFileFactoryFinalizerExtension.registerExtension(project, outputExtension)
+ ClassBuilderInterceptorExtension.registerExtension( builderExtension)
+ ClassFileFactoryFinalizerExtension.registerExtension( outputExtension)
}
}
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/plugins/kotlin-serialization/kotlin-serialization-compiler/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
similarity index 100%
rename from plugins/kotlin-serialization/kotlin-serialization-compiler/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
rename to plugins/kotlin-serialization/kotlin-serialization-compiler/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationComponentRegistrar.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationComponentRegistrar.kt
index 76b4f75e2e8..8fe1a63e820 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationComponentRegistrar.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationComponentRegistrar.kt
@@ -5,11 +5,9 @@
package org.jetbrains.kotlinx.serialization.compiler.extensions
-import com.intellij.mock.MockProject
-import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
-import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.useInstance
@@ -24,28 +22,31 @@ import org.jetbrains.kotlin.serialization.DescriptorSerializerPlugin
import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol
import org.jetbrains.kotlinx.serialization.compiler.diagnostic.SerializationPluginDeclarationChecker
-class SerializationComponentRegistrar : ComponentRegistrar {
- override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
- registerExtensions(project)
+class SerializationComponentRegistrar : CompilerPluginRegistrar() {
+ override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
+ Companion.registerExtensions(this)
}
+ override val supportsK2: Boolean
+ get() = false
+
companion object {
- fun registerExtensions(project: Project) {
+ fun registerExtensions(extensionStorage: ExtensionStorage) = with(extensionStorage) {
// This method is never called in the IDE, therefore this extension is not available there.
// Since IDE does not perform any serialization of descriptors, metadata written to the 'serializationDescriptorSerializer'
// is never deleted, effectively causing memory leaks.
// So we create SerializationDescriptorSerializerPlugin only outside of IDE.
val serializationDescriptorSerializer = SerializationDescriptorSerializerPlugin()
- DescriptorSerializerPlugin.registerExtension(project, serializationDescriptorSerializer)
+ DescriptorSerializerPlugin.registerExtension(serializationDescriptorSerializer)
registerProtoExtensions()
- SyntheticResolveExtension.registerExtension(project, SerializationResolveExtension(serializationDescriptorSerializer))
+ SyntheticResolveExtension.registerExtension(SerializationResolveExtension(serializationDescriptorSerializer))
- ExpressionCodegenExtension.registerExtension(project, SerializationCodegenExtension(serializationDescriptorSerializer))
- JsSyntheticTranslateExtension.registerExtension(project, SerializationJsExtension(serializationDescriptorSerializer))
- IrGenerationExtension.registerExtension(project, SerializationLoweringExtension(serializationDescriptorSerializer))
+ ExpressionCodegenExtension.registerExtension(SerializationCodegenExtension(serializationDescriptorSerializer))
+ JsSyntheticTranslateExtension.registerExtension(SerializationJsExtension(serializationDescriptorSerializer))
+ IrGenerationExtension.registerExtension(SerializationLoweringExtension(serializationDescriptorSerializer))
- StorageComponentContainerContributor.registerExtension(project, SerializationPluginComponentContainerContributor())
+ StorageComponentContainerContributor.registerExtension(SerializationPluginComponentContainerContributor())
}
private fun registerProtoExtensions() {
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationIrBytecodeListingTest.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationIrBytecodeListingTest.kt
index 919a7a387eb..2dddd4d0141 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationIrBytecodeListingTest.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationIrBytecodeListingTest.kt
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.ObsoleteTestInfrastructure
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.codegen.AbstractAsmLikeInstructionListingTest
+import org.jetbrains.kotlin.compiler.plugin.registerExtensionsForTest
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationComponentRegistrar
import java.io.File
@@ -24,7 +25,9 @@ abstract class AbstractSerializationIrBytecodeListingTest : AbstractAsmLikeInstr
override val backend = TargetBackend.JVM_IR
override fun setupEnvironment(environment: KotlinCoreEnvironment) {
- SerializationComponentRegistrar.registerExtensions(environment.project)
+ registerExtensionsForTest(environment.project, environment.configuration) {
+ SerializationComponentRegistrar.registerExtensions(this)
+ }
environment.updateClasspath(listOf(JvmClasspathRoot(coreLibraryPath!!)))
}
}
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationPluginBytecodeListingTest.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationPluginBytecodeListingTest.kt
index c206f733696..67ec4a8faf9 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationPluginBytecodeListingTest.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationPluginBytecodeListingTest.kt
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.ObsoleteTestInfrastructure
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.codegen.AbstractAsmLikeInstructionListingTest
+import org.jetbrains.kotlin.compiler.plugin.registerExtensionsForTest
import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationComponentRegistrar
@OptIn(ObsoleteTestInfrastructure::class)
@@ -16,7 +17,9 @@ abstract class AbstractSerializationPluginBytecodeListingTest : AbstractAsmLikeI
private val coreLibraryPath = getSerializationCoreLibraryJar()
override fun setupEnvironment(environment: KotlinCoreEnvironment) {
- SerializationComponentRegistrar.registerExtensions(environment.project)
+ registerExtensionsForTest(environment.project, environment.configuration) {
+ SerializationComponentRegistrar.registerExtensions(this)
+ }
environment.updateClasspath(listOf(JvmClasspathRoot(coreLibraryPath!!)))
}
}
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationPluginDiagnosticTest.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationPluginDiagnosticTest.kt
index 3961143efb0..eac3fa64027 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationPluginDiagnosticTest.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/AbstractSerializationPluginDiagnosticTest.kt
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.ObsoleteTestInfrastructure
import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
+import org.jetbrains.kotlin.compiler.plugin.registerExtensionsForTest
import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationComponentRegistrar
@OptIn(ObsoleteTestInfrastructure::class)
@@ -16,7 +17,9 @@ abstract class AbstractSerializationPluginDiagnosticTest : AbstractDiagnosticsTe
private val coreLibraryPath = getSerializationCoreLibraryJar()
override fun setupEnvironment(environment: KotlinCoreEnvironment) {
- SerializationComponentRegistrar.registerExtensions(environment.project)
+ registerExtensionsForTest(environment.project, environment.configuration) {
+ SerializationComponentRegistrar.registerExtensions(this)
+ }
environment.updateClasspath(listOf(JvmClasspathRoot(coreLibraryPath!!)))
}
}
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/RuntimeSearch.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/RuntimeSearch.kt
index c3998665a8a..eed6849104a 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/RuntimeSearch.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/RuntimeSearch.kt
@@ -5,9 +5,9 @@
package org.jetbrains.kotlinx.serialization
-import com.intellij.openapi.project.Project
import junit.framework.TestCase
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar.ExtensionStorage
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.model.TestModule
@@ -58,8 +58,8 @@ internal fun TestConfigurationBuilder.configureForKotlinxSerialization(libraries
configuration.addJvmClasspathRoots(librariesPaths)
}
- override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
- SerializationComponentRegistrar.registerExtensions(project)
+ override fun ExtensionStorage.registerCompilerExtensions(module: TestModule, configuration: CompilerConfiguration) {
+ SerializationComponentRegistrar.registerExtensions(this)
}
}
})
diff --git a/plugins/lombok/lombok.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/plugins/lombok/lombok.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
similarity index 100%
rename from plugins/lombok/lombok.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
rename to plugins/lombok/lombok.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
diff --git a/plugins/lombok/lombok.cli/src/org/jetbrains/kotlin/lombok/LombokPlugin.kt b/plugins/lombok/lombok.cli/src/org/jetbrains/kotlin/lombok/LombokPlugin.kt
index c83b1021e63..2cc8892b161 100644
--- a/plugins/lombok/lombok.cli/src/org/jetbrains/kotlin/lombok/LombokPlugin.kt
+++ b/plugins/lombok/lombok.cli/src/org/jetbrains/kotlin/lombok/LombokPlugin.kt
@@ -5,17 +5,15 @@
package org.jetbrains.kotlin.lombok
-import com.intellij.mock.MockProject
-import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption
import org.jetbrains.kotlin.compiler.plugin.CliOption
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
-import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.CompilerConfigurationKey
-import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
+import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
import org.jetbrains.kotlin.lombok.LombokConfigurationKeys.CONFIG_FILE
import org.jetbrains.kotlin.lombok.LombokPluginNames.CONFIG_OPTION_NAME
import org.jetbrains.kotlin.lombok.LombokPluginNames.PLUGIN_ID
@@ -23,26 +21,28 @@ import org.jetbrains.kotlin.lombok.k2.FirLombokRegistrar
import org.jetbrains.kotlin.resolve.jvm.extensions.SyntheticJavaResolveExtension
import java.io.File
-class LombokComponentRegistrar : ComponentRegistrar {
-
+class LombokComponentRegistrar : CompilerPluginRegistrar() {
companion object {
- fun registerComponents(project: Project, compilerConfiguration: CompilerConfiguration) {
+ fun registerComponents(extensionStorage: ExtensionStorage, compilerConfiguration: CompilerConfiguration) = with(extensionStorage) {
val configFile = compilerConfiguration[CONFIG_FILE]
val config = LombokPluginConfig(configFile)
- SyntheticJavaResolveExtension.registerExtension(project, LombokResolveExtension(config))
- FirExtensionRegistrar.registerExtension(project, FirLombokRegistrar(configFile))
+ SyntheticJavaResolveExtension.registerExtension(LombokResolveExtension(config))
+ FirExtensionRegistrarAdapter.registerExtension(FirLombokRegistrar(configFile))
}
}
- override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
+ override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
?.report(
CompilerMessageSeverity.WARNING,
"Lombok Kotlin compiler plugin is an experimental feature." +
" See: https://kotlinlang.org/docs/components-stability.html."
)
- registerComponents(project, configuration)
+ registerComponents(this, configuration)
}
+
+ override val supportsK2: Boolean
+ get() = true
}
object LombokConfigurationKeys {
diff --git a/plugins/lombok/tests/org/jetbrains/kotlin/lombok/LombokTests.kt b/plugins/lombok/tests/org/jetbrains/kotlin/lombok/LombokTests.kt
index 3bf78ecb460..01940403686 100644
--- a/plugins/lombok/tests/org/jetbrains/kotlin/lombok/LombokTests.kt
+++ b/plugins/lombok/tests/org/jetbrains/kotlin/lombok/LombokTests.kt
@@ -5,9 +5,9 @@
package org.jetbrains.kotlin.lombok
-import com.intellij.openapi.project.Project
import lombok.Getter
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoot
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar.ExtensionStorage
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
@@ -19,7 +19,10 @@ import org.jetbrains.kotlin.test.runners.codegen.AbstractBlackBoxCodegenTest
import org.jetbrains.kotlin.test.runners.codegen.AbstractFirBlackBoxCodegenTest
import org.jetbrains.kotlin.test.runners.codegen.AbstractIrBlackBoxCodegenTest
import org.jetbrains.kotlin.test.runners.configurationForClassicAndFirTestsAlongside
-import org.jetbrains.kotlin.test.services.*
+import org.jetbrains.kotlin.test.services.AdditionalSourceProvider
+import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
+import org.jetbrains.kotlin.test.services.TestServices
+import org.jetbrains.kotlin.test.services.sourceFileProvider
import org.jetbrains.kotlin.utils.PathUtil
import java.io.File
@@ -99,7 +102,7 @@ class LombokEnvironmentConfigurator(testServices: TestServices) : EnvironmentCon
}
}
- override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
- LombokComponentRegistrar.registerComponents(project, configuration)
+ override fun ExtensionStorage.registerCompilerExtensions(module: TestModule, configuration: CompilerConfiguration) {
+ LombokComponentRegistrar.registerComponents(this, configuration)
}
}
diff --git a/plugins/noarg/noarg.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/plugins/noarg/noarg.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
similarity index 100%
rename from plugins/noarg/noarg.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
rename to plugins/noarg/noarg.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
diff --git a/plugins/noarg/noarg.cli/src/org/jetbrains/kotlin/noarg/NoArgPlugin.kt b/plugins/noarg/noarg.cli/src/org/jetbrains/kotlin/noarg/NoArgPlugin.kt
index 5d4f041c58c..10d0a365e1f 100644
--- a/plugins/noarg/noarg.cli/src/org/jetbrains/kotlin/noarg/NoArgPlugin.kt
+++ b/plugins/noarg/noarg.cli/src/org/jetbrains/kotlin/noarg/NoArgPlugin.kt
@@ -5,8 +5,6 @@
package org.jetbrains.kotlin.noarg
-import com.intellij.mock.MockProject
-import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.compiler.plugin.*
@@ -17,7 +15,7 @@ import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.useInstance
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor
-import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
+import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
import org.jetbrains.kotlin.noarg.NoArgConfigurationKeys.ANNOTATION
import org.jetbrains.kotlin.noarg.NoArgConfigurationKeys.INVOKE_INITIALIZERS
import org.jetbrains.kotlin.noarg.NoArgConfigurationKeys.PRESET
@@ -71,28 +69,36 @@ class NoArgCommandLineProcessor : CommandLineProcessor {
}
}
-class NoArgComponentRegistrar : ComponentRegistrar {
+class NoArgComponentRegistrar : CompilerPluginRegistrar() {
override val supportsK2: Boolean
get() = true
- override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
+ override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
val annotations = configuration.get(ANNOTATION).orEmpty().toMutableList()
configuration.get(PRESET)?.forEach { preset ->
SUPPORTED_PRESETS[preset]?.let { annotations += it }
}
if (annotations.isNotEmpty()) {
registerNoArgComponents(
- project, annotations, configuration.getBoolean(JVMConfigurationKeys.IR), configuration.getBoolean(INVOKE_INITIALIZERS),
+ this,
+ annotations,
+ configuration.getBoolean(JVMConfigurationKeys.IR),
+ configuration.getBoolean(INVOKE_INITIALIZERS),
)
}
}
companion object {
- fun registerNoArgComponents(project: Project, annotations: List, useIr: Boolean, invokeInitializers: Boolean) {
- StorageComponentContainerContributor.registerExtension(project, CliNoArgComponentContainerContributor(annotations, useIr))
- FirExtensionRegistrar.registerExtension(project, FirNoArgExtensionRegistrar(annotations))
- ExpressionCodegenExtension.registerExtension(project, CliNoArgExpressionCodegenExtension(annotations, invokeInitializers))
- IrGenerationExtension.registerExtension(project, NoArgIrGenerationExtension(annotations, invokeInitializers))
+ fun registerNoArgComponents(
+ extensionStorage: ExtensionStorage,
+ annotations: List,
+ useIr: Boolean,
+ invokeInitializers: Boolean
+ ) = with(extensionStorage) {
+ StorageComponentContainerContributor.registerExtension(CliNoArgComponentContainerContributor(annotations, useIr))
+ FirExtensionRegistrarAdapter.registerExtension(FirNoArgExtensionRegistrar(annotations))
+ ExpressionCodegenExtension.registerExtension(CliNoArgExpressionCodegenExtension(annotations, invokeInitializers))
+ IrGenerationExtension.registerExtension(NoArgIrGenerationExtension(annotations, invokeInitializers))
}
}
}
diff --git a/plugins/noarg/test/org/jetbrains/kotlin/noarg/NoArgTests.kt b/plugins/noarg/test/org/jetbrains/kotlin/noarg/NoArgTests.kt
index 3a147836047..0c64dca0eb6 100644
--- a/plugins/noarg/test/org/jetbrains/kotlin/noarg/NoArgTests.kt
+++ b/plugins/noarg/test/org/jetbrains/kotlin/noarg/NoArgTests.kt
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.noarg
-import com.intellij.openapi.project.Project
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
@@ -94,9 +94,12 @@ class NoArgEnvironmentConfigurator(testServices: TestServices) : EnvironmentConf
override val directiveContainers: List = listOf(NoArgDirectives)
- override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
+ override fun CompilerPluginRegistrar.ExtensionStorage.registerCompilerExtensions(
+ module: TestModule,
+ configuration: CompilerConfiguration
+ ) {
NoArgComponentRegistrar.registerNoArgComponents(
- project,
+ this,
NOARG_ANNOTATIONS,
useIr = module.targetBackend?.isIR == true,
invokeInitializers = NoArgDirectives.INVOKE_INITIALIZERS in module.directives
diff --git a/plugins/parcelize/parcelize-compiler/build.gradle.kts b/plugins/parcelize/parcelize-compiler/build.gradle.kts
index aeb53d10419..671c52ddfe4 100644
--- a/plugins/parcelize/parcelize-compiler/build.gradle.kts
+++ b/plugins/parcelize/parcelize-compiler/build.gradle.kts
@@ -37,6 +37,7 @@ dependencies {
testApi(projectTests(":compiler:test-infrastructure-utils"))
// FIR dependencies
+ testApi(project(":compiler:fir:entrypoint"))
testApi(project(":compiler:fir:checkers"))
testApi(project(":compiler:fir:checkers:checkers.jvm"))
testApi(project(":compiler:fir:checkers:checkers.js"))
diff --git a/plugins/parcelize/parcelize-compiler/parcelize.cli/build.gradle.kts b/plugins/parcelize/parcelize-compiler/parcelize.cli/build.gradle.kts
index d1e5c4ca1dd..096c307b9a2 100644
--- a/plugins/parcelize/parcelize-compiler/parcelize.cli/build.gradle.kts
+++ b/plugins/parcelize/parcelize-compiler/parcelize.cli/build.gradle.kts
@@ -12,6 +12,7 @@ dependencies {
api(project(":plugins:parcelize:parcelize-compiler:parcelize.backend"))
compileOnly(project(":compiler:plugin-api"))
+ compileOnly(project(":compiler:fir:entrypoint"))
compileOnly(project(":compiler:backend"))
compileOnly(project(":compiler:ir.backend.common"))
compileOnly(intellijCore())
diff --git a/plugins/parcelize/parcelize-compiler/parcelize.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/plugins/parcelize/parcelize-compiler/parcelize.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
similarity index 100%
rename from plugins/parcelize/parcelize-compiler/parcelize.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
rename to plugins/parcelize/parcelize-compiler/parcelize.cli/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
diff --git a/plugins/parcelize/parcelize-compiler/parcelize.cli/src/org/jetbrains/kotlin/parcelize/ParcelizeComponentRegistrar.kt b/plugins/parcelize/parcelize-compiler/parcelize.cli/src/org/jetbrains/kotlin/parcelize/ParcelizeComponentRegistrar.kt
index 240e991e3ea..eb48399ee43 100644
--- a/plugins/parcelize/parcelize-compiler/parcelize.cli/src/org/jetbrains/kotlin/parcelize/ParcelizeComponentRegistrar.kt
+++ b/plugins/parcelize/parcelize-compiler/parcelize.cli/src/org/jetbrains/kotlin/parcelize/ParcelizeComponentRegistrar.kt
@@ -5,34 +5,35 @@
package org.jetbrains.kotlin.parcelize
-import com.intellij.mock.MockProject
-import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
-import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.useInstance
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor
+import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
+import org.jetbrains.kotlin.parcelize.fir.FirParcelizeExtensionRegistrar
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
-class ParcelizeComponentRegistrar : ComponentRegistrar {
+class ParcelizeComponentRegistrar : CompilerPluginRegistrar() {
companion object {
- fun registerParcelizeComponents(project: Project) {
- ExpressionCodegenExtension.registerExtension(project, ParcelizeCodegenExtension())
- IrGenerationExtension.registerExtension(project, ParcelizeIrGeneratorExtension())
- SyntheticResolveExtension.registerExtension(project, ParcelizeResolveExtension())
- ClassBuilderInterceptorExtension.registerExtension(project, ParcelizeClinitClassBuilderInterceptorExtension())
- StorageComponentContainerContributor.registerExtension(project, ParcelizeDeclarationCheckerComponentContainerContributor())
+ fun registerParcelizeComponents(extensionStorage: ExtensionStorage) = with(extensionStorage) {
+ ExpressionCodegenExtension.registerExtension(ParcelizeCodegenExtension())
+ IrGenerationExtension.registerExtension(ParcelizeIrGeneratorExtension())
+ SyntheticResolveExtension.registerExtension(ParcelizeResolveExtension())
+ ClassBuilderInterceptorExtension.registerExtension(ParcelizeClinitClassBuilderInterceptorExtension())
+ StorageComponentContainerContributor.registerExtension(ParcelizeDeclarationCheckerComponentContainerContributor())
+ FirExtensionRegistrarAdapter.registerExtension(FirParcelizeExtensionRegistrar())
}
}
- override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
- registerParcelizeComponents(project)
+ override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
+ registerParcelizeComponents(this)
}
override val supportsK2: Boolean
diff --git a/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractFirParcelizeDiagnosticTest.kt b/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractFirParcelizeDiagnosticTest.kt
index d131e2d6d02..4bef76dff35 100644
--- a/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractFirParcelizeDiagnosticTest.kt
+++ b/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractFirParcelizeDiagnosticTest.kt
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.parcelize.test.runners
import org.jetbrains.kotlin.parcelize.test.services.ParcelizeEnvironmentConfigurator
-import org.jetbrains.kotlin.test.bind
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives
import org.jetbrains.kotlin.test.frontend.fir.FirFailingTestSuppressor
@@ -23,7 +22,7 @@ abstract class AbstractFirParcelizeDiagnosticTest : AbstractKotlinCompilerTest()
+FirDiagnosticsDirectives.ENABLE_PLUGIN_PHASES
}
- useConfigurators(::ParcelizeEnvironmentConfigurator.bind(true))
+ useConfigurators(::ParcelizeEnvironmentConfigurator)
useAfterAnalysisCheckers(
::FirIdenticalChecker,
diff --git a/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractParcelizeBoxTest.kt b/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractParcelizeBoxTest.kt
index 9cf16103ce2..6224d7f82dc 100644
--- a/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractParcelizeBoxTest.kt
+++ b/plugins/parcelize/parcelize-compiler/tests/org/jetbrains/kotlin/parcelize/test/runners/AbstractParcelizeBoxTest.kt
@@ -5,7 +5,10 @@
package org.jetbrains.kotlin.parcelize.test.runners
-import org.jetbrains.kotlin.parcelize.test.services.*
+import org.jetbrains.kotlin.parcelize.test.services.ParcelizeEnvironmentConfigurator
+import org.jetbrains.kotlin.parcelize.test.services.ParcelizeMainClassProvider
+import org.jetbrains.kotlin.parcelize.test.services.ParcelizeRuntimeClasspathProvider
+import org.jetbrains.kotlin.parcelize.test.services.ParcelizeUtilSourcesProvider
import org.jetbrains.kotlin.test.Constructor
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor
@@ -14,8 +17,10 @@ import org.jetbrains.kotlin.test.backend.classic.ClassicJvmBackendFacade
import org.jetbrains.kotlin.test.backend.handlers.IrTextDumpHandler
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
import org.jetbrains.kotlin.test.backend.ir.JvmIrBackendFacade
-import org.jetbrains.kotlin.test.bind
-import org.jetbrains.kotlin.test.builders.*
+import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
+import org.jetbrains.kotlin.test.builders.configureClassicFrontendHandlersStep
+import org.jetbrains.kotlin.test.builders.configureFirHandlersStep
+import org.jetbrains.kotlin.test.builders.configureIrHandlersStep
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.REQUIRES_SEPARATE_PROCESS
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.REPORT_ONLY_EXPLICITLY_DEFINED_DEBUG_INFO
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.ENABLE_PLUGIN_PHASES
@@ -71,7 +76,7 @@ abstract class AbstractParcelizeBoxTestBase
SUPPORTED_PRESETS[preset]?.let { annotations += it }
}
if (annotations.isEmpty()) return
- StorageComponentContainerContributor.registerExtension(project, CliSamWithReceiverComponentContributor(annotations))
- FirExtensionRegistrarAdapter.registerExtension(project, FirSamWithReceiverExtensionRegistrar(annotations))
+ StorageComponentContainerContributor.registerExtension(CliSamWithReceiverComponentContributor(annotations))
+ FirExtensionRegistrarAdapter.registerExtension(FirSamWithReceiverExtensionRegistrar(annotations))
}
+
+ override val supportsK2: Boolean
+ get() = true
}
class CliSamWithReceiverComponentContributor(val annotations: List) : StorageComponentContainerContributor {
diff --git a/plugins/sam-with-receiver/test/org/jetbrains/kotlin/samWithReceiver/AbstractSamWithReceiverScriptNewDefTest.kt b/plugins/sam-with-receiver/test/org/jetbrains/kotlin/samWithReceiver/AbstractSamWithReceiverScriptNewDefTest.kt
index 03ffe20d3f1..50cc742d2ba 100644
--- a/plugins/sam-with-receiver/test/org/jetbrains/kotlin/samWithReceiver/AbstractSamWithReceiverScriptNewDefTest.kt
+++ b/plugins/sam-with-receiver/test/org/jetbrains/kotlin/samWithReceiver/AbstractSamWithReceiverScriptNewDefTest.kt
@@ -5,11 +5,11 @@
package org.jetbrains.kotlin.samWithReceiver
-import com.intellij.mock.MockProject
import org.jetbrains.kotlin.ObsoleteTestInfrastructure
import org.jetbrains.kotlin.TestsCompilerError
import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
+import org.jetbrains.kotlin.compiler.plugin.registerExtensionsForTest
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.ScriptJvmCompilerFromEnvironment
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
@@ -38,7 +38,9 @@ abstract class AbstractSamWithReceiverScriptNewDefTest : AbstractDiagnosticsTest
val scriptCompiler = ScriptJvmCompilerFromEnvironment(environment)
val res = scriptCompiler.compile("42".toScriptSource("\$init"), ScriptForSamWithReceiversNewDefCompilationConfiguration)
Assert.assertTrue(res is ResultWithDiagnostics.Success<*>)
- SamWithReceiverComponentRegistrar().registerProjectComponents(environment.project as MockProject, environment.configuration)
+ registerExtensionsForTest(environment.project, environment.configuration) {
+ with(SamWithReceiverComponentRegistrar()) { registerExtensions(it) }
+ }
}
override fun analyzeAndCheck(testDataFile: File, files: List) {
diff --git a/plugins/sam-with-receiver/test/org/jetbrains/kotlin/samWithReceiver/SamWithReceiverTests.kt b/plugins/sam-with-receiver/test/org/jetbrains/kotlin/samWithReceiver/SamWithReceiverTests.kt
index 6b269f72b75..5c0f021bb13 100644
--- a/plugins/sam-with-receiver/test/org/jetbrains/kotlin/samWithReceiver/SamWithReceiverTests.kt
+++ b/plugins/sam-with-receiver/test/org/jetbrains/kotlin/samWithReceiver/SamWithReceiverTests.kt
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.samWithReceiver
-import com.intellij.openapi.project.Project
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar.ExtensionStorage
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
@@ -60,12 +60,11 @@ class SamWithReceiverEnvironmentConfigurator(testServices: TestServices) : Envir
private val TEST_ANNOTATIONS = listOf("SamWithReceiver")
}
- override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
- StorageComponentContainerContributor.registerExtension(
- project,
- CliSamWithReceiverComponentContributor(TEST_ANNOTATIONS)
- )
-
- FirExtensionRegistrarAdapter.registerExtension(project, FirSamWithReceiverExtensionRegistrar(TEST_ANNOTATIONS))
+ override fun ExtensionStorage.registerCompilerExtensions(
+ module: TestModule,
+ configuration: CompilerConfiguration
+ ) {
+ StorageComponentContainerContributor.registerExtension(CliSamWithReceiverComponentContributor(TEST_ANNOTATIONS))
+ FirExtensionRegistrarAdapter.registerExtension(FirSamWithReceiverExtensionRegistrar(TEST_ANNOTATIONS))
}
}
diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/loadCompilerPlugins.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/loadCompilerPlugins.kt
index 9fa0c44c8b7..e66df6410fb 100644
--- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/loadCompilerPlugins.kt
+++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/impl/loadCompilerPlugins.kt
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.cli.jvm.plugins.processCompilerPluginsOptions
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
+import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCommandLineProcessor
import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar
@@ -32,6 +33,10 @@ internal fun CompilerConfiguration.loadPlugins() {
val registrars =
classLoader.loadServices(scriptCompilationDisabledPlugins, SCRIPT_COMPILATION_DISABLE_PLUGINS_PROPERTY)
addAll(ComponentRegistrar.PLUGIN_COMPONENT_REGISTRARS, registrars)
+ val k2Registrars =
+ classLoader.loadServices(scriptCompilationDisabledPlugins, SCRIPT_COMPILATION_DISABLE_PLUGINS_PROPERTY)
+ addAll(CompilerPluginRegistrar.COMPILER_PLUGIN_REGISTRARS, k2Registrars)
+
}
internal fun CompilerConfiguration.processPluginsCommandLine(arguments: K2JVMCompilerArguments) {