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
@@ -21,7 +21,6 @@ import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl;
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedExternalSignatureResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache;
import org.jetbrains.jet.lang.resolve.java.resolver.FakeOverrideVisibilityResolverImpl;
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver;
@@ -53,7 +52,6 @@ public class InjectorForJavaDescriptorResolver {
private final JavaClassFinderImpl javaClassFinder;
private final TraceBasedExternalSignatureResolver traceBasedExternalSignatureResolver;
private final TraceBasedJavaResolverCache traceBasedJavaResolverCache;
private final FakeOverrideVisibilityResolverImpl fakeOverrideVisibilityResolver;
private final TraceBasedErrorReporter traceBasedErrorReporter;
private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker;
private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
@@ -84,7 +82,6 @@ public class InjectorForJavaDescriptorResolver {
this.javaClassFinder = new JavaClassFinderImpl();
this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver();
this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache();
this.fakeOverrideVisibilityResolver = new FakeOverrideVisibilityResolverImpl();
this.traceBasedErrorReporter = new TraceBasedErrorReporter();
this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker();
this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver();
@@ -113,8 +110,6 @@ public class InjectorForJavaDescriptorResolver {
traceBasedJavaResolverCache.setTrace(bindingTrace);
fakeOverrideVisibilityResolver.setTrace(bindingTrace);
traceBasedErrorReporter.setTrace(bindingTrace);
psiBasedMethodSignatureChecker.setAnnotationResolver(javaAnnotationResolver);
@@ -176,8 +171,8 @@ public class InjectorForJavaDescriptorResolver {
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
javaFunctionResolver.setCache(traceBasedJavaResolverCache);
javaFunctionResolver.setErrorReporter(traceBasedErrorReporter);
javaFunctionResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
javaFunctionResolver.setFakeOverrideVisibilityResolver(fakeOverrideVisibilityResolver);
javaFunctionResolver.setSignatureChecker(psiBasedMethodSignatureChecker);
javaFunctionResolver.setTypeParameterResolver(javaTypeParameterResolver);
javaFunctionResolver.setTypeTransformer(javaTypeTransformer);
@@ -187,8 +182,8 @@ public class InjectorForJavaDescriptorResolver {
javaPropertyResolver.setAnnotationResolver(javaAnnotationResolver);
javaPropertyResolver.setCache(traceBasedJavaResolverCache);
javaPropertyResolver.setErrorReporter(traceBasedErrorReporter);
javaPropertyResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
javaPropertyResolver.setFakeOverrideVisibilityResolver(fakeOverrideVisibilityResolver);
javaPropertyResolver.setTypeTransformer(javaTypeTransformer);
javaSupertypeResolver.setClassResolver(javaClassResolver);
@@ -34,7 +34,6 @@ import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl;
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedExternalSignatureResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache;
import org.jetbrains.jet.lang.resolve.java.resolver.FakeOverrideVisibilityResolverImpl;
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver;
@@ -94,7 +93,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private final JavaClassFinderImpl javaClassFinder;
private final TraceBasedExternalSignatureResolver traceBasedExternalSignatureResolver;
private final TraceBasedJavaResolverCache traceBasedJavaResolverCache;
private final FakeOverrideVisibilityResolverImpl fakeOverrideVisibilityResolver;
private final TraceBasedErrorReporter traceBasedErrorReporter;
private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker;
private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
@@ -155,7 +153,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.javaClassFinder = new JavaClassFinderImpl();
this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver();
this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache();
this.fakeOverrideVisibilityResolver = new FakeOverrideVisibilityResolverImpl();
this.traceBasedErrorReporter = new TraceBasedErrorReporter();
this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker();
this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver();
@@ -239,8 +236,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
traceBasedJavaResolverCache.setTrace(bindingTrace);
fakeOverrideVisibilityResolver.setTrace(bindingTrace);
traceBasedErrorReporter.setTrace(bindingTrace);
psiBasedMethodSignatureChecker.setAnnotationResolver(javaAnnotationResolver);
@@ -367,8 +362,8 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
javaFunctionResolver.setCache(traceBasedJavaResolverCache);
javaFunctionResolver.setErrorReporter(traceBasedErrorReporter);
javaFunctionResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
javaFunctionResolver.setFakeOverrideVisibilityResolver(fakeOverrideVisibilityResolver);
javaFunctionResolver.setSignatureChecker(psiBasedMethodSignatureChecker);
javaFunctionResolver.setTypeParameterResolver(javaTypeParameterResolver);
javaFunctionResolver.setTypeTransformer(javaTypeTransformer);
@@ -378,8 +373,8 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
javaPropertyResolver.setAnnotationResolver(javaAnnotationResolver);
javaPropertyResolver.setCache(traceBasedJavaResolverCache);
javaPropertyResolver.setErrorReporter(traceBasedErrorReporter);
javaPropertyResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
javaPropertyResolver.setFakeOverrideVisibilityResolver(fakeOverrideVisibilityResolver);
javaPropertyResolver.setTypeTransformer(javaTypeTransformer);
javaSupertypeResolver.setClassResolver(javaClassResolver);
@@ -1,22 +0,0 @@
package org.jetbrains.jet.lang.resolve.java.resolver;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.OverridingUtil;
import javax.inject.Inject;
public class FakeOverrideVisibilityResolverImpl implements FakeOverrideVisibilityResolver {
private BindingTrace trace;
@Inject
public void setTrace(BindingTrace trace) {
this.trace = trace;
}
@Override
public void resolveUnknownVisibilityForMember(@NotNull CallableMemberDescriptor descriptor) {
OverridingUtil.resolveUnknownVisibilityForMember(null, descriptor, trace);
}
}
@@ -17,7 +17,11 @@
package org.jetbrains.jet.lang.resolve.java.resolver;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
import org.jetbrains.jet.lang.psi.JetDeclaration;
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.util.slicedmap.BasicWritableSlice;
@@ -26,6 +30,8 @@ import org.jetbrains.jet.util.slicedmap.WritableSlice;
import javax.inject.Inject;
import static org.jetbrains.jet.lang.diagnostics.Errors.CANNOT_INFER_VISIBILITY;
public class TraceBasedErrorReporter implements ErrorReporter {
public static final WritableSlice<AbiVersionErrorLocation, Integer> ABI_VERSION_ERRORS =
new BasicWritableSlice<AbiVersionErrorLocation, Integer>(Slices.ONLY_REWRITE_TO_EQUAL, true);
@@ -41,6 +47,14 @@ public class TraceBasedErrorReporter implements ErrorReporter {
trace.record(ABI_VERSION_ERRORS, new AbiVersionErrorLocation(fqName, file), actualVersion);
}
@Override
public void reportCannotInferVisibility(@NotNull CallableMemberDescriptor descriptor) {
PsiElement element = BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), descriptor);
if (element instanceof JetDeclaration) {
trace.report(CANNOT_INFER_VISIBILITY.on((JetDeclaration) element));
}
}
public static final class AbiVersionErrorLocation {
@NotNull
private final FqName classFqName;