[FIR] Allow all extensions register declaration predicates

This commit is contained in:
Dmitriy Novozhilov
2021-11-29 18:16:28 +03:00
committed by TeamCityServer
parent ce218b8a0b
commit e7af50fe2b
7 changed files with 9 additions and 17 deletions
@@ -31,10 +31,8 @@ abstract class FirExtension(val session: FirSession) {
fun interface Factory<out P : FirExtension> {
fun create(session: FirSession): P
}
}
abstract class FirPredicateBasedExtension(session: FirSession) : FirExtension(session) {
abstract fun FirDeclarationPredicateRegistrar.registerPredicates()
open fun FirDeclarationPredicateRegistrar.registerPredicates() {}
}
data class FirExtensionPointName(val name: Name) {
@@ -36,14 +36,10 @@ class FirExtensionService(val session: FirSession) : ComponentArrayOwner<FirExte
var registeredExtensionsSize: Int = 0
private set
var registeredPredicateBasedExtensionsSize: Int = 0
private set
@PluginServicesInitialization
fun registerExtensions(extensionClass: KClass<out FirExtension>, extensionFactories: List<FirExtension.Factory<*>>) {
registeredExtensionsSize += extensionFactories.size
val extensions = extensionFactories.map { it.create(session) }
registeredPredicateBasedExtensionsSize += extensions.count { it is FirPredicateBasedExtension }
registerComponent(
extensionClass,
extensions
@@ -60,6 +56,3 @@ val FirSession.extensionService: FirExtensionService by FirSession.sessionCompon
val FirExtensionService.hasExtensions: Boolean
get() = registeredExtensionsSize > 0
val FirExtensionService.hasPredicateBasedExtensions: Boolean
get() = registeredPredicateBasedExtensionsSize > 0