KT-316 Members of traits must be open by default
This commit is contained in:
@@ -190,9 +190,12 @@ public class ClassDescriptorResolver {
|
|||||||
}
|
}
|
||||||
Modality defaultModality;
|
Modality defaultModality;
|
||||||
if (containingDescriptor instanceof ClassDescriptor) {
|
if (containingDescriptor instanceof ClassDescriptor) {
|
||||||
boolean isDefinitelyAbstract = ((ClassDescriptor) containingDescriptor).getKind() == ClassKind.TRAIT && function.getBodyExpression() == null;
|
boolean isTrait = ((ClassDescriptor) containingDescriptor).getKind() == ClassKind.TRAIT;
|
||||||
defaultModality = isDefinitelyAbstract ? Modality.ABSTRACT : Modality.FINAL;
|
boolean isDefinitelyAbstract = isTrait && function.getBodyExpression() == null;
|
||||||
} else {
|
Modality basicModality = isTrait ? Modality.OPEN : Modality.FINAL;
|
||||||
|
defaultModality = isDefinitelyAbstract ? Modality.ABSTRACT : basicModality;
|
||||||
|
}
|
||||||
|
else {
|
||||||
defaultModality = Modality.FINAL;
|
defaultModality = Modality.FINAL;
|
||||||
}
|
}
|
||||||
Modality modality = resolveModalityFromModifiers(function.getModifierList(), defaultModality);
|
Modality modality = resolveModalityFromModifiers(function.getModifierList(), defaultModality);
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ public class OverridingUtil {
|
|||||||
public static <D extends CallableDescriptor> Set<D> filterOverrides(Set<D> candidateSet) {
|
public static <D extends CallableDescriptor> Set<D> filterOverrides(Set<D> candidateSet) {
|
||||||
Set<D> candidates = Sets.newLinkedHashSet(candidateSet);
|
Set<D> candidates = Sets.newLinkedHashSet(candidateSet);
|
||||||
for (D descriptor : candidateSet) {
|
for (D descriptor : candidateSet) {
|
||||||
candidates.removeAll(descriptor.getOverriddenDescriptors());
|
Set<CallableDescriptor> overriddenDescriptors = Sets.newHashSet();
|
||||||
|
getAllOverriddenDescriptors(descriptor.getOriginal(), overriddenDescriptors);
|
||||||
|
candidates.removeAll(overriddenDescriptors);
|
||||||
}
|
}
|
||||||
return candidates;
|
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