KT-316 Members of traits must be open by default

This commit is contained in:
Andrey Breslav
2011-09-22 16:20:00 +04:00
parent 4a7c211abe
commit e0548d54db
3 changed files with 19 additions and 4 deletions
@@ -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);
@@ -28,7 +28,9 @@ public class OverridingUtil {
public static <D extends CallableDescriptor> Set<D> filterOverrides(Set<D> candidateSet) {
Set<D> candidates = Sets.newLinkedHashSet(candidateSet);
for (D descriptor : candidateSet) {
candidates.removeAll(descriptor.getOverriddenDescriptors());
Set<CallableDescriptor> overriddenDescriptors = Sets.newHashSet();
getAllOverriddenDescriptors(descriptor.getOriginal(), overriddenDescriptors);
candidates.removeAll(overriddenDescriptors);
}
return candidates;
}
@@ -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() {}
}