diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmDefaultSuperCallChecker.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmDefaultSuperCallChecker.kt index 4cad15d0e58..9e2efb317c8 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmDefaultSuperCallChecker.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmDefaultSuperCallChecker.kt @@ -25,11 +25,8 @@ class JvmDefaultSuperCallChecker : CallChecker { val resultingDescriptor = resolvedCall.resultingDescriptor as? CallableMemberDescriptor ?: return if (!resultingDescriptor.hasJvmDefaultAnnotation()) return - val containingDeclaration = DescriptorUtils.unwrapFakeOverrideToAnyDeclaration(resultingDescriptor).containingDeclaration - if (DescriptorUtils.isInterface(containingDeclaration) || - DescriptorUtils.isAnnotationClass(containingDeclaration) - ) { + if (DescriptorUtils.isInterface(resultingDescriptor.containingDeclaration)) { context.trace.report(ErrorsJvm.USAGE_OF_JVM_DEFAULT_THROUGH_SUPER_CALL.on(reportOn)) } } -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.kt index 2d094b78a73..0bf239995dc 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.kt @@ -27,12 +27,36 @@ open class Foo2 : B open class Bar : Foo2() { override fun test() { - super.test() + super.test() } } -class Bar2 : Bar() { +open class Bar2 : Bar() { override fun test() { super.test() } +} + +class ManySupers: Foo2(), B { + fun foo() { + super.test() + super<B>.test() + super.test() + } +} + +class ManySupers2: Foo2(), C { + fun foo() { + super.test() + super.test() + super.test() + } +} + +class ManySupers3: Bar2(), C { + fun foo() { + super.test() + super.test() + super.test() + } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.txt index 81770418aa4..6b2cd424ce2 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.txt @@ -22,7 +22,7 @@ public open class Bar : Foo2 { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } -public final class Bar2 : Bar { +public open class Bar2 : Bar { public constructor Bar2() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int @@ -52,3 +52,30 @@ public open class Foo2 : B { @kotlin.jvm.JvmDefault public open override /*1*/ /*fake_override*/ fun test(): kotlin.Unit public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } + +public final class ManySupers : Foo2, B { + public constructor ManySupers() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + @kotlin.jvm.JvmDefault public open override /*2*/ /*fake_override*/ fun test(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class ManySupers2 : Foo2, C { + public constructor ManySupers2() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + @kotlin.jvm.JvmDefault public open override /*2*/ /*fake_override*/ fun test(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class ManySupers3 : Bar2, C { + public constructor ManySupers3() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun test(): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +}