diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProvider.kt index 7cedb43886b..93213497bbd 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProvider.kt @@ -24,73 +24,34 @@ abstract class FirPredicateBasedProvider : FirSessionComponent { } abstract fun getSymbolsByPredicate(predicate: DeclarationPredicate): List - - abstract fun getSymbolsByPredicate( - declarations: Collection, - predicate: DeclarationPredicate - ): List - - abstract fun getSymbolsWithOwnersByPredicate( - predicate: DeclarationPredicate - ): List>> - - abstract fun getSymbolsWithOwnersByPredicate( - declarations: Collection, - predicate: DeclarationPredicate - ): List>> - abstract fun getOwnersOfDeclaration(declaration: FirAnnotatedDeclaration): List? - abstract fun fileHasPluginAnnotations(file: FirFile): Boolean - - abstract fun registerAnnotatedDeclaration(declaration: FirAnnotatedDeclaration, owners: PersistentList) - abstract fun registerGeneratedDeclaration(declaration: FirAnnotatedDeclaration, owner: FirAnnotatedDeclaration) - abstract fun matches(predicate: DeclarationPredicate, declaration: FirAnnotatedDeclaration): Boolean + fun matches(predicates: List, declaration: FirAnnotatedDeclaration): Boolean { return predicates.any { matches(it, declaration) } } } @NoMutableState -private class FirPredicateBasedProviderImpl(private val session: FirSession) : FirPredicateBasedProvider() { +class FirPredicateBasedProviderImpl(private val session: FirSession) : FirPredicateBasedProvider() { private val registeredPluginAnnotations = session.registeredPluginAnnotations private val cache = Cache() override fun getSymbolsByPredicate(predicate: DeclarationPredicate): List { val annotations = registeredPluginAnnotations.getAnnotationsForPredicate(predicate) if (annotations.isEmpty()) return emptyList() - val declarations = annotations.flatMapTo(mutableSetOf()) { cache.declarationByAnnotation[it] + cache.declarationsUnderAnnotated[it] } - return getSymbolsByPredicate(declarations, predicate) - } - - override fun getSymbolsByPredicate( - declarations: Collection, - predicate: DeclarationPredicate - ): List { + val declarations = annotations.flatMapTo(mutableSetOf()) { + cache.declarationByAnnotation[it] + cache.declarationsUnderAnnotated[it] + } return declarations.filter { matches(predicate, it) } } - override fun getSymbolsWithOwnersByPredicate(predicate: DeclarationPredicate): List>> { - return getSymbolsByPredicate(predicate).zipWithParents() - } - - override fun getSymbolsWithOwnersByPredicate( - declarations: Collection, - predicate: DeclarationPredicate - ): List>> { - return getSymbolsByPredicate(declarations, predicate).zipWithParents() - } - - private fun List.zipWithParents(): List>> { - return this.map { it to cache.ownersForDeclaration.getValue(it) } - } - override fun fileHasPluginAnnotations(file: FirFile): Boolean { return file in cache.filesWithPluginAnnotations } - override fun registerAnnotatedDeclaration(declaration: FirAnnotatedDeclaration, owners: PersistentList) { + fun registerAnnotatedDeclaration(declaration: FirAnnotatedDeclaration, owners: PersistentList) { cache.ownersForDeclaration[declaration] = owners registerOwnersDeclarations(declaration, owners) @@ -108,11 +69,6 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F return cache.ownersForDeclaration[declaration] } - override fun registerGeneratedDeclaration(declaration: FirAnnotatedDeclaration, owner: FirAnnotatedDeclaration) { - val owners = cache.ownersForDeclaration.getValue(owner).add(owner) - registerAnnotatedDeclaration(declaration, owners) - } - private fun registerOwnersDeclarations(declaration: FirAnnotatedDeclaration, owners: PersistentList) { val lastOwner = owners.lastOrNull() ?: return val annotationsFromLastOwner = cache.annotationsOfDeclaration[lastOwner] 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 8f9623c8513..f3c309ed4b4 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 @@ -83,6 +83,8 @@ private class FirAnnotationResolveTransformer( session: FirSession, scopeSession: ScopeSession ) : FirAbstractAnnotationResolveTransformer, PersistentList>(session, scopeSession) { + private val predicateBasedProvider = session.predicateBasedProvider as FirPredicateBasedProviderImpl + var metaAnnotations: Set = emptySet() private val typeResolverTransformer: FirSpecificTypeResolverTransformer = FirSpecificTypeResolverTransformer( session, @@ -138,7 +140,7 @@ private class FirAnnotationResolveTransformer( data: Multimap ): FirAnnotatedDeclaration { return super.transformAnnotatedDeclaration(annotatedDeclaration, data).also { - session.predicateBasedProvider.registerAnnotatedDeclaration(annotatedDeclaration, owners) + predicateBasedProvider.registerAnnotatedDeclaration(annotatedDeclaration, owners) } } }