Skip to content

Commit dcecbcb

Browse files
authored
Fix regression of nested declarations in RPC interfaces (#181)
1 parent b5b8603 commit dcecbcb

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
package kotlinx.rpc.codegen.extension
66

77
import kotlinx.rpc.codegen.common.RpcNames
8+
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
9+
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
810
import org.jetbrains.kotlin.ir.declarations.IrClass
911
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
1012
import org.jetbrains.kotlin.ir.declarations.IrProperty
@@ -21,7 +23,7 @@ import org.jetbrains.kotlin.ir.util.packageFqName
2123
* but all user-friendly errors are expected to be thrown by frontend plugins
2224
*/
2325
internal object RPCDeclarationScanner {
24-
fun scanServiceDeclaration(service: IrClass, ctx: RPCIrContext): ServiceDeclaration {
26+
fun scanServiceDeclaration(service: IrClass, ctx: RPCIrContext, logger: MessageCollector): ServiceDeclaration {
2527
var stubClass: IrClass? = null
2628

2729
val declarations = service.declarations.memoryOptimizedMap { declaration ->
@@ -50,7 +52,7 @@ internal object RPCDeclarationScanner {
5052
ctx.flow -> ServiceDeclaration.FlowField.Kind.Plain
5153
ctx.sharedFlow -> ServiceDeclaration.FlowField.Kind.Shared
5254
ctx.stateFlow -> ServiceDeclaration.FlowField.Kind.State
53-
else -> unsupportedDeclaration(service, declaration)
55+
else -> return@memoryOptimizedMap unsupportedDeclaration(service, declaration, logger)
5456
}
5557

5658
ServiceDeclaration.FlowField(declaration, flowType)
@@ -62,11 +64,11 @@ internal object RPCDeclarationScanner {
6264
return@memoryOptimizedMap null
6365
}
6466

65-
unsupportedDeclaration(service, declaration)
67+
unsupportedDeclaration(service, declaration, logger)
6668
}
6769

6870
else -> {
69-
unsupportedDeclaration(service, declaration)
71+
unsupportedDeclaration(service, declaration, logger)
7072
}
7173
}
7274
}
@@ -75,7 +77,7 @@ internal object RPCDeclarationScanner {
7577
?: error("Expected package name of the ${service.name.asString()}")
7678

7779
val stubClassNotNull = stubClass
78-
// only for KSP generation
80+
// only for KSP generation
7981
?: ctx.getIrClassSymbol(
8082
packageName = packageName,
8183
name = "${service.name.asString()}${RpcNames.SERVICE_STUB_NAME_KSP.asString()}"
@@ -90,6 +92,11 @@ internal object RPCDeclarationScanner {
9092
}
9193
}
9294

93-
private fun unsupportedDeclaration(service: IrClass, declaration: IrDeclaration): Nothing {
94-
error("Unsupported declaration in RPC interface ${service.name}: ${declaration.dumpKotlinLike()}")
95+
private fun unsupportedDeclaration(service: IrClass, declaration: IrDeclaration, logger: MessageCollector): Nothing? {
96+
logger.report(
97+
severity = CompilerMessageSeverity.WARNING,
98+
message = "Unsupported declaration in RPC interface ${service.name}: ${declaration.dumpKotlinLike()}",
99+
)
100+
101+
return null
95102
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ internal class RPCIrServiceProcessor(
2525
}
2626

2727
private fun processService(service: IrClass, context: RPCIrContext) {
28-
val declaration = RPCDeclarationScanner.scanServiceDeclaration(service, context)
28+
val declaration = RPCDeclarationScanner.scanServiceDeclaration(service, context, logger)
2929
RPCStubGenerator(declaration, context, logger).generate()
3030
}
3131
}

0 commit comments

Comments
 (0)