From e0548d54db44f79233ec1573cada149972aeb28c Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 22 Sep 2011 16:20:00 +0400 Subject: [PATCH] KT-316 Members of traits must be open by default --- .../jet/lang/resolve/ClassDescriptorResolver.java | 9 ++++++--- .../org/jetbrains/jet/lang/resolve/OverridingUtil.java | 4 +++- .../checkerWithErrorTypes/quick/regressions/kt316.jet | 10 ++++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 idea/testData/checkerWithErrorTypes/quick/regressions/kt316.jet diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java index 0626401658c..cd37ef89117 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java @@ -190,9 +190,12 @@ public class ClassDescriptorResolver { } Modality defaultModality; if (containingDescriptor instanceof ClassDescriptor) { - boolean isDefinitelyAbstract = ((ClassDescriptor) containingDescriptor).getKind() == ClassKind.TRAIT && function.getBodyExpression() == null; - defaultModality = isDefinitelyAbstract ? Modality.ABSTRACT : Modality.FINAL; - } else { + boolean isTrait = ((ClassDescriptor) containingDescriptor).getKind() == ClassKind.TRAIT; + boolean isDefinitelyAbstract = isTrait && function.getBodyExpression() == null; + Modality basicModality = isTrait ? Modality.OPEN : Modality.FINAL; + defaultModality = isDefinitelyAbstract ? Modality.ABSTRACT : basicModality; + } + else { defaultModality = Modality.FINAL; } Modality modality = resolveModalityFromModifiers(function.getModifierList(), defaultModality); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java index c91031b7624..5aea65d7aad 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java @@ -28,7 +28,9 @@ public class OverridingUtil { public static Set filterOverrides(Set candidateSet) { Set candidates = Sets.newLinkedHashSet(candidateSet); for (D descriptor : candidateSet) { - candidates.removeAll(descriptor.getOverriddenDescriptors()); + Set overriddenDescriptors = Sets.newHashSet(); + getAllOverriddenDescriptors(descriptor.getOriginal(), overriddenDescriptors); + candidates.removeAll(overriddenDescriptors); } return candidates; } diff --git a/idea/testData/checkerWithErrorTypes/quick/regressions/kt316.jet b/idea/testData/checkerWithErrorTypes/quick/regressions/kt316.jet new file mode 100644 index 00000000000..a794d90d035 --- /dev/null +++ b/idea/testData/checkerWithErrorTypes/quick/regressions/kt316.jet @@ -0,0 +1,10 @@ +// KT-316 Members of traits must be open by default + +trait B { + fun bar() {} + fun foo() {} +} + +open class A() : B{ + override fun foo() {} +} \ No newline at end of file