From 448260fc3e0161e2aaa873fa2000568ce5f0e72e Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Tue, 15 May 2012 22:45:11 +0400 Subject: [PATCH] KT-1996 Missing ABSTRACT_MEMBER_NOT_IMPLEMENTED when two supertypes contains same abstract member === trait Foo { fun foo(): Unit } trait Bar { fun foo(): Unit } class Baz : Foo, Bar // no error here === #KT-1996 fixed --- .../jetbrains/jet/lang/resolve/OverrideResolver.java | 5 +++++ ...MultipleDefaultsInSupertypesNoExplicitOverride.jet | 4 ++-- .../override/ToAbstractMembersFromSuper-kt1996.jet | 11 +++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/override/ToAbstractMembersFromSuper-kt1996.jet 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