blob: ab5f594fdf0cbbcc6e306c843a577fffa579624b [file]
// TARGET_BACKEND: JVM_IR
// ISSUE: KT-74999
// WITH_STDLIB
// FILE: GraphQlTester.java
public interface GraphQlTester {
public static interface Traversable {}
public static interface Entity<D, S extends Entity<D, S>> extends Traversable {
<T extends S> T isEqualTo(Object expected);
}
public static interface Path extends Traversable {
Path valueIsNull();
<E> GraphQlTester.Entity<E, ?> entity(Class<E> entityType);
}
}
// FILE: test.kt
inline fun <reified U> GraphQlTester.Path.isEqualTo(expected: U?) {
if (null == expected) valueIsNull()
// Type parameter T of isEqualTo is inferred to Nothing
else entity(U::class.java).isEqualTo(expected)
}
open class EntityImpl<D> : GraphQlTester.Entity<D, EntityImpl<D>> {
override fun <T : EntityImpl<D>> isEqualTo(expected: Any?): T = this as T
}
class PathImpl : GraphQlTester.Path {
override fun valueIsNull() = this
override fun <E> entity(entityType: Class<E>): GraphQlTester.Entity<E, *> =
EntityImpl<E>()
}
fun box(): String {
PathImpl().isEqualTo(42)
return "OK"
}