Do not normalize visibilities for fake overrides
#KT-4525 Fixed
This commit is contained in:
@@ -534,27 +534,38 @@ public class OverridingUtil {
|
||||
return;
|
||||
}
|
||||
|
||||
Visibility visibility = findMaxVisibility(memberDescriptor.getOverriddenDescriptors());
|
||||
if (visibility == null) {
|
||||
sink.cannotInferVisibility(memberDescriptor);
|
||||
visibility = Visibilities.PUBLIC;
|
||||
}
|
||||
|
||||
Visibility visibilityToInherit = computeVisibilityToInherit(memberDescriptor, sink);
|
||||
if (memberDescriptor instanceof PropertyDescriptorImpl) {
|
||||
((PropertyDescriptorImpl) memberDescriptor).setVisibility(visibility.normalize());
|
||||
((PropertyDescriptorImpl) memberDescriptor).setVisibility(visibilityToInherit);
|
||||
for (PropertyAccessorDescriptor accessor : ((PropertyDescriptor) memberDescriptor).getAccessors()) {
|
||||
resolveUnknownVisibilityForMember(accessor, sink);
|
||||
}
|
||||
}
|
||||
else if (memberDescriptor instanceof FunctionDescriptorImpl) {
|
||||
((FunctionDescriptorImpl) memberDescriptor).setVisibility(visibility.normalize());
|
||||
((FunctionDescriptorImpl) memberDescriptor).setVisibility(visibilityToInherit);
|
||||
}
|
||||
else {
|
||||
assert memberDescriptor instanceof PropertyAccessorDescriptorImpl;
|
||||
((PropertyAccessorDescriptorImpl) memberDescriptor).setVisibility(visibility.normalize());
|
||||
((PropertyAccessorDescriptorImpl) memberDescriptor).setVisibility(visibilityToInherit);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Visibility computeVisibilityToInherit(
|
||||
@NotNull CallableMemberDescriptor memberDescriptor,
|
||||
@NotNull NotInferredVisibilitySink sink
|
||||
) {
|
||||
Visibility maxVisibility = findMaxVisibility(memberDescriptor.getOverriddenDescriptors());
|
||||
if (maxVisibility == null) {
|
||||
sink.cannotInferVisibility(memberDescriptor);
|
||||
return Visibilities.PUBLIC;
|
||||
}
|
||||
if (memberDescriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
return maxVisibility;
|
||||
}
|
||||
return maxVisibility.normalize();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Visibility findMaxVisibility(@NotNull Collection<? extends CallableMemberDescriptor> descriptors) {
|
||||
if (descriptors.isEmpty()) {
|
||||
|
||||
Reference in New Issue
Block a user