Skip to content

Commit 5fed42a

Browse files
committed
Rename RPC -> RemoteService; Add @rpc checks and usages
1 parent 85695e5 commit 5fed42a

File tree

54 files changed

+236
-207
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+236
-207
lines changed

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ Build your RPC with already known language constructs and nothing more!
1717

1818
## Quick start
1919

20-
First, create your `RPC` service and define some methods:
20+
First, create your RPC service and define some methods:
2121
```kotlin
22-
import kotlinx.rpc.RPC
22+
import kotlinx.rpc.RemoteService
23+
import kotlinx.rpc.annotations.Rpc
2324

24-
interface AwesomeService : RPC {
25+
@Rpc
26+
interface AwesomeService : RemoteService {
2527
suspend fun getNews(city: String): Flow<String>
2628
}
2729
```

compiler-plugin/compiler-plugin-backend/src/main/core/kotlinx/rpc/codegen/extension/RPCDeclarationScanner.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ internal object RPCDeclarationScanner {
9494

9595
private fun unsupportedDeclaration(service: IrClass, declaration: IrDeclaration, logger: MessageCollector): Nothing? {
9696
logger.report(
97-
severity = CompilerMessageSeverity.WARNING,
98-
message = "Unsupported declaration in RPC interface ${service.name}: ${declaration.dumpKotlinLike()}",
97+
severity = CompilerMessageSeverity.LOGGING,
98+
message = "Unsupported declaration in RemoteService interface ${service.name}: ${declaration.dumpKotlinLike()}",
9999
)
100100

101101
return null

compiler-plugin/compiler-plugin-backend/src/main/core/kotlinx/rpc/codegen/extension/RPCIrContext.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,6 @@ internal class RPCIrContext(
7777
getIrClassSymbol("kotlin", "Pair")
7878
}
7979

80-
val rpc by lazy {
81-
getRpcIrClassSymbol("RPC")
82-
}
83-
8480
val rpcClient by lazy {
8581
getRpcIrClassSymbol("RPCClient")
8682
}

compiler-plugin/compiler-plugin-backend/src/main/core/kotlinx/rpc/codegen/extension/RPCIrServiceProcessor.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,23 @@
44

55
package kotlinx.rpc.codegen.extension
66

7+
import kotlinx.rpc.codegen.common.RpcClassId
78
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
89
import org.jetbrains.kotlin.ir.IrStatement
910
import org.jetbrains.kotlin.ir.declarations.IrClass
10-
import org.jetbrains.kotlin.ir.types.defaultType
11-
import org.jetbrains.kotlin.ir.util.isInterface
11+
import org.jetbrains.kotlin.ir.util.hasAnnotation
1212
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
1313

1414
internal class RPCIrServiceProcessor(
1515
@Suppress("unused")
1616
private val logger: MessageCollector,
1717
) : IrElementTransformer<RPCIrContext> {
18-
@Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")
19-
override fun visitClass(declaration: IrClass, context: RPCIrContext): IrStatement {
20-
if (declaration.isInterface && declaration.superTypes.contains(context.rpc.defaultType)) {
21-
processService(declaration, context)
18+
override fun visitClass(declaration: IrClass, data: RPCIrContext): IrStatement {
19+
if (declaration.hasAnnotation(RpcClassId.rpcAnnotation)) {
20+
processService(declaration, data)
2221
}
2322

24-
return super.visitClass(declaration, context)
23+
return super.visitClass(declaration, data)
2524
}
2625

2726
private fun processService(service: IrClass, context: RPCIrContext) {

compiler-plugin/compiler-plugin-backend/src/main/core/kotlinx/rpc/codegen/extension/RPCStubGenerator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ internal class RPCStubGenerator(
196196
private var coroutineContextProperty: IrProperty by Delegates.notNull()
197197

198198
/**
199-
* `coroutineContext` property from `RPC` interface
199+
* `coroutineContext` property from `RemoteService` interface
200200
*
201201
* ```kotlin
202202
* final override val coroutineContext: CoroutineContext = __rpc_client.provideStubContext(__rpc_stub_id)

compiler-plugin/compiler-plugin-common/src/main/core/kotlinx/rpc/codegen/common/Names.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import org.jetbrains.kotlin.name.FqName
99
import org.jetbrains.kotlin.name.Name
1010

1111
object RpcClassId {
12-
val rpcInterface = ClassId(FqName("kotlinx.rpc"), Name.identifier("RPC"))
13-
val rpcAnnotation = ClassId(FqName("kotlinx.rpc"), Name.identifier("Rpc"))
12+
val remoteServiceInterface = ClassId(FqName("kotlinx.rpc"), Name.identifier("RemoteService"))
13+
val rpcAnnotation = ClassId(FqName("kotlinx.rpc.annotations"), Name.identifier("Rpc"))
1414

1515
val serializableAnnotation = ClassId(FqName("kotlinx.serialization"), Name.identifier("Serializable"))
1616
val contextualAnnotation = ClassId(FqName("kotlinx.serialization"), Name.identifier("Contextual"))

compiler-plugin/compiler-plugin-k2/src/main/latest/kotlinx/rpc/codegen/FirRpcSupertypeGenerator.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.extensions.FirDeclarationPredicateRegistrar
1212
import org.jetbrains.kotlin.fir.extensions.FirSupertypeGenerationExtension
1313
import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider
1414
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
15-
import org.jetbrains.kotlin.fir.types.classId
1615
import org.jetbrains.kotlin.fir.types.constructClassLikeType
1716
import org.jetbrains.kotlin.fir.types.toFirResolvedTypeRef
1817

@@ -33,12 +32,12 @@ class FirRpcSupertypeGenerator(
3332
resolvedSupertypes: List<FirResolvedTypeRef>,
3433
typeResolver: TypeResolveService,
3534
): List<FirResolvedTypeRef> {
36-
if (resolvedSupertypes.any { it.type.classId == RpcClassId.rpcInterface }) {
35+
if (resolvedSupertypes.any { it.doesMatchesClassId(session, RpcClassId.remoteServiceInterface) }) {
3736
return emptyList()
3837
}
3938

4039
return listOf(
41-
RpcClassId.rpcInterface
40+
RpcClassId.remoteServiceInterface
4241
.constructClassLikeType(emptyArray(), isNullable = false)
4342
.toFirResolvedTypeRef()
4443
)

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

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,17 @@ import org.jetbrains.kotlin.KtSourceElement
99
import org.jetbrains.kotlin.fir.FirSession
1010
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
1111
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
12+
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
1213
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
1314
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
14-
import org.jetbrains.kotlin.fir.types.classId
15+
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
16+
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
17+
import org.jetbrains.kotlin.fir.types.FirTypeRef
18+
import org.jetbrains.kotlin.fir.types.coneTypeSafe
19+
import org.jetbrains.kotlin.name.ClassId
1520

16-
fun FirClassSymbol<*>.isRpc(): Boolean = resolvedSuperTypes.any {
17-
it.classId == RpcClassId.rpcInterface
21+
fun FirClassSymbol<*>.isRemoteService(session: FirSession): Boolean = resolvedSuperTypeRefs.any {
22+
it.doesMatchesClassId(session, RpcClassId.remoteServiceInterface)
1823
}
1924

2025
fun FirBasedSymbol<*>.rpcAnnotationSource(session: FirSession): KtSourceElement? {
@@ -28,3 +33,15 @@ fun FirBasedSymbol<*>.rpcAnnotation(session: FirSession): FirAnnotation? {
2833
fun List<FirAnnotation>.rpcAnnotation(session: FirSession): FirAnnotation? {
2934
return getAnnotationByClassId(RpcClassId.rpcAnnotation, session)
3035
}
36+
37+
fun FirClassSymbol<*>.remoteServiceSupertypeSource(session: FirSession): KtSourceElement? {
38+
return remoteServiceSupertype(session)?.source
39+
}
40+
41+
fun FirClassSymbol<*>.remoteServiceSupertype(session: FirSession): FirResolvedTypeRef? {
42+
return resolvedSuperTypeRefs.find { it.doesMatchesClassId(session, RpcClassId.remoteServiceInterface) }
43+
}
44+
45+
internal fun FirTypeRef.doesMatchesClassId(session: FirSession, classId: ClassId): Boolean {
46+
return coneTypeSafe<ConeClassLikeType>()?.fullyExpandedType(session)?.lookupTag?.classId == classId
47+
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ package kotlinx.rpc.codegen.checkers
66

77
import kotlinx.rpc.codegen.FirRpcPredicates
88
import kotlinx.rpc.codegen.checkers.diagnostics.FirRpcDiagnostics
9-
import kotlinx.rpc.codegen.isRpc
9+
import kotlinx.rpc.codegen.isRemoteService
10+
import kotlinx.rpc.codegen.remoteServiceSupertypeSource
1011
import kotlinx.rpc.codegen.rpcAnnotationSource
1112
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
1213
import org.jetbrains.kotlin.diagnostics.reportOn
@@ -33,9 +34,9 @@ object FirRpcAnnotationChecker : FirRegularClassChecker(MppCheckerKind.Common) {
3334
)
3435
}
3536

36-
if (declaration.symbol.isRpc() && !rpcAnnotated) {
37+
if (declaration.symbol.isRemoteService(context.session) && !rpcAnnotated) {
3738
reporter.reportOn(
38-
source = declaration.symbol.rpcAnnotationSource(context.session),
39+
source = declaration.symbol.remoteServiceSupertypeSource(context.session),
3940
factory = FirRpcDiagnostics.MISSING_RPC_ANNOTATION,
4041
context = context,
4142
)

compiler-plugin/compiler-plugin-k2/src/main/latest/kotlinx/rpc/codegen/checkers/diagnostics/RpcDiagnosticRendererFactory.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ object RpcDiagnosticRendererFactory : BaseDiagnosticRendererFactory() {
1212
put(
1313
factory = FirRpcDiagnostics.MISSING_RPC_ANNOTATION,
1414
message = "Missing @Rpc annotation. " +
15-
"All services children of kotlinx.rpc.RPC must be annotated with @Rpc (from kotlinx.rpc package).",
15+
"All services children of kotlinx.rpc.RemoteService " +
16+
"must be annotated with kotlinx.rpc.annotations.Rpc",
1617
)
18+
1719
put(
1820
factory = FirRpcDiagnostics.WRONG_RPC_ANNOTATION_TARGET,
1921
message = "@Rpc annotation is only applicable to interfaces.",

0 commit comments

Comments
 (0)