-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Closed
Labels
Description
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 #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
IsakTheHacker