kotlinx.coroutines
kotlinx.coroutines copied to clipboard
Gradually introduce SubclassOptInRequired into our codebase
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-subclass-opt-in-required/
Historically, we have multiple interfaces that are not designed for external implementation, , but are not sealed for various reasons (including historical ones):
Jobshould not be extended externallyDeferredandCompletableDeferredshould not be extended externallyChannelprobably should not be extended externally- It is not mentioned in the documentation, and it's impossible to fulfil the select's contract with a hand-rolled implementation
- Yet it is possible to implement it with a delegation, potentially closing the possibility of adding new abstract members to the interface
Flow,SharedFlow, andStateFloware unstable/experimental for inheritanceCloseableCoroutineDispatcheris unstable for inheritanceCancellableContinuationis an interface not ready to be extended
It would be nice to adopt the SubclassOptInRequired (available from 1.9.0) in the library to provide explicit programmatic warnings/errors and to prevent issues like https://github.com/Kotlin/kotlinx.coroutines/issues/3729
For "prohibited to implement" interfaces we can introduce the new annotation with a warning (or maybe even an error) and, in the next major release, make the annotation internal itself, so it would be much harder to opt-in
Yet it is possible to implement [a Channel] with a delegation
Yep, even a naive search yields a couple of places: https://grep.app/search?q=by%20channel&filter[lang][0]=Kotlin