Refactor OverridingUtil.resolveUnknownVisibilities

Get rid of dependency on BindingTrace, move the corresponding error reporting
logic to OverrideResolver
This commit is contained in:
Alexander Udalov
2013-08-21 21:08:34 +04:00
parent 6ca71349f8
commit 8400d2b8cf
14 changed files with 79 additions and 115 deletions
@@ -66,7 +66,7 @@ public final class DescriptorResolverUtils {
@NotNull Collection<D> membersFromSupertypes,
@NotNull Collection<D> membersFromCurrent,
@NotNull ClassDescriptor classDescriptor,
@NotNull final FakeOverrideVisibilityResolver visibilityResolver
@NotNull final ErrorReporter errorReporter
) {
final Set<D> result = new HashSet<D>();
@@ -76,7 +76,12 @@ public final class DescriptorResolverUtils {
@Override
@SuppressWarnings("unchecked")
public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) {
visibilityResolver.resolveUnknownVisibilityForMember(fakeOverride);
OverridingUtil.resolveUnknownVisibilityForMember(fakeOverride, new OverridingUtil.NotInferredVisibilitySink() {
@Override
public void cannotInferVisibility(@NotNull CallableMemberDescriptor descriptor) {
errorReporter.reportCannotInferVisibility(descriptor);
}
});
result.add((D) fakeOverride);
}
@@ -18,8 +18,11 @@ package org.jetbrains.jet.lang.resolve.java.resolver;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
public interface ErrorReporter {
void reportIncompatibleAbiVersion(@NotNull FqName fqName, @NotNull VirtualFile file, int actualVersion);
void reportCannotInferVisibility(@NotNull CallableMemberDescriptor descriptor);
}
@@ -1,24 +0,0 @@
/*
* Copyright 2010-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.jet.lang.resolve.java.resolver;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
public interface FakeOverrideVisibilityResolver {
void resolveUnknownVisibilityForMember(@NotNull CallableMemberDescriptor descriptor);
}
@@ -47,7 +47,7 @@ public final class JavaFunctionResolver {
private JavaValueParameterResolver valueParameterResolver;
private JavaAnnotationResolver annotationResolver;
private ExternalSignatureResolver externalSignatureResolver;
private FakeOverrideVisibilityResolver fakeOverrideVisibilityResolver;
private ErrorReporter errorReporter;
private MethodSignatureChecker signatureChecker;
@Inject
@@ -81,8 +81,8 @@ public final class JavaFunctionResolver {
}
@Inject
public void setFakeOverrideVisibilityResolver(FakeOverrideVisibilityResolver fakeOverrideVisibilityResolver) {
this.fakeOverrideVisibilityResolver = fakeOverrideVisibilityResolver;
public void setErrorReporter(ErrorReporter errorReporter) {
this.errorReporter = errorReporter;
}
@Inject
@@ -211,8 +211,7 @@ public final class JavaFunctionResolver {
Collection<SimpleFunctionDescriptor> functionsFromSupertypes = getFunctionsFromSupertypes(methodName, classDescriptor);
functions.addAll(resolveOverrides(methodName, functionsFromSupertypes, functionsFromCurrent, classDescriptor,
fakeOverrideVisibilityResolver));
functions.addAll(resolveOverrides(methodName, functionsFromSupertypes, functionsFromCurrent, classDescriptor, errorReporter));
}
if (isEnumClassObject(owner)) {
@@ -41,10 +41,7 @@ public final class JavaPropertyResolver {
private JavaResolverCache cache;
private JavaAnnotationResolver annotationResolver;
private ExternalSignatureResolver externalSignatureResolver;
private FakeOverrideVisibilityResolver fakeOverrideVisibilityResolver;
public JavaPropertyResolver() {
}
private ErrorReporter errorReporter;
@Inject
public void setTypeTransformer(@NotNull JavaTypeTransformer javaTypeTransformer) {
@@ -67,8 +64,8 @@ public final class JavaPropertyResolver {
}
@Inject
public void setFakeOverrideVisibilityResolver(FakeOverrideVisibilityResolver fakeOverrideVisibilityResolver) {
this.fakeOverrideVisibilityResolver = fakeOverrideVisibilityResolver;
public void setErrorReporter(ErrorReporter errorReporter) {
this.errorReporter = errorReporter;
}
@NotNull
@@ -93,7 +90,7 @@ public final class JavaPropertyResolver {
Collection<PropertyDescriptor> propertiesFromSupertypes = getPropertiesFromSupertypes(propertyName, classDescriptor);
properties.addAll(resolveOverrides(propertyName, propertiesFromSupertypes, propertiesFromCurrent, classDescriptor,
fakeOverrideVisibilityResolver));
errorReporter));
}
properties.addAll(propertiesFromCurrent);