Kotlin / kotlinx-rpc

Add asynchronous RPC services to your multiplatform applications.
https://kotlin.github.io/kotlinx-rpc/
Apache License 2.0
753 stars 17 forks source link

Improve feedback when non-suspending function included in RpcService #231

Open chris-hatton opened 6 days ago

chris-hatton commented 6 days ago

By their nature; all member-functions of RpcService implementations should be suspending.

During development, it may be a common mistake to omit suspend, in which case the developer-user is faced with a potentially confusing error at compile time:

e: org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during IR lowering
File being compiled: /Users/user/Projects/project/shared/src/commonMain/kotlin/com/project/shared/domain/service/SomeService.kt
The root cause java.lang.RuntimeException was thrown at: org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:47)
...
<long stack trace>

Describe the solution you'd like Compiler plugin or KSP part of kotlinx.rpc should detect the presence of non suspend functions and throw a more meaningful error e.g:

The function 'getUser' in com.company.project.service.UserService is not suspending, only suspending functions are allowed in RPC service implementations.
Mr3zee commented 4 days ago

Hey, @chris-hatton ! Thanks for suggestion! We are planning to introduce more user friendly checkers, including this one as one for the most needed