Don't report "cannot infer visibility" on property accessors

If the diagnostic is already reported on the corresponding property, no need to
report it again for accessors
This commit is contained in:
Alexander Udalov
2014-05-21 18:49:12 +04:00
parent 9760f30c99
commit db25f568dc
7 changed files with 61 additions and 34 deletions
@@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.descriptors.impl;
import kotlin.Function0;
import kotlin.Function1;
import kotlin.Unit;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
@@ -225,13 +224,7 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase {
@Override
@SuppressWarnings("unchecked")
public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) {
OverridingUtil.resolveUnknownVisibilityForMember(fakeOverride, new Function1<CallableMemberDescriptor, Unit>() {
@Override
public Unit invoke(@NotNull CallableMemberDescriptor descriptor) {
// Do nothing
return Unit.VALUE;
}
});
OverridingUtil.resolveUnknownVisibilityForMember(fakeOverride, null);
result.add((D) fakeOverride);
}
@@ -367,7 +367,7 @@ public class OverridingUtil {
public static void resolveUnknownVisibilityForMember(
@NotNull CallableMemberDescriptor memberDescriptor,
@NotNull Function1<CallableMemberDescriptor, Unit> cannotInferVisibility
@Nullable Function1<CallableMemberDescriptor, Unit> cannotInferVisibility
) {
for (CallableMemberDescriptor descriptor : memberDescriptor.getOverriddenDescriptors()) {
if (descriptor.getVisibility() == Visibilities.INHERITED) {
@@ -379,11 +379,13 @@ public class OverridingUtil {
return;
}
Visibility visibilityToInherit = computeVisibilityToInherit(memberDescriptor, cannotInferVisibility);
Visibility maxVisibility = computeVisibilityToInherit(memberDescriptor, cannotInferVisibility);
Visibility visibilityToInherit = maxVisibility == null ? Visibilities.PUBLIC : maxVisibility;
if (memberDescriptor instanceof PropertyDescriptorImpl) {
((PropertyDescriptorImpl) memberDescriptor).setVisibility(visibilityToInherit);
for (PropertyAccessorDescriptor accessor : ((PropertyDescriptor) memberDescriptor).getAccessors()) {
resolveUnknownVisibilityForMember(accessor, cannotInferVisibility);
// If we couldn't infer visibility for property, the diagnostic is already reported, no need to report it again on accessors
resolveUnknownVisibilityForMember(accessor, maxVisibility == null ? null : cannotInferVisibility);
}
}
else if (memberDescriptor instanceof FunctionDescriptorImpl) {
@@ -395,15 +397,17 @@ public class OverridingUtil {
}
}
@NotNull
@Nullable
private static Visibility computeVisibilityToInherit(
@NotNull CallableMemberDescriptor memberDescriptor,
@NotNull Function1<CallableMemberDescriptor, Unit> cannotInferVisibility
@Nullable Function1<CallableMemberDescriptor, Unit> cannotInferVisibility
) {
Visibility maxVisibility = findMaxVisibility(memberDescriptor.getOverriddenDescriptors());
if (maxVisibility == null) {
cannotInferVisibility.invoke(memberDescriptor);
return Visibilities.PUBLIC;
if (cannotInferVisibility != null) {
cannotInferVisibility.invoke(memberDescriptor);
}
return null;
}
if (memberDescriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
return maxVisibility;