| // WITH_STDLIB | |
| // ISSUE: KT-76301 | |
| // MODULE: lib | |
| // FILE: lib.kt | |
| import kotlin.contracts.contract | |
| import kotlin.contracts.ExperimentalContracts | |
| @OptIn(ExperimentalContracts::class) | |
| inline fun <T, reified R> Refinement<T, R>.validate(value: T): Boolean { | |
| contract { | |
| returns() implies (value is R) | |
| } | |
| return isValid(value) | |
| } | |
| class Refinement<T, R> { | |
| fun isValid(value: T): Boolean { | |
| return value is String | |
| } | |
| } | |
| fun test_fromSource(r: Refinement<Any, String>, x: Any): String { | |
| r.validate(x) | |
| return x | |
| } | |
| // MODULE: app(lib) | |
| // FILE: app.kt | |
| fun test_fromLib(r: Refinement<Any, String>, x: Any): String { | |
| r.validate(x) | |
| return x | |
| } | |
| fun box(): String { | |
| val r = Refinement<Any, String>() | |
| return test_fromSource(r, "O") + test_fromLib(r, "K") | |
| } | |