Do not inject TopDownAnalysisContext into OverloadResolver

This commit is contained in:
Andrey Breslav
2014-02-23 11:27:32 +04:00
parent 25e533a42d
commit 1abaa9ff20
5 changed files with 15 additions and 21 deletions
@@ -284,7 +284,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
scriptHeaderResolver.setTopDownAnalysisParameters(topDownAnalysisParameters);
scriptHeaderResolver.setTrace(bindingTrace);
overloadResolver.setContext(topDownAnalysisContext);
overloadResolver.setTrace(bindingTrace);
overrideResolver.setContext(topDownAnalysisContext);
@@ -239,7 +239,6 @@ public class InjectorForTopDownAnalyzerBasic {
scriptHeaderResolver.setTopDownAnalysisParameters(topDownAnalysisParameters);
scriptHeaderResolver.setTrace(bindingTrace);
overloadResolver.setContext(topDownAnalysisContext);
overloadResolver.setTrace(bindingTrace);
overrideResolver.setContext(topDownAnalysisContext);
@@ -36,15 +36,8 @@ import java.util.Set;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getFqName;
public class OverloadResolver {
private TopDownAnalysisContext context;
private BindingTrace trace;
@Inject
public void setContext(TopDownAnalysisContext context) {
this.context = context;
}
@Inject
public void setTrace(BindingTrace trace) {
this.trace = trace;
@@ -52,26 +45,27 @@ public class OverloadResolver {
public void process() {
checkOverloads();
public void process(@NotNull BodiesResolveContext c) {
checkOverloads(c);
}
private void checkOverloads() {
private void checkOverloads(@NotNull BodiesResolveContext c) {
MultiMap<ClassDescriptor, ConstructorDescriptor> inClasses = MultiMap.create();
MultiMap<FqNameUnsafe, ConstructorDescriptor> inPackages = MultiMap.create();
fillGroupedConstructors(inClasses, inPackages);
fillGroupedConstructors(c, inClasses, inPackages);
for (Map.Entry<JetClassOrObject, ClassDescriptorWithResolutionScopes> entry : context.getClasses().entrySet()) {
for (Map.Entry<JetClassOrObject, ClassDescriptorWithResolutionScopes> entry : c.getClasses().entrySet()) {
checkOverloadsInAClass(entry.getValue(), entry.getKey(), inClasses.get(entry.getValue()));
}
checkOverloadsInPackages(inPackages);
checkOverloadsInPackages(c, inPackages);
}
private void fillGroupedConstructors(
@NotNull BodiesResolveContext c,
@NotNull MultiMap<ClassDescriptor, ConstructorDescriptor> inClasses,
@NotNull MultiMap<FqNameUnsafe, ConstructorDescriptor> inPackages
) {
for (ClassDescriptorWithResolutionScopes klass : context.getClasses().values()) {
for (ClassDescriptorWithResolutionScopes klass : c.getClasses().values()) {
if (klass.getKind().isSingleton()) {
// Constructors of singletons aren't callable from the code, so they shouldn't participate in overload name checking
continue;
@@ -90,17 +84,20 @@ public class OverloadResolver {
}
}
private void checkOverloadsInPackages(MultiMap<FqNameUnsafe, ConstructorDescriptor> inPackages) {
private void checkOverloadsInPackages(
@NotNull BodiesResolveContext c,
@NotNull MultiMap<FqNameUnsafe, ConstructorDescriptor> inPackages
) {
MultiMap<FqNameUnsafe, CallableMemberDescriptor> functionsByName = MultiMap.create();
for (SimpleFunctionDescriptor function : context.getFunctions().values()) {
for (SimpleFunctionDescriptor function : c.getFunctions().values()) {
if (function.getContainingDeclaration() instanceof PackageFragmentDescriptor) {
functionsByName.putValue(getFqName(function), function);
}
}
for (PropertyDescriptor property : context.getProperties().values()) {
for (PropertyDescriptor property : c.getProperties().values()) {
if (property.getContainingDeclaration() instanceof PackageFragmentDescriptor) {
functionsByName.putValue(getFqName(property), property);
}
@@ -123,7 +123,7 @@ public class TopDownAnalyzer {
lockScopes(c);
overloadResolver.process();
overloadResolver.process(c);
if (!topDownAnalysisParameters.isAnalyzingBootstrapLibrary()) {
bodyResolver.resolveBodies(c);
@@ -239,7 +239,6 @@ public class InjectorForTopDownAnalyzerForJs {
scriptHeaderResolver.setTopDownAnalysisParameters(topDownAnalysisParameters);
scriptHeaderResolver.setTrace(bindingTrace);
overloadResolver.setContext(topDownAnalysisContext);
overloadResolver.setTrace(bindingTrace);
overrideResolver.setContext(topDownAnalysisContext);