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 2115c3b79ed..1c27cbb90e9 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 @@ -142,46 +142,48 @@ abstract class FirExtensionRegistrar : FirExtensionRegistrarAdapter() { ExtensionRegistrarContext().configurePlugin() } - return BunchOfRegisteredExtensions(map.values) + return BunchOfRegisteredExtensions(map) } - class RegisteredExtensionsFactories(val kClass: KClass) { - val extensionFactories: MutableList> = mutableListOf() - } - - private val map: Map, RegisteredExtensionsFactories> = AVAILABLE_EXTENSIONS.associateWith { - RegisteredExtensionsFactories(it) + private val map: Map, MutableList>> = AVAILABLE_EXTENSIONS.associateWith { + mutableListOf() } private var isInitialized: AtomicBoolean = AtomicBoolean(false) private fun

registerExtension(kClass: KClass, factory: FirExtension.Factory

) { val registeredExtensions = map.getValue(kClass) - registeredExtensions.extensionFactories += factory + registeredExtensions += factory } } class BunchOfRegisteredExtensions @PluginServicesInitialization constructor( - val extensions: Collection + val extensions: Map, List>> ) { companion object { @OptIn(PluginServicesInitialization::class) fun empty(): BunchOfRegisteredExtensions { - val extensions = FirExtensionRegistrar.AVAILABLE_EXTENSIONS.map { FirExtensionRegistrar.RegisteredExtensionsFactories(it) } - return BunchOfRegisteredExtensions(extensions) + return BunchOfRegisteredExtensions(FirExtensionRegistrar.AVAILABLE_EXTENSIONS.associateWith { listOf() }) } } @OptIn(PluginServicesInitialization::class) operator fun plus(other: BunchOfRegisteredExtensions): BunchOfRegisteredExtensions { - return BunchOfRegisteredExtensions(extensions + other.extensions) + val combinedExtensions = buildMap { + for (extensionClass in FirExtensionRegistrar.AVAILABLE_EXTENSIONS) { + put(extensionClass, extensions.getValue(extensionClass) + other.extensions.getValue(extensionClass)) + } + } + return BunchOfRegisteredExtensions(combinedExtensions) } } @SessionConfiguration @OptIn(PluginServicesInitialization::class) fun FirExtensionService.registerExtensions(registeredExtensions: BunchOfRegisteredExtensions) { - registeredExtensions.extensions.forEach { registerExtensions(it.kClass, it.extensionFactories) } + registeredExtensions.extensions.forEach { (extensionClass, extensionFactories) -> + registerExtensions(extensionClass, extensionFactories) + } extensionSessionComponents.forEach { session.register(it.componentClass, it) } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/AbstractFirBaseDiagnosticsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/AbstractFirBaseDiagnosticsTest.kt index c1bd01ca73d..9ef6f4f9e4d 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/AbstractFirBaseDiagnosticsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/AbstractFirBaseDiagnosticsTest.kt @@ -105,9 +105,6 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() { needRegisterJavaElementFinder = true ) { configureSession() - getFirExtensions()?.let { - registerExtensions(it) - } } } @@ -127,10 +124,6 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() { runAnalysis(testDataFile, files, firFilesPerSession) } - protected open fun getFirExtensions(): BunchOfRegisteredExtensions? { - return null - } - private fun mapKtFilesToFirFiles(session: FirSession, ktFiles: List, firFiles: MutableList, useLightTree: Boolean) { val firProvider = (session.firProvider as FirProviderImpl) if (useLightTree) {