// FILE: Named.java public interface Named { String getName(); } // FILE: Psi.java public interface Psi { } // FILE: Member.java public interface Member extends Psi { } // FILE: TypeParametersOwner.java import java.util.List; public interface TypeParametersOwner { public List getTypeParameters(); } // FILE: Klass.java public interface Klass extends TypeParametersOwner { } // FILE: Test.kt fun List.single(): String = "" fun List.single(): Int = 2 fun listOf(): List {} public open class LightMember : Member, Light() { override fun getName(): String = "Light" } public class LightClassWrapper : Light(), Klass { fun test() = typeParameters.single() } public abstract class Light : Field, TypeParametersOwner { fun getTypeParameters() = listOf() } public interface Field : Named public class LightField : LightMember(), Field { fun test(other: Any?) { if (other is LightField<*>) { other.name } } }