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.setTopDownAnalysisParameters(topDownAnalysisParameters);
scriptHeaderResolver.setTrace(bindingTrace); scriptHeaderResolver.setTrace(bindingTrace);
overloadResolver.setContext(topDownAnalysisContext);
overloadResolver.setTrace(bindingTrace); overloadResolver.setTrace(bindingTrace);
overrideResolver.setContext(topDownAnalysisContext); overrideResolver.setContext(topDownAnalysisContext);
@@ -239,7 +239,6 @@ public class InjectorForTopDownAnalyzerBasic {
scriptHeaderResolver.setTopDownAnalysisParameters(topDownAnalysisParameters); scriptHeaderResolver.setTopDownAnalysisParameters(topDownAnalysisParameters);
scriptHeaderResolver.setTrace(bindingTrace); scriptHeaderResolver.setTrace(bindingTrace);
overloadResolver.setContext(topDownAnalysisContext);
overloadResolver.setTrace(bindingTrace); overloadResolver.setTrace(bindingTrace);
overrideResolver.setContext(topDownAnalysisContext); overrideResolver.setContext(topDownAnalysisContext);
@@ -36,15 +36,8 @@ import java.util.Set;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getFqName; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getFqName;
public class OverloadResolver { public class OverloadResolver {
private TopDownAnalysisContext context;
private BindingTrace trace; private BindingTrace trace;
@Inject
public void setContext(TopDownAnalysisContext context) {
this.context = context;
}
@Inject @Inject
public void setTrace(BindingTrace trace) { public void setTrace(BindingTrace trace) {
this.trace = trace; this.trace = trace;
@@ -52,26 +45,27 @@ public class OverloadResolver {
public void process() { public void process(@NotNull BodiesResolveContext c) {
checkOverloads(); checkOverloads(c);
} }
private void checkOverloads() { private void checkOverloads(@NotNull BodiesResolveContext c) {
MultiMap<ClassDescriptor, ConstructorDescriptor> inClasses = MultiMap.create(); MultiMap<ClassDescriptor, ConstructorDescriptor> inClasses = MultiMap.create();
MultiMap<FqNameUnsafe, ConstructorDescriptor> inPackages = 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())); checkOverloadsInAClass(entry.getValue(), entry.getKey(), inClasses.get(entry.getValue()));
} }
checkOverloadsInPackages(inPackages); checkOverloadsInPackages(c, inPackages);
} }
private void fillGroupedConstructors( private void fillGroupedConstructors(
@NotNull BodiesResolveContext c,
@NotNull MultiMap<ClassDescriptor, ConstructorDescriptor> inClasses, @NotNull MultiMap<ClassDescriptor, ConstructorDescriptor> inClasses,
@NotNull MultiMap<FqNameUnsafe, ConstructorDescriptor> inPackages @NotNull MultiMap<FqNameUnsafe, ConstructorDescriptor> inPackages
) { ) {
for (ClassDescriptorWithResolutionScopes klass : context.getClasses().values()) { for (ClassDescriptorWithResolutionScopes klass : c.getClasses().values()) {
if (klass.getKind().isSingleton()) { if (klass.getKind().isSingleton()) {
// Constructors of singletons aren't callable from the code, so they shouldn't participate in overload name checking // Constructors of singletons aren't callable from the code, so they shouldn't participate in overload name checking
continue; 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(); MultiMap<FqNameUnsafe, CallableMemberDescriptor> functionsByName = MultiMap.create();
for (SimpleFunctionDescriptor function : context.getFunctions().values()) { for (SimpleFunctionDescriptor function : c.getFunctions().values()) {
if (function.getContainingDeclaration() instanceof PackageFragmentDescriptor) { if (function.getContainingDeclaration() instanceof PackageFragmentDescriptor) {
functionsByName.putValue(getFqName(function), function); functionsByName.putValue(getFqName(function), function);
} }
} }
for (PropertyDescriptor property : context.getProperties().values()) { for (PropertyDescriptor property : c.getProperties().values()) {
if (property.getContainingDeclaration() instanceof PackageFragmentDescriptor) { if (property.getContainingDeclaration() instanceof PackageFragmentDescriptor) {
functionsByName.putValue(getFqName(property), property); functionsByName.putValue(getFqName(property), property);
} }
@@ -123,7 +123,7 @@ public class TopDownAnalyzer {
lockScopes(c); lockScopes(c);
overloadResolver.process(); overloadResolver.process(c);
if (!topDownAnalysisParameters.isAnalyzingBootstrapLibrary()) { if (!topDownAnalysisParameters.isAnalyzingBootstrapLibrary()) {
bodyResolver.resolveBodies(c); bodyResolver.resolveBodies(c);
@@ -239,7 +239,6 @@ public class InjectorForTopDownAnalyzerForJs {
scriptHeaderResolver.setTopDownAnalysisParameters(topDownAnalysisParameters); scriptHeaderResolver.setTopDownAnalysisParameters(topDownAnalysisParameters);
scriptHeaderResolver.setTrace(bindingTrace); scriptHeaderResolver.setTrace(bindingTrace);
overloadResolver.setContext(topDownAnalysisContext);
overloadResolver.setTrace(bindingTrace); overloadResolver.setTrace(bindingTrace);
overrideResolver.setContext(topDownAnalysisContext); overrideResolver.setContext(topDownAnalysisContext);