Remove BindingTrace from Java function and property resolvers

Extract FakeOverrideVisibilityResolver which invokes OverrideResolver with the
trace
This commit is contained in:
Alexander Udalov
2013-08-23 18:58:10 +04:00
parent 480ef9ea66
commit d34a6d85e7
11 changed files with 136 additions and 29 deletions
@@ -21,6 +21,7 @@ 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.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.PsiClassFinderImpl;
import org.jetbrains.jet.lang.resolve.java.vfilefinder.VirtualFileFinder;
@@ -48,6 +49,7 @@ public class InjectorForJavaDescriptorResolver {
private final JavaClassFinderImpl javaClassFinder;
private final TraceBasedExternalSignatureResolver traceBasedExternalSignatureResolver;
private final TraceBasedJavaResolverCache traceBasedJavaResolverCache;
private final FakeOverrideVisibilityResolverImpl fakeOverrideVisibilityResolver;
private final JavaDescriptorResolver javaDescriptorResolver;
private final PsiClassFinderImpl psiClassFinder;
private final VirtualFileFinder virtualFileFinder;
@@ -74,6 +76,7 @@ public class InjectorForJavaDescriptorResolver {
this.javaClassFinder = new JavaClassFinderImpl();
this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver();
this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache();
this.fakeOverrideVisibilityResolver = new FakeOverrideVisibilityResolverImpl();
this.javaDescriptorResolver = new JavaDescriptorResolver();
this.psiClassFinder = new PsiClassFinderImpl();
this.virtualFileFinder = com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class);
@@ -97,6 +100,8 @@ public class InjectorForJavaDescriptorResolver {
traceBasedJavaResolverCache.setTrace(bindingTrace);
fakeOverrideVisibilityResolver.setTrace(bindingTrace);
this.javaDescriptorResolver.setClassResolver(javaClassResolver);
this.javaDescriptorResolver.setConstructorResolver(javaConstructorResolver);
this.javaDescriptorResolver.setFunctionResolver(javaFunctionResolver);
@@ -126,7 +131,7 @@ public class InjectorForJavaDescriptorResolver {
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
javaFunctionResolver.setCache(traceBasedJavaResolverCache);
javaFunctionResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
javaFunctionResolver.setTrace(bindingTrace);
javaFunctionResolver.setFakeOverrideVisibilityResolver(fakeOverrideVisibilityResolver);
javaFunctionResolver.setTypeParameterResolver(javaTypeParameterResolver);
javaFunctionResolver.setTypeTransformer(javaTypeTransformer);
javaFunctionResolver.setValueParameterResolver(javaValueParameterResolver);
@@ -164,7 +169,7 @@ public class InjectorForJavaDescriptorResolver {
javaPropertyResolver.setAnnotationResolver(javaAnnotationResolver);
javaPropertyResolver.setCache(traceBasedJavaResolverCache);
javaPropertyResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
javaPropertyResolver.setTrace(bindingTrace);
javaPropertyResolver.setFakeOverrideVisibilityResolver(fakeOverrideVisibilityResolver);
javaPropertyResolver.setTypeTransformer(javaTypeTransformer);
psiClassFinder.initialize();
@@ -33,6 +33,7 @@ import org.jetbrains.jet.lang.resolve.java.PsiClassFinderImpl;
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.NamespaceFactoryImpl;
import org.jetbrains.jet.lang.resolve.java.vfilefinder.VirtualFileFinder;
import org.jetbrains.jet.lang.resolve.DeclarationResolver;
@@ -87,6 +88,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private final JavaClassFinderImpl javaClassFinder;
private final TraceBasedExternalSignatureResolver traceBasedExternalSignatureResolver;
private final TraceBasedJavaResolverCache traceBasedJavaResolverCache;
private final FakeOverrideVisibilityResolverImpl fakeOverrideVisibilityResolver;
private final NamespaceFactoryImpl namespaceFactory;
private final VirtualFileFinder virtualFileFinder;
private final DeclarationResolver declarationResolver;
@@ -142,6 +144,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.javaClassFinder = new JavaClassFinderImpl();
this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver();
this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache();
this.fakeOverrideVisibilityResolver = new FakeOverrideVisibilityResolverImpl();
this.namespaceFactory = new NamespaceFactoryImpl();
this.virtualFileFinder = com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class);
this.declarationResolver = new DeclarationResolver();
@@ -223,6 +226,8 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
traceBasedJavaResolverCache.setTrace(bindingTrace);
fakeOverrideVisibilityResolver.setTrace(bindingTrace);
this.namespaceFactory.setModuleDescriptor(moduleDescriptor);
this.namespaceFactory.setTrace(bindingTrace);
@@ -313,7 +318,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
javaFunctionResolver.setCache(traceBasedJavaResolverCache);
javaFunctionResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
javaFunctionResolver.setTrace(bindingTrace);
javaFunctionResolver.setFakeOverrideVisibilityResolver(fakeOverrideVisibilityResolver);
javaFunctionResolver.setTypeParameterResolver(javaTypeParameterResolver);
javaFunctionResolver.setTypeTransformer(javaTypeTransformer);
javaFunctionResolver.setValueParameterResolver(javaValueParameterResolver);
@@ -351,7 +356,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
javaPropertyResolver.setAnnotationResolver(javaAnnotationResolver);
javaPropertyResolver.setCache(traceBasedJavaResolverCache);
javaPropertyResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
javaPropertyResolver.setTrace(bindingTrace);
javaPropertyResolver.setFakeOverrideVisibilityResolver(fakeOverrideVisibilityResolver);
javaPropertyResolver.setTypeTransformer(javaTypeTransformer);
psiClassFinder.initialize();
@@ -24,8 +24,8 @@ import com.intellij.psi.util.PsiFormatUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.OverrideResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.FakeOverrideVisibilityResolver;
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
import org.jetbrains.jet.lang.resolve.java.structure.JavaField;
import org.jetbrains.jet.lang.resolve.java.structure.JavaMember;
@@ -76,7 +76,7 @@ public final class DescriptorResolverUtils {
@NotNull Collection<D> membersFromSupertypes,
@NotNull Collection<D> membersFromCurrent,
@NotNull ClassDescriptor classDescriptor,
@NotNull BindingTrace trace
@NotNull final FakeOverrideVisibilityResolver visibilityResolver
) {
final Set<D> result = new HashSet<D>();
@@ -86,6 +86,7 @@ public final class DescriptorResolverUtils {
@Override
@SuppressWarnings("unchecked")
public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) {
visibilityResolver.resolveUnknownVisibilityForMember(fakeOverride);
result.add((D) fakeOverride);
}
@@ -96,8 +97,6 @@ public final class DescriptorResolverUtils {
}
);
OverrideResolver.resolveUnknownVisibilities(result, trace);
return result;
}
@@ -0,0 +1,24 @@
/*
* 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);
}
@@ -0,0 +1,22 @@
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.OverrideResolver;
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) {
OverrideResolver.resolveUnknownVisibilityForMember(null, descriptor, trace);
}
}
@@ -26,7 +26,6 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent;
import org.jetbrains.jet.lang.descriptors.impl.SimpleFunctionDescriptorImpl;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
import org.jetbrains.jet.lang.resolve.java.TypeUsage;
@@ -55,23 +54,18 @@ public final class JavaFunctionResolver {
private static final Logger LOG = Logger.getInstance(JavaFunctionResolver.class);
private JavaTypeTransformer typeTransformer;
private BindingTrace trace;
private JavaResolverCache cache;
private JavaTypeParameterResolver typeParameterResolver;
private JavaValueParameterResolver valueParameterResolver;
private JavaAnnotationResolver annotationResolver;
private ExternalSignatureResolver externalSignatureResolver;
private FakeOverrideVisibilityResolver fakeOverrideVisibilityResolver;
@Inject
public void setTypeTransformer(JavaTypeTransformer typeTransformer) {
this.typeTransformer = typeTransformer;
}
@Inject
public void setTrace(BindingTrace trace) {
this.trace = trace;
}
@Inject
public void setCache(JavaResolverCache cache) {
this.cache = cache;
@@ -97,6 +91,11 @@ public final class JavaFunctionResolver {
this.externalSignatureResolver = externalSignatureResolver;
}
@Inject
public void setFakeOverrideVisibilityResolver(FakeOverrideVisibilityResolver fakeOverrideVisibilityResolver) {
this.fakeOverrideVisibilityResolver = fakeOverrideVisibilityResolver;
}
@Nullable
SimpleFunctionDescriptor resolveFunctionMutely(@NotNull JavaMethod method, @NotNull ClassOrNamespaceDescriptor owner) {
return resolveMethodToFunctionDescriptor(method, owner, false);
@@ -259,7 +258,8 @@ public final class JavaFunctionResolver {
Collection<SimpleFunctionDescriptor> functionsFromSupertypes = getFunctionsFromSupertypes(methodName, classDescriptor);
functions.addAll(resolveOverrides(methodName, functionsFromSupertypes, functionsFromCurrent, classDescriptor, trace));
functions.addAll(resolveOverrides(methodName, functionsFromSupertypes, functionsFromCurrent, classDescriptor,
fakeOverrideVisibilityResolver));
}
if (isEnumClassObject(owner)) {
@@ -17,18 +17,12 @@
package org.jetbrains.jet.lang.resolve.java.resolver;
import com.google.common.collect.Sets;
import com.intellij.psi.PsiExpression;
import com.intellij.psi.PsiLiteralExpression;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.impl.PropertyDescriptorImpl;
import org.jetbrains.jet.lang.resolve.AnnotationUtils;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPropertyDescriptor;
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPropertyDescriptorForObject;
@@ -46,10 +40,10 @@ import static org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils.resolv
public final class JavaPropertyResolver {
private JavaTypeTransformer typeTransformer;
private BindingTrace trace;
private JavaResolverCache cache;
private JavaAnnotationResolver annotationResolver;
private ExternalSignatureResolver externalSignatureResolver;
private FakeOverrideVisibilityResolver fakeOverrideVisibilityResolver;
public JavaPropertyResolver() {
}
@@ -59,11 +53,6 @@ public final class JavaPropertyResolver {
this.typeTransformer = javaTypeTransformer;
}
@Inject
public void setTrace(BindingTrace trace) {
this.trace = trace;
}
@Inject
public void setCache(JavaResolverCache cache) {
this.cache = cache;
@@ -79,6 +68,11 @@ public final class JavaPropertyResolver {
this.externalSignatureResolver = externalSignatureResolver;
}
@Inject
public void setFakeOverrideVisibilityResolver(FakeOverrideVisibilityResolver fakeOverrideVisibilityResolver) {
this.fakeOverrideVisibilityResolver = fakeOverrideVisibilityResolver;
}
@NotNull
public Set<VariableDescriptor> resolveFieldGroup(@NotNull NamedMembers members, @NotNull ClassOrNamespaceDescriptor owner) {
Name propertyName = members.getName();
@@ -100,7 +94,8 @@ public final class JavaPropertyResolver {
Collection<PropertyDescriptor> propertiesFromSupertypes = getPropertiesFromSupertypes(propertyName, classDescriptor);
properties.addAll(resolveOverrides(propertyName, propertiesFromSupertypes, propertiesFromCurrent, classDescriptor, trace));
properties.addAll(resolveOverrides(propertyName, propertiesFromSupertypes, propertiesFromCurrent, classDescriptor,
fakeOverrideVisibilityResolver));
}
properties.addAll(propertiesFromCurrent);