| // FILE: lib.kt |
| package foo |
| import kotlin.test.* |
| |
| // CHECK_NOT_CALLED: typePredicate |
| |
| interface TypePredicate { |
| operator fun invoke(x: Any): Boolean |
| } |
| |
| inline fun <reified T> typePredicate(): TypePredicate = |
| object : TypePredicate { |
| override fun invoke(x: Any): Boolean = x is T |
| } |
| |
| // FILE: main.kt |
| package foo |
| import kotlin.test.* |
| |
| // CHECK_NOT_CALLED: typePredicate |
| |
| open class A |
| |
| class B |
| |
| class C : A() |
| |
| fun box(): String { |
| val isA = typePredicate<A>() |
| val a: Any = A() |
| val b: Any = B() |
| val c: Any = C() |
| |
| assertEquals(true, isA(a), "isA(a)") |
| assertEquals(false, isA(b), "isA(b)") |
| assertEquals(true, isA(c), "isA(c)") |
| |
| return "OK" |
| } |