Get rid of poorly named NotInferredVisibilitySink

Also make TraceBasedErrorReporter invoke OverrideResolver to report "cannot
infer visibility", because there's some additional logic there
This commit is contained in:
Alexander Udalov
2014-04-15 20:37:52 +04:00
parent 5ae339d940
commit 4c973b79ee
7 changed files with 51 additions and 45 deletions
@@ -16,6 +16,8 @@
package org.jetbrains.jet.lang.resolve.java.resolver;
import kotlin.Function1;
import kotlin.Unit;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
@@ -56,10 +58,11 @@ public final class DescriptorResolverUtils {
@Override
@SuppressWarnings("unchecked")
public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) {
OverridingUtil.resolveUnknownVisibilityForMember(fakeOverride, new OverridingUtil.NotInferredVisibilitySink() {
OverridingUtil.resolveUnknownVisibilityForMember(fakeOverride, new Function1<CallableMemberDescriptor, Unit>() {
@Override
public void cannotInferVisibility(@NotNull CallableMemberDescriptor descriptor) {
public Unit invoke(@NotNull CallableMemberDescriptor descriptor) {
errorReporter.reportCannotInferVisibility(descriptor);
return Unit.VALUE;
}
});
result.add((D) fakeOverride);
@@ -18,10 +18,10 @@ 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.*;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.Annotations;
import org.jetbrains.jet.lang.resolve.DescriptorFactory;
import org.jetbrains.jet.lang.resolve.OverridingUtil;
@@ -37,7 +37,10 @@ import org.jetbrains.jet.storage.NotNullLazyValue;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.utils.Printer;
import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase {
private final ClassKind kind;
@@ -222,10 +225,11 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase {
@Override
@SuppressWarnings("unchecked")
public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) {
OverridingUtil.resolveUnknownVisibilityForMember(fakeOverride, new OverridingUtil.NotInferredVisibilitySink() {
OverridingUtil.resolveUnknownVisibilityForMember(fakeOverride, new Function1<CallableMemberDescriptor, Unit>() {
@Override
public void cannotInferVisibility(@NotNull CallableMemberDescriptor descriptor) {
public Unit invoke(@NotNull CallableMemberDescriptor descriptor) {
// Do nothing
return Unit.VALUE;
}
});
result.add((D) fakeOverride);
@@ -19,6 +19,8 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.base.Predicate;
import com.google.common.collect.*;
import com.intellij.util.containers.ContainerUtil;
import kotlin.Function1;
import kotlin.Unit;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
@@ -365,11 +367,11 @@ public class OverridingUtil {
public static void resolveUnknownVisibilityForMember(
@NotNull CallableMemberDescriptor memberDescriptor,
@NotNull NotInferredVisibilitySink sink
@NotNull Function1<CallableMemberDescriptor, Unit> cannotInferVisibility
) {
for (CallableMemberDescriptor descriptor : memberDescriptor.getOverriddenDescriptors()) {
if (descriptor.getVisibility() == Visibilities.INHERITED) {
resolveUnknownVisibilityForMember(descriptor, sink);
resolveUnknownVisibilityForMember(descriptor, cannotInferVisibility);
}
}
@@ -377,11 +379,11 @@ public class OverridingUtil {
return;
}
Visibility visibilityToInherit = computeVisibilityToInherit(memberDescriptor, sink);
Visibility visibilityToInherit = computeVisibilityToInherit(memberDescriptor, cannotInferVisibility);
if (memberDescriptor instanceof PropertyDescriptorImpl) {
((PropertyDescriptorImpl) memberDescriptor).setVisibility(visibilityToInherit);
for (PropertyAccessorDescriptor accessor : ((PropertyDescriptor) memberDescriptor).getAccessors()) {
resolveUnknownVisibilityForMember(accessor, sink);
resolveUnknownVisibilityForMember(accessor, cannotInferVisibility);
}
}
else if (memberDescriptor instanceof FunctionDescriptorImpl) {
@@ -396,11 +398,11 @@ public class OverridingUtil {
@NotNull
private static Visibility computeVisibilityToInherit(
@NotNull CallableMemberDescriptor memberDescriptor,
@NotNull NotInferredVisibilitySink sink
@NotNull Function1<CallableMemberDescriptor, Unit> cannotInferVisibility
) {
Visibility maxVisibility = findMaxVisibility(memberDescriptor.getOverriddenDescriptors());
if (maxVisibility == null) {
sink.cannotInferVisibility(memberDescriptor);
cannotInferVisibility.invoke(memberDescriptor);
return Visibilities.PUBLIC;
}
if (memberDescriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
@@ -450,10 +452,6 @@ public class OverridingUtil {
void conflict(@NotNull CallableMemberDescriptor fromSuper, @NotNull CallableMemberDescriptor fromCurrent);
}
public interface NotInferredVisibilitySink {
void cannotInferVisibility(@NotNull CallableMemberDescriptor descriptor);
}
public static class OverrideCompatibilityInfo {
public enum Result {