@@ -7,9 +7,12 @@ package kotlinx.rpc.codegen
7
7
import kotlinx.rpc.codegen.common.RpcClassId
8
8
import org.jetbrains.kotlin.KtSourceElement
9
9
import org.jetbrains.kotlin.fir.FirSession
10
- import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
11
10
import 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
12
14
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
15
+ import org.jetbrains.kotlin.fir.resolve.toClassLikeSymbol
13
16
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
14
17
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
15
18
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
@@ -23,16 +26,21 @@ fun FirClassSymbol<*>.isRemoteService(session: FirSession): Boolean = resolvedSu
23
26
it.doesMatchesClassId(session, RpcClassId .remoteServiceInterface)
24
27
}
25
28
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
28
31
}
29
32
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 )
32
35
}
33
36
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
+ }
36
44
}
37
45
38
46
fun FirClassSymbol <* >.remoteServiceSupertypeSource (session : FirSession ): KtSourceElement ? {
0 commit comments