Do not inject TopDownAnalysisContext into OverrideResolver

This commit is contained in:
Andrey Breslav
2014-02-23 11:32:47 +04:00
parent 1abaa9ff20
commit 8b88cc8aec
5 changed files with 15 additions and 25 deletions
@@ -286,7 +286,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
overloadResolver.setTrace(bindingTrace); overloadResolver.setTrace(bindingTrace);
overrideResolver.setContext(topDownAnalysisContext);
overrideResolver.setTopDownAnalysisParameters(topDownAnalysisParameters); overrideResolver.setTopDownAnalysisParameters(topDownAnalysisParameters);
overrideResolver.setTrace(bindingTrace); overrideResolver.setTrace(bindingTrace);
@@ -241,7 +241,6 @@ public class InjectorForTopDownAnalyzerBasic {
overloadResolver.setTrace(bindingTrace); overloadResolver.setTrace(bindingTrace);
overrideResolver.setContext(topDownAnalysisContext);
overrideResolver.setTopDownAnalysisParameters(topDownAnalysisParameters); overrideResolver.setTopDownAnalysisParameters(topDownAnalysisParameters);
overrideResolver.setTrace(bindingTrace); overrideResolver.setTrace(bindingTrace);
@@ -48,16 +48,9 @@ import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilit
public class OverrideResolver { public class OverrideResolver {
private TopDownAnalysisContext context;
private TopDownAnalysisParameters topDownAnalysisParameters; private TopDownAnalysisParameters topDownAnalysisParameters;
private BindingTrace trace; private BindingTrace trace;
@Inject
public void setContext(TopDownAnalysisContext context) {
this.context = context;
}
@Inject @Inject
public void setTopDownAnalysisParameters(TopDownAnalysisParameters topDownAnalysisParameters) { public void setTopDownAnalysisParameters(TopDownAnalysisParameters topDownAnalysisParameters) {
this.topDownAnalysisParameters = topDownAnalysisParameters; this.topDownAnalysisParameters = topDownAnalysisParameters;
@@ -70,23 +63,23 @@ public class OverrideResolver {
public void process() { public void process(@NotNull TopDownAnalysisContext c) {
//all created fake descriptors are stored to resolve visibility on them later //all created fake descriptors are stored to resolve visibility on them later
generateOverridesAndDelegation(); generateOverridesAndDelegation(c);
checkVisibility(); checkVisibility(c);
checkOverrides(); checkOverrides(c);
checkParameterOverridesForAllClasses(); checkParameterOverridesForAllClasses(c);
} }
/** /**
* Generate fake overrides and add overridden descriptors to existing descriptors. * Generate fake overrides and add overridden descriptors to existing descriptors.
*/ */
private void generateOverridesAndDelegation() { private void generateOverridesAndDelegation(@NotNull TopDownAnalysisContext c) {
Set<ClassDescriptorWithResolutionScopes> ourClasses = new HashSet<ClassDescriptorWithResolutionScopes>(context.getClasses().values()); Set<ClassDescriptorWithResolutionScopes> ourClasses = new HashSet<ClassDescriptorWithResolutionScopes>(c.getClasses().values());
Set<ClassifierDescriptor> processed = new HashSet<ClassifierDescriptor>(); Set<ClassifierDescriptor> processed = new HashSet<ClassifierDescriptor>();
for (MutableClassDescriptorLite klass : ContainerUtil.reverse(context.getClassesTopologicalOrder())) { for (MutableClassDescriptorLite klass : ContainerUtil.reverse(c.getClassesTopologicalOrder())) {
if (klass instanceof MutableClassDescriptor && ourClasses.contains(klass)) { if (klass instanceof MutableClassDescriptor && ourClasses.contains(klass)) {
generateOverridesAndDelegationInAClass((MutableClassDescriptor) klass, processed, ourClasses); generateOverridesAndDelegationInAClass((MutableClassDescriptor) klass, processed, ourClasses);
@@ -216,8 +209,8 @@ public class OverrideResolver {
return r; return r;
} }
private void checkOverrides() { private void checkOverrides(@NotNull TopDownAnalysisContext c) {
for (Map.Entry<JetClassOrObject, ClassDescriptorWithResolutionScopes> entry : context.getClasses().entrySet()) { for (Map.Entry<JetClassOrObject, ClassDescriptorWithResolutionScopes> entry : c.getClasses().entrySet()) {
checkOverridesInAClass((MutableClassDescriptor) entry.getValue(), entry.getKey()); checkOverridesInAClass((MutableClassDescriptor) entry.getValue(), entry.getKey());
} }
} }
@@ -651,8 +644,8 @@ public class OverrideResolver {
return invisibleOverride; return invisibleOverride;
} }
private void checkParameterOverridesForAllClasses() { private void checkParameterOverridesForAllClasses(@NotNull TopDownAnalysisContext c) {
for (ClassDescriptorWithResolutionScopes classDescriptor : context.getClasses().values()) { for (ClassDescriptorWithResolutionScopes classDescriptor : c.getClasses().values()) {
for (DeclarationDescriptor member : classDescriptor.getDefaultType().getMemberScope().getAllDescriptors()) { for (DeclarationDescriptor member : classDescriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
if (member instanceof CallableMemberDescriptor) { if (member instanceof CallableMemberDescriptor) {
checkOverridesForParameters((CallableMemberDescriptor) member); checkOverridesForParameters((CallableMemberDescriptor) member);
@@ -726,8 +719,8 @@ public class OverrideResolver {
return false; return false;
} }
private void checkVisibility() { private void checkVisibility(@NotNull TopDownAnalysisContext c) {
for (Map.Entry<JetDeclaration, CallableMemberDescriptor> entry : context.getMembers().entrySet()) { for (Map.Entry<JetDeclaration, CallableMemberDescriptor> entry : c.getMembers().entrySet()) {
checkVisibilityForMember(entry.getKey(), entry.getValue()); checkVisibilityForMember(entry.getKey(), entry.getValue());
} }
} }
@@ -119,7 +119,7 @@ public class TopDownAnalyzer {
typeHierarchyResolver.process(outerScope, owner, declarations); typeHierarchyResolver.process(outerScope, owner, declarations);
declarationResolver.process(c); declarationResolver.process(c);
overrideResolver.process(); overrideResolver.process(c);
lockScopes(c); lockScopes(c);
@@ -241,7 +241,6 @@ public class InjectorForTopDownAnalyzerForJs {
overloadResolver.setTrace(bindingTrace); overloadResolver.setTrace(bindingTrace);
overrideResolver.setContext(topDownAnalysisContext);
overrideResolver.setTopDownAnalysisParameters(topDownAnalysisParameters); overrideResolver.setTopDownAnalysisParameters(topDownAnalysisParameters);
overrideResolver.setTrace(bindingTrace); overrideResolver.setTrace(bindingTrace);