Skip to content

Commit

Permalink
Fix compiler plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
Mr3zee committed Jan 17, 2025
1 parent 68143a0 commit cbe344c
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@ package kotlinx.rpc.codegen
import kotlinx.rpc.codegen.common.RpcClassId
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate
import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.toClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
Expand All @@ -23,16 +26,21 @@ fun FirClassSymbol<*>.isRemoteService(session: FirSession): Boolean = resolvedSu
it.doesMatchesClassId(session, RpcClassId.remoteServiceInterface)
}

fun FirBasedSymbol<*>.rpcAnnotationSource(session: FirSession): KtSourceElement? {
return rpcAnnotation(session)?.source
fun FirBasedSymbol<*>.rpcAnnotationSource(session: FirSession, predicate: DeclarationPredicate): KtSourceElement? {
return rpcAnnotation(session, predicate)?.source
}

fun FirBasedSymbol<*>.rpcAnnotation(session: FirSession): FirAnnotation? {
return resolvedCompilerAnnotationsWithClassIds.rpcAnnotation(session)
fun FirBasedSymbol<*>.rpcAnnotation(session: FirSession, predicate: DeclarationPredicate): FirAnnotation? {
return resolvedCompilerAnnotationsWithClassIds.rpcAnnotation(session, predicate)
}

fun List<FirAnnotation>.rpcAnnotation(session: FirSession): FirAnnotation? {
return getAnnotationByClassId(RpcClassId.rpcAnnotation, session)
@OptIn(UnresolvedExpressionTypeAccess::class)
fun List<FirAnnotation>.rpcAnnotation(session: FirSession, predicate: DeclarationPredicate): FirAnnotation? {
return find {
it.coneTypeOrNull?.toClassLikeSymbol(session)?.let { declaration ->
session.predicateBasedProvider.matches(predicate, declaration)
} == true
}
}

fun FirClassSymbol<*>.remoteServiceSupertypeSource(session: FirSession): KtSourceElement? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ class FirRpcAnnotationChecker(private val ctx: FirCheckersContext) : FirRegularC

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

if ((rpcAnnotated || grpcAnnotated) && !ctx.serializationIsPresent) {
// error("Serialization plugin is not present")
reporter.reportOn(
source = declaration.symbol.rpcAnnotationSource(context.session),
source = declaration.symbol.rpcAnnotationSource(context.session, FirRpcPredicates.rpcMeta),
factory = FirRpcDiagnostics.MISSING_SERIALIZATION_MODULE,
context = context,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.psi.KtAnnotationEntry

object FirRpcDiagnostics {
val MISSING_RPC_ANNOTATION by error0<KtAnnotationEntry>()
val MISSING_SERIALIZATION_MODULE by warning0<KtAnnotationEntry>()
val MISSING_SERIALIZATION_MODULE by error0<KtAnnotationEntry>()
val WRONG_RPC_ANNOTATION_TARGET by error1<KtAnnotationEntry, ConeKotlinType>()
val CHECKED_ANNOTATION_VIOLATION by error1<KtAnnotationEntry, ConeKotlinType>()
val NON_SUSPENDING_REQUEST_WITHOUT_STREAMING_RETURN_TYPE by error0<PsiElement>()
Expand Down
4 changes: 2 additions & 2 deletions publishLocal.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
set -euxo pipefail

./gradlew publishAllPublicationsToBuildRepoRepository
./gradlew -p compiler-plugin publishAllPublicationsToBuildRepoRepository
./gradlew -p gradle-plugin publishAllPublicationsToBuildRepoRepository
./gradlew -p compiler-plugin publishAllPublicationsToBuildRepoRepository --no-configuration-cache
./gradlew -p gradle-plugin publishAllPublicationsToBuildRepoRepository --no-configuration-cache

0 comments on commit cbe344c

Please sign in to comment.