package example; fun any(a : Any) {} fun notAnExpression() { any(super) // not an expression if (super) {} else {} // not an expression val x = super // not an expression when (1) { super -> 1 // not an expression } } trait T { fun foo() {} } open class C() { fun bar() {} } class A() : C(), T { fun test() { super super super.foo() super.foo() super.bar() super@A.foo() super@A.bar() super<E>.bar() super<E>@A.bar() super<Int>.foo() super<>.foo() super<() -> Unit>.foo() super<#()>.foo() super@B.foo() super@B.bar() } class B : T { fun test() { super.foo(); super<C>.bar() super@A.bar() super@A.foo() super@B.foo() super<C>@B.foo() super.foo() super super } } } fun foo() { super super.foo() super.foo() } trait G { fun foo() {} } class CG : G { fun test() { super.foo() // OK super>.foo() // Warning super<G<E>>.foo() // Error super<G>.foo() // Error } } // The case when no supertype is resolved class ERROR() : UR { fun test() { super.foo() } } // No supertype at all class A1 { fun test() { super.equals(null) } }