From 72a62626df57fcd906a3f3a1bcb7839ea965eb6d Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Sun, 23 Feb 2014 11:16:22 +0400 Subject: [PATCH] Do not inject TopDownAnalysisContext into DeclarationResolver --- .../di/InjectorForTopDownAnalyzerForJvm.java | 1 - .../di/InjectorForTopDownAnalyzerBasic.java | 1 - .../jet/lang/resolve/DeclarationResolver.java | 93 +++++++++---------- .../jet/lang/resolve/TopDownAnalyzer.java | 2 +- .../di/InjectorForTopDownAnalyzerForJs.java | 1 - 5 files changed, 47 insertions(+), 51 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java index 5ce29a88508..be6400de2bb 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -267,7 +267,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly scriptBodyResolver.setTrace(bindingTrace); declarationResolver.setAnnotationResolver(annotationResolver); - declarationResolver.setContext(topDownAnalysisContext); declarationResolver.setDescriptorResolver(descriptorResolver); declarationResolver.setImportsResolver(importsResolver); declarationResolver.setScriptHeaderResolver(scriptHeaderResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java index 220dc9b7d6b..a7d120e8d52 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java @@ -222,7 +222,6 @@ public class InjectorForTopDownAnalyzerBasic { scriptBodyResolver.setTrace(bindingTrace); declarationResolver.setAnnotationResolver(annotationResolver); - declarationResolver.setContext(topDownAnalysisContext); declarationResolver.setDescriptorResolver(descriptorResolver); declarationResolver.setImportsResolver(importsResolver); declarationResolver.setScriptHeaderResolver(scriptHeaderResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java index 39854926506..6ec5b56df8e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java @@ -47,8 +47,6 @@ public class DeclarationResolver { @NotNull private AnnotationResolver annotationResolver; @NotNull - private TopDownAnalysisContext context; - @NotNull private ImportsResolver importsResolver; @NotNull private DescriptorResolver descriptorResolver; @@ -63,11 +61,6 @@ public class DeclarationResolver { this.annotationResolver = annotationResolver; } - @Inject - public void setContext(@NotNull TopDownAnalysisContext context) { - this.context = context; - } - @Inject public void setImportsResolver(@NotNull ImportsResolver importsResolver) { this.importsResolver = importsResolver; @@ -90,20 +83,20 @@ public class DeclarationResolver { - public void process(@NotNull JetScope rootScope) { - checkModifiersAndAnnotationsInPackageDirectives(); - resolveAnnotationConstructors(); - resolveConstructorHeaders(); - resolveAnnotationStubsOnClassesAndConstructors(); - resolveFunctionAndPropertyHeaders(); - createFunctionsForDataClasses(); + public void process(@NotNull TopDownAnalysisContext c) { + checkModifiersAndAnnotationsInPackageDirectives(c); + resolveAnnotationConstructors(c); + resolveConstructorHeaders(c); + resolveAnnotationStubsOnClassesAndConstructors(c); + resolveFunctionAndPropertyHeaders(c); + createFunctionsForDataClasses(c); importsResolver.processMembersImports(); - checkRedeclarationsInPackages(); - checkRedeclarationsInInnerClassNames(); + checkRedeclarationsInPackages(c); + checkRedeclarationsInInnerClassNames(c); } - private void checkModifiersAndAnnotationsInPackageDirectives() { - for (JetFile file : context.getPackageFragments().keySet()) { + private void checkModifiersAndAnnotationsInPackageDirectives(@NotNull TopDownAnalysisContext c) { + for (JetFile file : c.getPackageFragments().keySet()) { JetPackageDirective packageDirective = file.getPackageDirective(); if (packageDirective == null) continue; @@ -127,30 +120,30 @@ public class DeclarationResolver { } } - private void resolveAnnotationConstructors() { - for (Map.Entry entry : context.getClasses().entrySet()) { + private void resolveAnnotationConstructors(@NotNull TopDownAnalysisContext c) { + for (Map.Entry entry : c.getClasses().entrySet()) { JetClassOrObject classOrObject = entry.getKey(); MutableClassDescriptor classDescriptor = (MutableClassDescriptor) entry.getValue(); if (classOrObject instanceof JetClass && DescriptorUtils.isAnnotationClass(classDescriptor)) { - processPrimaryConstructor(classDescriptor, (JetClass) classOrObject); + processPrimaryConstructor(c, classDescriptor, (JetClass) classOrObject); } } } - private void resolveConstructorHeaders() { - for (Map.Entry entry : context.getClasses().entrySet()) { + private void resolveConstructorHeaders(@NotNull TopDownAnalysisContext c) { + for (Map.Entry entry : c.getClasses().entrySet()) { JetClassOrObject classOrObject = entry.getKey(); MutableClassDescriptor classDescriptor = (MutableClassDescriptor) entry.getValue(); if (classOrObject instanceof JetClass && !DescriptorUtils.isAnnotationClass(classDescriptor)) { - processPrimaryConstructor(classDescriptor, (JetClass) classOrObject); + processPrimaryConstructor(c, classDescriptor, (JetClass) classOrObject); } } } - private void resolveAnnotationStubsOnClassesAndConstructors() { - for (Map.Entry entry : context.getClasses().entrySet()) { + private void resolveAnnotationStubsOnClassesAndConstructors(@NotNull TopDownAnalysisContext c) { + for (Map.Entry entry : c.getClasses().entrySet()) { JetModifierList modifierList = entry.getKey().getModifierList(); if (modifierList != null) { MutableClassDescriptor descriptor = (MutableClassDescriptor) entry.getValue(); @@ -160,15 +153,15 @@ public class DeclarationResolver { } } - private void resolveFunctionAndPropertyHeaders() { - for (Map.Entry entry : context.getFileScopes().entrySet()) { + private void resolveFunctionAndPropertyHeaders(@NotNull TopDownAnalysisContext c) { + for (Map.Entry entry : c.getFileScopes().entrySet()) { JetFile file = entry.getKey(); WritableScope fileScope = entry.getValue(); - PackageLikeBuilder packageBuilder = context.getPackageFragments().get(file).getBuilder(); + PackageLikeBuilder packageBuilder = c.getPackageFragments().get(file).getBuilder(); - resolveFunctionAndPropertyHeaders(file.getDeclarations(), fileScope, fileScope, fileScope, packageBuilder); + resolveFunctionAndPropertyHeaders(c, file.getDeclarations(), fileScope, fileScope, fileScope, packageBuilder); } - for (Map.Entry entry : context.getClasses().entrySet()) { + for (Map.Entry entry : c.getClasses().entrySet()) { JetClassOrObject classOrObject = entry.getKey(); MutableClassDescriptor classDescriptor = (MutableClassDescriptor) entry.getValue(); @@ -178,6 +171,7 @@ public class DeclarationResolver { } resolveFunctionAndPropertyHeaders( + c, classOrObject.getDeclarations(), classDescriptor.getScopeForMemberDeclarationResolution(), classDescriptor.getScopeForInitializerResolution(), classDescriptor.getScopeForMemberDeclarationResolution(), classDescriptor.getBuilder()); @@ -189,6 +183,7 @@ public class DeclarationResolver { } private void resolveFunctionAndPropertyHeaders( + @NotNull final TopDownAnalysisContext c, @NotNull List declarations, @NotNull final JetScope scopeForFunctions, @NotNull final JetScope scopeForPropertyInitializers, @@ -204,11 +199,11 @@ public class DeclarationResolver { scopeForFunctions, function, trace, - context.getOuterDataFlowInfo() + c.getOuterDataFlowInfo() ); packageLike.addFunctionDescriptor(functionDescriptor); - context.getFunctions().put(function, functionDescriptor); - context.registerDeclaringScope(function, scopeForFunctions); + c.getFunctions().put(function, functionDescriptor); + c.registerDeclaringScope(function, scopeForFunctions); } @Override @@ -218,25 +213,25 @@ public class DeclarationResolver { scopeForPropertyInitializers, property, trace, - context.getOuterDataFlowInfo()); + c.getOuterDataFlowInfo()); packageLike.addPropertyDescriptor(propertyDescriptor); - context.getProperties().put(property, propertyDescriptor); - context.registerDeclaringScope(property, scopeForPropertyInitializers); + c.getProperties().put(property, propertyDescriptor); + c.registerDeclaringScope(property, scopeForPropertyInitializers); JetPropertyAccessor getter = property.getGetter(); if (getter != null) { - context.registerDeclaringScope(getter, scopeForPropertyAccessors); + c.registerDeclaringScope(getter, scopeForPropertyAccessors); } JetPropertyAccessor setter = property.getSetter(); if (setter != null) { - context.registerDeclaringScope(setter, scopeForPropertyAccessors); + c.registerDeclaringScope(setter, scopeForPropertyAccessors); } } }); } } - private void createFunctionsForDataClasses() { - for (Map.Entry entry : context.getClasses().entrySet()) { + private void createFunctionsForDataClasses(@NotNull TopDownAnalysisContext c) { + for (Map.Entry entry : c.getClasses().entrySet()) { JetClassOrObject klass = entry.getKey(); MutableClassDescriptor classDescriptor = (MutableClassDescriptor) entry.getValue(); @@ -272,7 +267,11 @@ public class DeclarationResolver { classDescriptor.getBuilder().addFunctionDescriptor(functionDescriptor); } - private void processPrimaryConstructor(MutableClassDescriptor classDescriptor, JetClass klass) { + private void processPrimaryConstructor( + @NotNull TopDownAnalysisContext c, + @NotNull MutableClassDescriptor classDescriptor, + @NotNull JetClass klass + ) { if (classDescriptor.getKind() == ClassKind.TRAIT) { JetParameterList primaryConstructorParameterList = klass.getPrimaryConstructorParameterList(); if (primaryConstructorParameterList != null) { @@ -300,7 +299,7 @@ public class DeclarationResolver { parameter, trace ); classDescriptor.getBuilder().addPropertyDescriptor(propertyDescriptor); - context.getPrimaryConstructorParameterProperties().put(parameter, propertyDescriptor); + c.getPrimaryConstructorParameterProperties().put(parameter, propertyDescriptor); } else { if (isAnnotationClass) { @@ -317,8 +316,8 @@ public class DeclarationResolver { } } - private void checkRedeclarationsInPackages() { - for (MutablePackageFragmentDescriptor packageFragment : Sets.newHashSet(context.getPackageFragments().values())) { + private void checkRedeclarationsInPackages(@NotNull TopDownAnalysisContext c) { + for (MutablePackageFragmentDescriptor packageFragment : Sets.newHashSet(c.getPackageFragments().values())) { PackageViewDescriptor packageView = packageFragment.getContainingDeclaration().getPackage(packageFragment.getFqName()); JetScope packageViewScope = packageView.getMemberScope(); Multimap simpleNameDescriptors = packageFragment.getMemberScope().getDeclaredDescriptorsAccessibleBySimpleName(); @@ -374,8 +373,8 @@ public class DeclarationResolver { return declarations; } - private void checkRedeclarationsInInnerClassNames() { - for (ClassDescriptorWithResolutionScopes classDescriptor : context.getClasses().values()) { + private void checkRedeclarationsInInnerClassNames(@NotNull TopDownAnalysisContext c) { + for (ClassDescriptorWithResolutionScopes classDescriptor : c.getClasses().values()) { MutableClassDescriptor mutableClassDescriptor = (MutableClassDescriptor) classDescriptor; if (classDescriptor.getKind() == ClassKind.CLASS_OBJECT) { // Class objects should be considered during analysing redeclarations in classes diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index a678d68d7fe..705fd6c1b9e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -118,7 +118,7 @@ public class TopDownAnalyzer { c.debug("Enter"); typeHierarchyResolver.process(outerScope, owner, declarations); - declarationResolver.process(outerScope); + declarationResolver.process(c); overrideResolver.process(); lockScopes(c); diff --git a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java index 58683153c4a..63708d27e8f 100644 --- a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java +++ b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java @@ -222,7 +222,6 @@ public class InjectorForTopDownAnalyzerForJs { scriptBodyResolver.setTrace(bindingTrace); declarationResolver.setAnnotationResolver(annotationResolver); - declarationResolver.setContext(topDownAnalysisContext); declarationResolver.setDescriptorResolver(descriptorResolver); declarationResolver.setImportsResolver(importsResolver); declarationResolver.setScriptHeaderResolver(scriptHeaderResolver);