KT-316 Members of traits must be open by default
This commit is contained in:
@@ -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() {}
|
||||
}
|
||||
Reference in New Issue
Block a user