From 442658396de93a3a0f1264a1bb25411b2194a5ea Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 24 Feb 2014 15:51:49 +0400 Subject: [PATCH] BodiesResolveContext exposes TopDownAnalysisParameters --- .../lang/resolve/BodiesResolveContext.java | 2 + .../resolve/CachedBodiesResolveContext.java | 6 ++ .../lang/resolve/TopDownAnalysisContext.java | 2 + .../plugin/project/ResolveElementCache.java | 69 +++++++++---------- 4 files changed, 43 insertions(+), 36 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodiesResolveContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodiesResolveContext.java index 06c592578a3..96620c3c27a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodiesResolveContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodiesResolveContext.java @@ -60,6 +60,8 @@ public interface BodiesResolveContext extends GlobalContext { Map getScriptScopes(); DataFlowInfo getOuterDataFlowInfo(); + @NotNull + TopDownAnalysisParameters getTopDownAnalysisParameters(); void setTopDownAnalysisParameters(TopDownAnalysisParameters parameters); boolean completeAnalysisNeeded(@NotNull PsiElement element); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/CachedBodiesResolveContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/CachedBodiesResolveContext.java index 0bd221eab61..59fc98586a9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/CachedBodiesResolveContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/CachedBodiesResolveContext.java @@ -116,6 +116,12 @@ public class CachedBodiesResolveContext implements BodiesResolveContext { return outerDataFlowInfo; } + @NotNull + @Override + public TopDownAnalysisParameters getTopDownAnalysisParameters() { + return topDownAnalysisParameters; + } + @Override public void setTopDownAnalysisParameters(@NotNull TopDownAnalysisParameters parameters) { topDownAnalysisParameters = parameters; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java index 2358632d54d..325354c6939 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java @@ -69,6 +69,8 @@ public class TopDownAnalysisContext implements BodiesResolveContext { this.topDownAnalysisParameters = topDownAnalysisParameters; } + @Override + @NotNull public TopDownAnalysisParameters getTopDownAnalysisParameters() { return topDownAnalysisParameters; } diff --git a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java b/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java index ec0c587f22d..84b956188eb 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java +++ b/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java @@ -236,7 +236,7 @@ public class ResolveElementCache { // Activate resolving of supertypes descriptor.getTypeConstructor().getSupertypes(); - BodyResolver bodyResolver = createBodyResolverWithEmptyContext(resolveSession, trace, file); + BodyResolver bodyResolver = createBodyResolver(resolveSession, trace, file); bodyResolver.resolveDelegationSpecifierList(createEmptyContext(resolveSession), classOrObject, descriptor, descriptor.getUnsubstitutedPrimaryConstructor(), descriptor.getScopeForClassHeaderResolution(), @@ -247,8 +247,7 @@ public class ResolveElementCache { final JetScope propertyResolutionScope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(jetProperty); BodyResolveContextForLazy bodyResolveContext = new BodyResolveContextForLazy( - resolveSession.getStorageManager(), - resolveSession.getExceptionTracker(), + createParameters(resolveSession), new Function() { @Override public JetScope apply(JetDeclaration declaration) { @@ -257,7 +256,7 @@ public class ResolveElementCache { return propertyResolutionScope; } }); - BodyResolver bodyResolver = createBodyResolver(trace, file, bodyResolveContext, resolveSession.getModuleDescriptor()); + BodyResolver bodyResolver = createBodyResolver(resolveSession, trace, file); PropertyDescriptor descriptor = (PropertyDescriptor) resolveSession.resolveToDescriptor(jetProperty); JetExpression propertyInitializer = jetProperty.getInitializer(); @@ -282,7 +281,7 @@ public class ResolveElementCache { JetScope scope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(namedFunction); FunctionDescriptor functionDescriptor = (FunctionDescriptor) resolveSession.resolveToDescriptor(namedFunction); - BodyResolver bodyResolver = createBodyResolverWithEmptyContext(resolveSession, trace, file); + BodyResolver bodyResolver = createBodyResolver(resolveSession, trace, file); bodyResolver.resolveFunctionBody(createEmptyContext(resolveSession), trace, namedFunction, functionDescriptor, scope); } @@ -298,8 +297,9 @@ public class ResolveElementCache { ConstructorDescriptor constructorDescriptor = classDescriptor.getUnsubstitutedPrimaryConstructor(); assert constructorDescriptor != null; - BodyResolver bodyResolver = createBodyResolverWithEmptyContext(resolveSession, trace, file); - bodyResolver.resolveConstructorParameterDefaultValuesAndAnnotations(createEmptyContext(resolveSession), trace, klass, constructorDescriptor, scope); + BodyResolver bodyResolver = createBodyResolver(resolveSession, trace, file); + bodyResolver.resolveConstructorParameterDefaultValuesAndAnnotations(createEmptyContext(resolveSession), trace, klass, + constructorDescriptor, scope); } private static boolean initializerAdditionalResolve( @@ -311,7 +311,7 @@ public class ResolveElementCache { JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(classInitializer, JetClassOrObject.class); LazyClassDescriptor classOrObjectDescriptor = (LazyClassDescriptor) resolveSession.resolveToDescriptor(classOrObject); - BodyResolver bodyResolver = createBodyResolverWithEmptyContext(resolveSession, trace, file); + BodyResolver bodyResolver = createBodyResolver(resolveSession, trace, file); bodyResolver.resolveAnonymousInitializers(createEmptyContext(resolveSession), classOrObject, classOrObjectDescriptor.getUnsubstitutedPrimaryConstructor(), classOrObjectDescriptor.getScopeForInitializerResolution()); @@ -319,32 +319,25 @@ public class ResolveElementCache { return true; } - private static BodyResolver createBodyResolver(BindingTrace trace, JetFile file, BodyResolveContextForLazy bodyResolveContext, - ModuleDescriptor module) { - TopDownAnalysisParameters parameters = new TopDownAnalysisParameters( - bodyResolveContext.getStorageManager(), - bodyResolveContext.getExceptionTracker(), - Predicates.alwaysTrue(), false, true, Collections.emptyList()); - InjectorForBodyResolve bodyResolve = new InjectorForBodyResolve(file.getProject(), parameters, trace, module); + private static BodyResolver createBodyResolver(ResolveSession resolveSession, BindingTrace trace, JetFile file) { + InjectorForBodyResolve bodyResolve = new InjectorForBodyResolve( + file.getProject(), + createParameters(resolveSession), + trace, + resolveSession.getModuleDescriptor() + ); return bodyResolve.getBodyResolver(); } - private static BodyResolver createBodyResolverWithEmptyContext( - ResolveSession resolveSession, - BindingTrace trace, - JetFile file - ) { - return createBodyResolver(trace, file, - createEmptyContext(resolveSession), - resolveSession.getModuleDescriptor()); + private static TopDownAnalysisParameters createParameters(@NotNull ResolveSession resolveSession) { + return new TopDownAnalysisParameters( + resolveSession.getStorageManager(), resolveSession.getExceptionTracker(), + Predicates.alwaysTrue(), false, true, Collections.emptyList()); } @NotNull private static BodyResolveContextForLazy createEmptyContext(@NotNull ResolveSession resolveSession) { - return new BodyResolveContextForLazy( - resolveSession.getStorageManager(), - resolveSession.getExceptionTracker(), - Functions.constant(null)); + return new BodyResolveContextForLazy(createParameters(resolveSession), Functions.constant(null)); } private static JetScope getExpressionResolutionScope(@NotNull ResolveSession resolveSession, @NotNull JetExpression expression) { @@ -433,29 +426,27 @@ public class ResolveElementCache { private static class BodyResolveContextForLazy implements BodiesResolveContext { - private final StorageManager storageManager; - private final ExceptionTracker exceptionTracker; private final Function declaringScopes; + private final TopDownAnalysisParameters topDownAnalysisParameters; private BodyResolveContextForLazy( - @NotNull StorageManager storageManager, - @NotNull ExceptionTracker exceptionTracker, - @NotNull Function declaringScopes) { - this.storageManager = storageManager; - this.exceptionTracker = exceptionTracker; + @NotNull TopDownAnalysisParameters parameters, + @NotNull Function declaringScopes + ) { + this.topDownAnalysisParameters = parameters; this.declaringScopes = declaringScopes; } @NotNull @Override public StorageManager getStorageManager() { - return storageManager; + return topDownAnalysisParameters.getStorageManager(); } @NotNull @Override public ExceptionTracker getExceptionTracker() { - return exceptionTracker; + return topDownAnalysisParameters.getExceptionTracker(); } @Override @@ -499,6 +490,12 @@ public class ResolveElementCache { return DataFlowInfo.EMPTY; } + @NotNull + @Override + public TopDownAnalysisParameters getTopDownAnalysisParameters() { + return topDownAnalysisParameters; + } + @Override public void setTopDownAnalysisParameters(TopDownAnalysisParameters parameters) { }