@@ -7,9 +7,12 @@ package kotlinx.rpc.codegen
77import kotlinx.rpc.codegen.common.RpcClassId
88import org.jetbrains.kotlin.KtSourceElement
99import org.jetbrains.kotlin.fir.FirSession
10- import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
1110import org.jetbrains.kotlin.fir.expressions.FirAnnotation
11+ import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
12+ import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate
13+ import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
1214import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
15+ import org.jetbrains.kotlin.fir.resolve.toClassLikeSymbol
1316import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
1417import org.jetbrains.kotlin.fir.symbols.SymbolInternals
1518import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
@@ -23,16 +26,21 @@ fun FirClassSymbol<*>.isRemoteService(session: FirSession): Boolean = resolvedSu
2326 it.doesMatchesClassId(session, RpcClassId .remoteServiceInterface)
2427}
2528
26- fun FirBasedSymbol <* >.rpcAnnotationSource (session : FirSession ): KtSourceElement ? {
27- return rpcAnnotation(session)?.source
29+ fun FirBasedSymbol <* >.rpcAnnotationSource (session : FirSession , predicate : DeclarationPredicate ): KtSourceElement ? {
30+ return rpcAnnotation(session, predicate )?.source
2831}
2932
30- fun FirBasedSymbol <* >.rpcAnnotation (session : FirSession ): FirAnnotation ? {
31- return resolvedCompilerAnnotationsWithClassIds.rpcAnnotation(session)
33+ fun FirBasedSymbol <* >.rpcAnnotation (session : FirSession , predicate : DeclarationPredicate ): FirAnnotation ? {
34+ return resolvedCompilerAnnotationsWithClassIds.rpcAnnotation(session, predicate )
3235}
3336
34- fun List<FirAnnotation>.rpcAnnotation (session : FirSession ): FirAnnotation ? {
35- return getAnnotationByClassId(RpcClassId .rpcAnnotation, session)
37+ @OptIn(UnresolvedExpressionTypeAccess ::class )
38+ fun List<FirAnnotation>.rpcAnnotation (session : FirSession , predicate : DeclarationPredicate ): FirAnnotation ? {
39+ return find {
40+ it.coneTypeOrNull?.toClassLikeSymbol(session)?.let { declaration ->
41+ session.predicateBasedProvider.matches(predicate, declaration)
42+ } == true
43+ }
3644}
3745
3846fun FirClassSymbol <* >.remoteServiceSupertypeSource (session : FirSession ): KtSourceElement ? {
0 commit comments