Skip to content

Commit cbe344c

Browse files
committed
Fix compiler plugin
1 parent 68143a0 commit cbe344c

File tree

4 files changed

+22
-13
lines changed

4 files changed

+22
-13
lines changed

compiler-plugin/compiler-plugin-k2/src/main/core/kotlinx/rpc/codegen/FirRpcUtils.kt

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@ package kotlinx.rpc.codegen
77
import kotlinx.rpc.codegen.common.RpcClassId
88
import org.jetbrains.kotlin.KtSourceElement
99
import org.jetbrains.kotlin.fir.FirSession
10-
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
1110
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
1214
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
15+
import org.jetbrains.kotlin.fir.resolve.toClassLikeSymbol
1316
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
1417
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
1518
import 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

3846
fun FirClassSymbol<*>.remoteServiceSupertypeSource(session: FirSession): KtSourceElement? {

compiler-plugin/compiler-plugin-k2/src/main/core/kotlinx/rpc/codegen/checkers/FirRpcAnnotationChecker.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ class FirRpcAnnotationChecker(private val ctx: FirCheckersContext) : FirRegularC
3434

3535
if (!declaration.isInterface && declaration.classKind != ClassKind.ANNOTATION_CLASS && rpcMetaAnnotated) {
3636
reporter.reportOn(
37-
source = declaration.symbol.rpcAnnotationSource(context.session),
37+
source = declaration.symbol.rpcAnnotationSource(context.session, FirRpcPredicates.rpcMeta),
3838
factory = FirRpcDiagnostics.WRONG_RPC_ANNOTATION_TARGET,
3939
context = context,
40-
a = declaration.symbol.rpcAnnotation(context.session)?.resolvedType
40+
a = declaration.symbol.rpcAnnotation(context.session, FirRpcPredicates.rpc)?.resolvedType
4141
?: error("Unexpected unresolved annotation type for declaration: ${declaration.symbol.classId.asSingleFqName()}"),
4242
)
4343
}
@@ -51,8 +51,9 @@ class FirRpcAnnotationChecker(private val ctx: FirCheckersContext) : FirRegularC
5151
}
5252

5353
if ((rpcAnnotated || grpcAnnotated) && !ctx.serializationIsPresent) {
54+
// error("Serialization plugin is not present")
5455
reporter.reportOn(
55-
source = declaration.symbol.rpcAnnotationSource(context.session),
56+
source = declaration.symbol.rpcAnnotationSource(context.session, FirRpcPredicates.rpcMeta),
5657
factory = FirRpcDiagnostics.MISSING_SERIALIZATION_MODULE,
5758
context = context,
5859
)

compiler-plugin/compiler-plugin-k2/src/main/core/kotlinx/rpc/codegen/checkers/diagnostics/FirRpcDiagnostics.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.psi.KtAnnotationEntry
1818

1919
object FirRpcDiagnostics {
2020
val MISSING_RPC_ANNOTATION by error0<KtAnnotationEntry>()
21-
val MISSING_SERIALIZATION_MODULE by warning0<KtAnnotationEntry>()
21+
val MISSING_SERIALIZATION_MODULE by error0<KtAnnotationEntry>()
2222
val WRONG_RPC_ANNOTATION_TARGET by error1<KtAnnotationEntry, ConeKotlinType>()
2323
val CHECKED_ANNOTATION_VIOLATION by error1<KtAnnotationEntry, ConeKotlinType>()
2424
val NON_SUSPENDING_REQUEST_WITHOUT_STREAMING_RETURN_TYPE by error0<PsiElement>()

publishLocal.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@
77
set -euxo pipefail
88

99
./gradlew publishAllPublicationsToBuildRepoRepository
10-
./gradlew -p compiler-plugin publishAllPublicationsToBuildRepoRepository
11-
./gradlew -p gradle-plugin publishAllPublicationsToBuildRepoRepository
10+
./gradlew -p compiler-plugin publishAllPublicationsToBuildRepoRepository --no-configuration-cache
11+
./gradlew -p gradle-plugin publishAllPublicationsToBuildRepoRepository --no-configuration-cache

0 commit comments

Comments
 (0)