diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java index d3008c4364e..7c8ec96c3a2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -307,14 +307,19 @@ public class OverrideResolver { else { List nonAbstractManyImpl = Lists.newArrayList(); Set filteredOverriddenDeclarations = OverridingUtil.filterOverrides(Sets.newHashSet(overriddenDeclarations)); + boolean allSuperAbstract = true; for (CallableMemberDescriptor overridden : filteredOverriddenDeclarations) { if (overridden.getModality() != Modality.ABSTRACT) { nonAbstractManyImpl.add(overridden); + allSuperAbstract = false; } } if (nonAbstractManyImpl.size() > 1) { manyImpl.addAll(nonAbstractManyImpl); } + else if (allSuperAbstract) { + abstractNoImpl.addAll(overriddenDeclarations); + } } } } diff --git a/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.jet b/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.jet index ab30bf1408e..3973a6e311e 100644 --- a/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.jet +++ b/compiler/testData/diagnostics/tests/override/MultipleDefaultsInSupertypesNoExplicitOverride.jet @@ -6,5 +6,5 @@ trait Y { fun foo(a : Int = 1) } -class Z1 : X, Y {} // BUG -object Z1O : X, Y {} // BUG +class Z1 : X, Y {} // BUG +object Z1O : X, Y {} // BUG diff --git a/compiler/testData/diagnostics/tests/override/ToAbstractMembersFromSuper-kt1996.jet b/compiler/testData/diagnostics/tests/override/ToAbstractMembersFromSuper-kt1996.jet new file mode 100644 index 00000000000..80789f796af --- /dev/null +++ b/compiler/testData/diagnostics/tests/override/ToAbstractMembersFromSuper-kt1996.jet @@ -0,0 +1,11 @@ +// http://youtrack.jetbrains.com/issue/KT-1996 + +trait Foo { + fun foo(): Unit +} + +trait Bar { + fun foo(): Unit +} + +class Baz : Foo, Bar