[FIR] Make FirExtensionRegistrar a proper extension point

After that commit it's allowed to register any FIR plugin using
  existing extension infrastructure (`-Xplugin` CLI argument,
  plugin.xml for IDE plugins, etc)
This commit is contained in:
Dmitriy Novozhilov
2021-11-29 14:07:27 +03:00
committed by TeamCityServer
parent 14ee13c72e
commit ce218b8a0b
14 changed files with 43 additions and 38 deletions
@@ -5,14 +5,18 @@
package org.jetbrains.kotlin.fir.extensions
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.SessionConfiguration
import org.jetbrains.kotlin.fir.analysis.extensions.FirAdditionalCheckersExtension
import kotlin.reflect.KClass
abstract class FirExtensionRegistrar {
companion object {
val AVAILABLE_EXTENSIONS = listOf(
companion object : ProjectExtensionDescriptor<FirExtensionRegistrar>(
name = "org.jetbrains.kotlin.fir.extensions.firExtensionRegistrar",
extensionClass = FirExtensionRegistrar::class.java
) {
internal val AVAILABLE_EXTENSIONS = listOf(
FirStatusTransformerExtension::class,
FirDeclarationGenerationExtension::class,
FirAdditionalCheckersExtension::class,
@@ -84,6 +84,7 @@ object FirSessionFactory {
librariesScope: AbstractProjectFileSearchScope,
lookupTracker: LookupTracker?,
providerAndScopeForIncrementalCompilation: ProviderAndScopeForIncrementalCompilation?,
extensionRegistrars: List<FirExtensionRegistrar>,
dependenciesConfigurator: DependencyListForCliModule.Builder.() -> Unit = {},
noinline sessionConfigurator: FirSessionConfigurator.() -> Unit = {},
): FirSession {
@@ -113,6 +114,7 @@ object FirSessionFactory {
sourceScope,
projectEnvironment,
providerAndScopeForIncrementalCompilation,
extensionRegistrars,
languageVersionSettings = languageVersionSettings,
lookupTracker = lookupTracker,
init = sessionConfigurator
@@ -125,6 +127,7 @@ object FirSessionFactory {
scope: AbstractProjectFileSearchScope,
projectEnvironment: AbstractProjectEnvironment,
providerAndScopeForIncrementalCompilation: ProviderAndScopeForIncrementalCompilation?,
extensionRegistrars: List<FirExtensionRegistrar>,
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
lookupTracker: LookupTracker? = null,
init: FirSessionConfigurator.() -> Unit = {}
@@ -160,6 +163,9 @@ object FirSessionFactory {
FirSessionConfigurator(this).apply {
registerCommonCheckers()
registerJvmCheckers()
for (extensionRegistrar in extensionRegistrars) {
registerExtensions(extensionRegistrar.configure())
}
init()
}.configure()