From e7af50fe2b7272938568de64d5425fc486dbfa01 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Mon, 29 Nov 2021 18:16:28 +0300 Subject: [PATCH] [FIR] Allow all extensions register declaration predicates --- .../fir/extensions/FirDeclarationGenerationExtension.kt | 3 +-- .../fir/extensions/FirRegisteredPluginAnnotations.kt | 5 ++++- .../kotlin/fir/extensions/FirStatusTransformerExtension.kt | 2 +- .../fir/extensions/FirSupertypeGenerationExtension.kt | 3 +-- .../plugin/FirPluginAnnotationsResolveTransformer.kt | 2 +- .../org/jetbrains/kotlin/fir/extensions/FirExtension.kt | 4 +--- .../jetbrains/kotlin/fir/extensions/FirExtensionService.kt | 7 ------- 7 files changed, 9 insertions(+), 17 deletions(-) diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/extensions/FirDeclarationGenerationExtension.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/extensions/FirDeclarationGenerationExtension.kt index 2c038e27d94..de28ce4908c 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/extensions/FirDeclarationGenerationExtension.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/extensions/FirDeclarationGenerationExtension.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.caches.FirCache import org.jetbrains.kotlin.fir.caches.FirLazyValue import org.jetbrains.kotlin.fir.caches.firCachesFactory -import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.ClassId @@ -21,7 +20,7 @@ import kotlin.reflect.KClass * TODO: * - check that annotations or meta-annotations is not empty */ -abstract class FirDeclarationGenerationExtension(session: FirSession) : FirPredicateBasedExtension(session) { +abstract class FirDeclarationGenerationExtension(session: FirSession) : FirExtension(session) { companion object { val NAME = FirExtensionPointName("ExistingClassModification") } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirRegisteredPluginAnnotations.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirRegisteredPluginAnnotations.kt index b73e51c0e50..0e0791fea7a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirRegisteredPluginAnnotations.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirRegisteredPluginAnnotations.kt @@ -23,6 +23,10 @@ abstract class FirRegisteredPluginAnnotations(val session: FirSession) : FirSess abstract val annotations: Set abstract val metaAnnotations: Set + + val hasRegisteredAnnotations: Boolean + get() = annotations.isNotEmpty() || metaAnnotations.isNotEmpty() + abstract fun getAnnotationsWithMetaAnnotation(metaAnnotation: AnnotationFqn): Collection abstract fun registerUserDefinedAnnotation(metaAnnotation: AnnotationFqn, annotationClasses: Collection) @@ -80,7 +84,6 @@ private class FirRegisteredPluginAnnotationsImpl(session: FirSession) : FirRegis } for (extension in session.extensionService.getAllExtensions()) { - if (extension !is FirPredicateBasedExtension) continue with(extension) { registrar.registerPredicates() } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirStatusTransformerExtension.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirStatusTransformerExtension.kt index 9d988e1342a..c612551a79e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirStatusTransformerExtension.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirStatusTransformerExtension.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import kotlin.reflect.KClass -abstract class FirStatusTransformerExtension(session: FirSession) : FirPredicateBasedExtension(session) { +abstract class FirStatusTransformerExtension(session: FirSession) : FirExtension(session) { companion object { val NAME = FirExtensionPointName("StatusTransformer") } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirSupertypeGenerationExtension.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirSupertypeGenerationExtension.kt index 2caadfd217d..637f02d1d7c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirSupertypeGenerationExtension.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirSupertypeGenerationExtension.kt @@ -8,10 +8,9 @@ package org.jetbrains.kotlin.fir.extensions import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef -import org.jetbrains.kotlin.fir.types.FirTypeRef import kotlin.reflect.KClass -abstract class FirSupertypeGenerationExtension(session: FirSession) : FirPredicateBasedExtension(session) { +abstract class FirSupertypeGenerationExtension(session: FirSession) : FirExtension(session) { companion object { val NAME = FirExtensionPointName("SupertypeGenerator") } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt index fbce830613d..1366a764fd1 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt @@ -54,8 +54,8 @@ class FirPluginAnnotationsResolveTransformer( override fun transformFile(file: FirFile, data: Any?): FirFile { checkSessionConsistency(file) - if (!extensionService.hasPredicateBasedExtensions) return file val registeredPluginAnnotations = session.registeredPluginAnnotations + if (!registeredPluginAnnotations.hasRegisteredAnnotations) return file val newAnnotations = file.resolveAnnotations(registeredPluginAnnotations.annotations, registeredPluginAnnotations.metaAnnotations) if (!newAnnotations.isEmpty) { for (metaAnnotation in newAnnotations.keySet()) { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/extensions/FirExtension.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/extensions/FirExtension.kt index e4e2ef3f01d..1a59a97d857 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/extensions/FirExtension.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/extensions/FirExtension.kt @@ -31,10 +31,8 @@ abstract class FirExtension(val session: FirSession) { fun interface Factory { 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) { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/extensions/FirExtensionService.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/extensions/FirExtensionService.kt index 7a18355eb8d..bba3aa7d28b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/extensions/FirExtensionService.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/extensions/FirExtensionService.kt @@ -36,14 +36,10 @@ class FirExtensionService(val session: FirSession) : ComponentArrayOwner, extensionFactories: List>) { 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