[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
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.fir.caches.FirCachesFactory
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.java.FirJavaFacade import org.jetbrains.kotlin.fir.java.FirJavaFacade
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
import org.jetbrains.kotlin.fir.java.deserialization.JvmClassFileBasedSymbolProvider import org.jetbrains.kotlin.fir.java.deserialization.JvmClassFileBasedSymbolProvider
@@ -159,6 +160,9 @@ internal object FirIdeSessionFactory {
if (isRootModule) { if (isRootModule) {
registerExtendedCommonCheckers() registerExtendedCommonCheckers()
} }
for (extensionRegistrar in FirExtensionRegistrar.getInstances(project)) {
registerExtensions(extensionRegistrar.configure())
}
}.configure() }.configure()
configureSession?.invoke(this) configureSession?.invoke(this)
} }
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.pipeline.buildFirFromKtFiles import org.jetbrains.kotlin.fir.pipeline.buildFirFromKtFiles
import org.jetbrains.kotlin.fir.pipeline.convertToIr import org.jetbrains.kotlin.fir.pipeline.convertToIr
@@ -87,6 +88,7 @@ object FirKotlinToJvmBytecodeCompiler {
val isMultiModuleChunk = chunk.size > 1 val isMultiModuleChunk = chunk.size > 1
// TODO: run lowerings for all modules in the chunk, then run codegen for all modules. // TODO: run lowerings for all modules in the chunk, then run codegen for all modules.
val project = (projectEnvironment as? PsiBasedProjectEnvironment)?.project
for (module in chunk) { for (module in chunk) {
val moduleConfiguration = projectConfiguration.applyModuleProperties(module, buildFile) val moduleConfiguration = projectConfiguration.applyModuleProperties(module, buildFile)
val context = CompilationContext( val context = CompilationContext(
@@ -101,7 +103,8 @@ object FirKotlinToJvmBytecodeCompiler {
targetIds, targetIds,
incrementalComponents, incrementalComponents,
extendedAnalysisMode, extendedAnalysisMode,
(projectEnvironment as? PsiBasedProjectEnvironment)?.project?.let { IrGenerationExtension.getInstances(it) } ?: emptyList() firExtensionRegistrars = project?.let { FirExtensionRegistrar.getInstances(it) } ?: emptyList(),
irGenerationExtensions = project?.let { IrGenerationExtension.getInstances(it) } ?: emptyList()
) )
val generationState = context.compileModule() ?: return false val generationState = context.compileModule() ?: return false
outputs += generationState outputs += generationState
@@ -112,7 +115,7 @@ object FirKotlinToJvmBytecodeCompiler {
} }
return writeOutputs( return writeOutputs(
(projectEnvironment as? PsiBasedProjectEnvironment)?.project, project,
projectConfiguration, projectConfiguration,
chunk, chunk,
outputs.map(Pair<FirResult, GenerationState>::second), outputs.map(Pair<FirResult, GenerationState>::second),
@@ -208,6 +211,7 @@ object FirKotlinToJvmBytecodeCompiler {
librariesScope, librariesScope,
lookupTracker = moduleConfiguration.get(CommonConfigurationKeys.LOOKUP_TRACKER), lookupTracker = moduleConfiguration.get(CommonConfigurationKeys.LOOKUP_TRACKER),
providerAndScopeForIncrementalCompilation, providerAndScopeForIncrementalCompilation,
firExtensionRegistrars,
dependenciesConfigurator = { dependenciesConfigurator = {
dependencies(moduleConfiguration.jvmClasspathRoots.map { it.toPath() }) dependencies(moduleConfiguration.jvmClasspathRoots.map { it.toPath() })
dependencies(moduleConfiguration.jvmModularRoots.map { it.toPath() }) dependencies(moduleConfiguration.jvmModularRoots.map { it.toPath() })
@@ -350,6 +354,7 @@ object FirKotlinToJvmBytecodeCompiler {
val targetIds: List<TargetId>?, val targetIds: List<TargetId>?,
val incrementalComponents: IncrementalCompilationComponents?, val incrementalComponents: IncrementalCompilationComponents?,
val extendedAnalysisMode: Boolean, val extendedAnalysisMode: Boolean,
val firExtensionRegistrars: List<FirExtensionRegistrar>,
val irGenerationExtensions: Collection<IrGenerationExtension> val irGenerationExtensions: Collection<IrGenerationExtension>
) )
@@ -82,6 +82,7 @@ import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.extensions.* import org.jetbrains.kotlin.extensions.*
import org.jetbrains.kotlin.extensions.internal.CandidateInterceptor import org.jetbrains.kotlin.extensions.internal.CandidateInterceptor
import org.jetbrains.kotlin.extensions.internal.TypeResolutionInterceptor import org.jetbrains.kotlin.extensions.internal.TypeResolutionInterceptor
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.js.translate.extensions.JsSyntheticTranslateExtension import org.jetbrains.kotlin.js.translate.extensions.JsSyntheticTranslateExtension
import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache
@@ -648,6 +649,7 @@ class KotlinCoreEnvironment private constructor(
TypeResolutionInterceptor.registerExtensionPoint(project) TypeResolutionInterceptor.registerExtensionPoint(project)
CandidateInterceptor.registerExtensionPoint(project) CandidateInterceptor.registerExtensionPoint(project)
DescriptorSerializerPlugin.registerExtensionPoint(project) DescriptorSerializerPlugin.registerExtensionPoint(project)
FirExtensionRegistrar.registerExtensionPoint(project)
} }
internal fun registerExtensionsFromPlugins(project: MockProject, configuration: CompilerConfiguration) { internal fun registerExtensionsFromPlugins(project: MockProject, configuration: CompilerConfiguration) {
@@ -5,14 +5,18 @@
package org.jetbrains.kotlin.fir.extensions package org.jetbrains.kotlin.fir.extensions
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.SessionConfiguration import org.jetbrains.kotlin.fir.SessionConfiguration
import org.jetbrains.kotlin.fir.analysis.extensions.FirAdditionalCheckersExtension import org.jetbrains.kotlin.fir.analysis.extensions.FirAdditionalCheckersExtension
import kotlin.reflect.KClass import kotlin.reflect.KClass
abstract class FirExtensionRegistrar { abstract class FirExtensionRegistrar {
companion object { companion object : ProjectExtensionDescriptor<FirExtensionRegistrar>(
val AVAILABLE_EXTENSIONS = listOf( name = "org.jetbrains.kotlin.fir.extensions.firExtensionRegistrar",
extensionClass = FirExtensionRegistrar::class.java
) {
internal val AVAILABLE_EXTENSIONS = listOf(
FirStatusTransformerExtension::class, FirStatusTransformerExtension::class,
FirDeclarationGenerationExtension::class, FirDeclarationGenerationExtension::class,
FirAdditionalCheckersExtension::class, FirAdditionalCheckersExtension::class,
@@ -84,6 +84,7 @@ object FirSessionFactory {
librariesScope: AbstractProjectFileSearchScope, librariesScope: AbstractProjectFileSearchScope,
lookupTracker: LookupTracker?, lookupTracker: LookupTracker?,
providerAndScopeForIncrementalCompilation: ProviderAndScopeForIncrementalCompilation?, providerAndScopeForIncrementalCompilation: ProviderAndScopeForIncrementalCompilation?,
extensionRegistrars: List<FirExtensionRegistrar>,
dependenciesConfigurator: DependencyListForCliModule.Builder.() -> Unit = {}, dependenciesConfigurator: DependencyListForCliModule.Builder.() -> Unit = {},
noinline sessionConfigurator: FirSessionConfigurator.() -> Unit = {}, noinline sessionConfigurator: FirSessionConfigurator.() -> Unit = {},
): FirSession { ): FirSession {
@@ -113,6 +114,7 @@ object FirSessionFactory {
sourceScope, sourceScope,
projectEnvironment, projectEnvironment,
providerAndScopeForIncrementalCompilation, providerAndScopeForIncrementalCompilation,
extensionRegistrars,
languageVersionSettings = languageVersionSettings, languageVersionSettings = languageVersionSettings,
lookupTracker = lookupTracker, lookupTracker = lookupTracker,
init = sessionConfigurator init = sessionConfigurator
@@ -125,6 +127,7 @@ object FirSessionFactory {
scope: AbstractProjectFileSearchScope, scope: AbstractProjectFileSearchScope,
projectEnvironment: AbstractProjectEnvironment, projectEnvironment: AbstractProjectEnvironment,
providerAndScopeForIncrementalCompilation: ProviderAndScopeForIncrementalCompilation?, providerAndScopeForIncrementalCompilation: ProviderAndScopeForIncrementalCompilation?,
extensionRegistrars: List<FirExtensionRegistrar>,
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT, languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
lookupTracker: LookupTracker? = null, lookupTracker: LookupTracker? = null,
init: FirSessionConfigurator.() -> Unit = {} init: FirSessionConfigurator.() -> Unit = {}
@@ -160,6 +163,9 @@ object FirSessionFactory {
FirSessionConfigurator(this).apply { FirSessionConfigurator(this).apply {
registerCommonCheckers() registerCommonCheckers()
registerJvmCheckers() registerJvmCheckers()
for (extensionRegistrar in extensionRegistrars) {
registerExtensions(extensionRegistrar.configure())
}
init() init()
}.configure() }.configure()
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots
import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.fir.analysis.FirAnalyzerFacade import org.jetbrains.kotlin.fir.analysis.FirAnalyzerFacade
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.moduleData import org.jetbrains.kotlin.fir.moduleData
import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.fir.session.FirSessionFactory
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
@@ -91,6 +92,7 @@ class FirFrontendFacade(
PsiBasedProjectFileSearchScope(librariesScope), PsiBasedProjectFileSearchScope(librariesScope),
lookupTracker = null, lookupTracker = null,
providerAndScopeForIncrementalCompilation = null, providerAndScopeForIncrementalCompilation = null,
extensionRegistrars = FirExtensionRegistrar.getInstances(project),
dependenciesConfigurator = { dependenciesConfigurator = {
dependencies(configuration.jvmModularRoots.map { it.toPath() }) dependencies(configuration.jvmModularRoots.map { it.toPath() })
dependencies(configuration.jvmClasspathRoots.map { it.toPath() }) dependencies(configuration.jvmClasspathRoots.map { it.toPath() })
@@ -98,6 +98,7 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
librariesScope = PsiBasedProjectFileSearchScope(allProjectScope), librariesScope = PsiBasedProjectFileSearchScope(allProjectScope),
lookupTracker = null, lookupTracker = null,
providerAndScopeForIncrementalCompilation = null, providerAndScopeForIncrementalCompilation = null,
extensionRegistrars = emptyList()
) { ) {
configureSession() configureSession()
getFirExtensions()?.let { getFirExtensions()?.let {
@@ -40,6 +40,7 @@ fun createSessionForTests(
librariesScope, librariesScope,
lookupTracker = null, lookupTracker = null,
providerAndScopeForIncrementalCompilation = null, providerAndScopeForIncrementalCompilation = null,
extensionRegistrars = emptyList(),
dependenciesConfigurator = { dependenciesConfigurator = {
friendDependencies(friendsPaths) friendDependencies(friendsPaths)
} }
@@ -65,6 +66,7 @@ fun createSessionForTests(
PsiBasedProjectFileSearchScope(librariesScope), PsiBasedProjectFileSearchScope(librariesScope),
lookupTracker = null, lookupTracker = null,
providerAndScopeForIncrementalCompilation = null, providerAndScopeForIncrementalCompilation = null,
extensionRegistrars = emptyList(),
dependenciesConfigurator = { dependenciesConfigurator = {
friendDependencies(friendsPaths) friendDependencies(friendsPaths)
} }
@@ -5,18 +5,15 @@
package org.jetbrains.kotlin.fir.plugin.runners package org.jetbrains.kotlin.fir.plugin.runners
import org.jetbrains.kotlin.fir.plugin.FirAllOpenComponentRegistrar import org.jetbrains.kotlin.fir.plugin.services.ExtensionRegistrarConfigurator
import org.jetbrains.kotlin.fir.plugin.services.IrExtensionRegistrar
import org.jetbrains.kotlin.fir.plugin.services.PluginAnnotationsProvider import org.jetbrains.kotlin.fir.plugin.services.PluginAnnotationsProvider
import org.jetbrains.kotlin.test.Constructor
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.ENABLE_PLUGIN_PHASES import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.ENABLE_PLUGIN_PHASES
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.FIR_DUMP import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.FIR_DUMP
import org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade
import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration import org.jetbrains.kotlin.test.runners.baseFirDiagnosticTestConfiguration
fun TestConfigurationBuilder.commonFirWithPluginFrontendConfiguration() { fun TestConfigurationBuilder.commonFirWithPluginFrontendConfiguration() {
baseFirDiagnosticTestConfiguration(frontendFacade = FirFrontendFacadeWithPlugin) baseFirDiagnosticTestConfiguration()
defaultDirectives { defaultDirectives {
+ENABLE_PLUGIN_PHASES +ENABLE_PLUGIN_PHASES
@@ -25,13 +22,6 @@ fun TestConfigurationBuilder.commonFirWithPluginFrontendConfiguration() {
useConfigurators( useConfigurators(
::PluginAnnotationsProvider, ::PluginAnnotationsProvider,
::IrExtensionRegistrar ::ExtensionRegistrarConfigurator
) )
} }
val FirFrontendFacadeWithPlugin: Constructor<FirFrontendFacade>
get() = { testServices ->
FirFrontendFacade(testServices) {
it.registerExtensions(FirAllOpenComponentRegistrar().configure())
}
}
@@ -7,12 +7,15 @@ package org.jetbrains.kotlin.fir.plugin.services
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.plugin.FirAllOpenComponentRegistrar
import org.jetbrains.kotlin.ir.plugin.GeneratedDeclarationsIrBodyFiller import org.jetbrains.kotlin.ir.plugin.GeneratedDeclarationsIrBodyFiller
import org.jetbrains.kotlin.test.services.EnvironmentConfigurator import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
class IrExtensionRegistrar(testServices: TestServices) : EnvironmentConfigurator(testServices) { class ExtensionRegistrarConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
override fun registerCompilerExtensions(project: Project) { override fun registerCompilerExtensions(project: Project) {
FirExtensionRegistrar.registerExtension(project, FirAllOpenComponentRegistrar())
IrGenerationExtension.registerExtension(project, GeneratedDeclarationsIrBodyFiller()) IrGenerationExtension.registerExtension(project, GeneratedDeclarationsIrBodyFiller())
} }
} }
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.parcelize.test.runners package org.jetbrains.kotlin.parcelize.test.runners
import org.jetbrains.kotlin.parcelize.test.services.FirFacadeWithParcelizeExtension
import org.jetbrains.kotlin.parcelize.test.services.ParcelizeEnvironmentConfigurator import org.jetbrains.kotlin.parcelize.test.services.ParcelizeEnvironmentConfigurator
import org.jetbrains.kotlin.test.bind import org.jetbrains.kotlin.test.bind
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
@@ -18,7 +17,7 @@ import org.jetbrains.kotlin.test.services.fir.FirOldFrontendMetaConfigurator
abstract class AbstractFirParcelizeDiagnosticTest : AbstractKotlinCompilerTest() { abstract class AbstractFirParcelizeDiagnosticTest : AbstractKotlinCompilerTest() {
override fun TestConfigurationBuilder.configuration() { override fun TestConfigurationBuilder.configuration() {
baseFirDiagnosticTestConfiguration(frontendFacade = FirFacadeWithParcelizeExtension) baseFirDiagnosticTestConfiguration()
defaultDirectives { defaultDirectives {
+FirDiagnosticsDirectives.ENABLE_PLUGIN_PHASES +FirDiagnosticsDirectives.ENABLE_PLUGIN_PHASES
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.test.backend.ir.JvmIrBackendFacade
import org.jetbrains.kotlin.test.bind import org.jetbrains.kotlin.test.bind
import org.jetbrains.kotlin.test.builders.* import org.jetbrains.kotlin.test.builders.*
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.REQUIRES_SEPARATE_PROCESS import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.REQUIRES_SEPARATE_PROCESS
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.DIAGNOSTICS
import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.REPORT_ONLY_EXPLICITLY_DEFINED_DEBUG_INFO import org.jetbrains.kotlin.test.directives.DiagnosticsDirectives.REPORT_ONLY_EXPLICITLY_DEFINED_DEBUG_INFO
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.ENABLE_PLUGIN_PHASES import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives.ENABLE_PLUGIN_PHASES
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontend2ClassicBackendConverter import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontend2ClassicBackendConverter
@@ -26,6 +25,7 @@ import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact
import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler
import org.jetbrains.kotlin.test.frontend.fir.Fir2IrResultsConverter import org.jetbrains.kotlin.test.frontend.fir.Fir2IrResultsConverter
import org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade
import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDiagnosticsHandler import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDiagnosticsHandler
import org.jetbrains.kotlin.test.model.* import org.jetbrains.kotlin.test.model.*
@@ -116,7 +116,7 @@ open class AbstractParcelizeFirBoxTest : AbstractParcelizeBoxTestBase<FirOutputA
TargetBackend.JVM_IR TargetBackend.JVM_IR
) { ) {
override val frontendFacade: Constructor<FrontendFacade<FirOutputArtifact>> override val frontendFacade: Constructor<FrontendFacade<FirOutputArtifact>>
get() = FirFacadeWithParcelizeExtension get() = ::FirFrontendFacade
override val frontendToBackendConverter: Constructor<Frontend2BackendConverter<FirOutputArtifact, IrBackendInput>> override val frontendToBackendConverter: Constructor<Frontend2BackendConverter<FirOutputArtifact, IrBackendInput>>
get() = ::Fir2IrResultsConverter get() = ::Fir2IrResultsConverter
@@ -1,16 +0,0 @@
/*
* Copyright 2010-2021 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.parcelize.test.services
import org.jetbrains.kotlin.parcelize.fir.FirParcelizeExtensionRegistrar
import org.jetbrains.kotlin.test.Constructor
import org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade
val FirFacadeWithParcelizeExtension: Constructor<FirFrontendFacade> = { testServices ->
FirFrontendFacade(testServices) {
it.registerExtensions(FirParcelizeExtensionRegistrar().configure())
}
}
@@ -9,8 +9,10 @@ import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.parcelize.ParcelizeComponentRegistrar import org.jetbrains.kotlin.parcelize.ParcelizeComponentRegistrar
import org.jetbrains.kotlin.parcelize.ParcelizeFirIrGeneratorExtension import org.jetbrains.kotlin.parcelize.ParcelizeFirIrGeneratorExtension
import org.jetbrains.kotlin.parcelize.fir.FirParcelizeExtensionRegistrar
import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.EnvironmentConfigurator import org.jetbrains.kotlin.test.services.EnvironmentConfigurator
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
@@ -31,6 +33,7 @@ class ParcelizeEnvironmentConfigurator(
override fun registerCompilerExtensions(project: Project) { override fun registerCompilerExtensions(project: Project) {
if (useFirExtension) { if (useFirExtension) {
FirExtensionRegistrar.registerExtension(project, FirParcelizeExtensionRegistrar())
IrGenerationExtension.registerExtension(project, ParcelizeFirIrGeneratorExtension()) IrGenerationExtension.registerExtension(project, ParcelizeFirIrGeneratorExtension())
} else { } else {
ParcelizeComponentRegistrar.registerParcelizeComponents(project) ParcelizeComponentRegistrar.registerParcelizeComponents(project)