Do not inject TopDownAnalysisContext into DeclarationResolver

This commit is contained in:
Andrey Breslav
2014-02-23 11:16:22 +04:00
parent e3744cff7c
commit 72a62626df
5 changed files with 47 additions and 51 deletions
@@ -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);
@@ -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);
@@ -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<JetClassOrObject, ClassDescriptorWithResolutionScopes> entry : context.getClasses().entrySet()) {
private void resolveAnnotationConstructors(@NotNull TopDownAnalysisContext c) {
for (Map.Entry<JetClassOrObject, ClassDescriptorWithResolutionScopes> 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<JetClassOrObject, ClassDescriptorWithResolutionScopes> entry : context.getClasses().entrySet()) {
private void resolveConstructorHeaders(@NotNull TopDownAnalysisContext c) {
for (Map.Entry<JetClassOrObject, ClassDescriptorWithResolutionScopes> 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<JetClassOrObject, ClassDescriptorWithResolutionScopes> entry : context.getClasses().entrySet()) {
private void resolveAnnotationStubsOnClassesAndConstructors(@NotNull TopDownAnalysisContext c) {
for (Map.Entry<JetClassOrObject, ClassDescriptorWithResolutionScopes> 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<JetFile, WritableScope> entry : context.getFileScopes().entrySet()) {
private void resolveFunctionAndPropertyHeaders(@NotNull TopDownAnalysisContext c) {
for (Map.Entry<JetFile, WritableScope> 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<JetClassOrObject, ClassDescriptorWithResolutionScopes> entry : context.getClasses().entrySet()) {
for (Map.Entry<JetClassOrObject, ClassDescriptorWithResolutionScopes> 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<JetDeclaration> 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<JetClassOrObject, ClassDescriptorWithResolutionScopes> entry : context.getClasses().entrySet()) {
private void createFunctionsForDataClasses(@NotNull TopDownAnalysisContext c) {
for (Map.Entry<JetClassOrObject, ClassDescriptorWithResolutionScopes> 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<Name, DeclarationDescriptor> 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
@@ -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);
@@ -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);