From cf6787b79811d9b409adcbb8d23120c3df9f5165 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 10 Aug 2012 20:13:30 +0400 Subject: [PATCH] Inject context for body resolve --- .../jet/di/InjectorForTopDownAnalyzerForJvm.java | 1 + .../analyzer/AnalyzerFacadeForEverything.java | 5 +++-- .../jetbrains/jet/di/InjectorForBodyResolve.java | 11 ++++++++++- .../jet/di/InjectorForTopDownAnalyzerBasic.java | 1 + .../jetbrains/jet/lang/resolve/BodyResolver.java | 16 ++++++++++++---- .../jetbrains/jet/di/AllInjectorsGenerator.java | 1 + .../jet/di/InjectorForTopDownAnalyzerForJs.java | 1 + 7 files changed, 29 insertions(+), 7 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 184497cbcaa..c4905da5c37 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -144,6 +144,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.topDownAnalysisContext.setTopDownAnalysisParameters(topDownAnalysisParameters); this.bodyResolver.setCallResolver(callResolver); + this.bodyResolver.setContext(topDownAnalysisContext); this.bodyResolver.setControlFlowAnalyzer(controlFlowAnalyzer); this.bodyResolver.setDeclarationsChecker(declarationsChecker); this.bodyResolver.setDescriptorResolver(descriptorResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/analyzer/AnalyzerFacadeForEverything.java b/compiler/frontend/src/org/jetbrains/jet/analyzer/AnalyzerFacadeForEverything.java index 8e358e4e05d..978b57f8dcb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/analyzer/AnalyzerFacadeForEverything.java +++ b/compiler/frontend/src/org/jetbrains/jet/analyzer/AnalyzerFacadeForEverything.java @@ -49,10 +49,11 @@ public class AnalyzerFacadeForEverything { InjectorForBodyResolve injector = new InjectorForBodyResolve( project, topDownAnalysisParameters, - new ObservableBindingTrace(traceContext)); + new ObservableBindingTrace(traceContext), + bodiesResolveContext); try { - injector.getBodyResolver().resolveBodies(bodiesResolveContext); + injector.getBodyResolver().resolveBodies(); return AnalyzeExhaust.success(traceContext.getBindingContext()); } finally { injector.destroy(); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java index 83ecad21737..0f628e6a6a3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java @@ -21,6 +21,7 @@ import org.jetbrains.jet.lang.resolve.BodyResolver; import com.intellij.openapi.project.Project; import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.BindingTrace; +import org.jetbrains.jet.lang.resolve.BodiesResolveContext; import org.jetbrains.jet.lang.resolve.calls.CallResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.AnnotationResolver; @@ -42,6 +43,7 @@ public class InjectorForBodyResolve { private final Project project; private final TopDownAnalysisParameters topDownAnalysisParameters; private final BindingTrace bindingTrace; + private final BodiesResolveContext bodiesResolveContext; private CallResolver callResolver; private DescriptorResolver descriptorResolver; private AnnotationResolver annotationResolver; @@ -57,12 +59,14 @@ public class InjectorForBodyResolve { public InjectorForBodyResolve( @NotNull Project project, @NotNull TopDownAnalysisParameters topDownAnalysisParameters, - @NotNull BindingTrace bindingTrace + @NotNull BindingTrace bindingTrace, + @NotNull BodiesResolveContext bodiesResolveContext ) { this.bodyResolver = new BodyResolver(); this.project = project; this.topDownAnalysisParameters = topDownAnalysisParameters; this.bindingTrace = bindingTrace; + this.bodiesResolveContext = bodiesResolveContext; this.callResolver = new CallResolver(); this.descriptorResolver = new DescriptorResolver(); this.annotationResolver = new AnnotationResolver(); @@ -76,6 +80,7 @@ public class InjectorForBodyResolve { this.topDownAnalysisContext = new TopDownAnalysisContext(); this.bodyResolver.setCallResolver(callResolver); + this.bodyResolver.setContext(bodiesResolveContext); this.bodyResolver.setControlFlowAnalyzer(controlFlowAnalyzer); this.bodyResolver.setDeclarationsChecker(declarationsChecker); this.bodyResolver.setDescriptorResolver(descriptorResolver); @@ -138,4 +143,8 @@ public class InjectorForBodyResolve { return this.bindingTrace; } + public BodiesResolveContext getBodiesResolveContext() { + return this.bodiesResolveContext; + } + } diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java index e2ea46757c7..4c29dd3d5ae 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java @@ -128,6 +128,7 @@ public class InjectorForTopDownAnalyzerBasic { this.topDownAnalysisContext.setTopDownAnalysisParameters(topDownAnalysisParameters); this.bodyResolver.setCallResolver(callResolver); + this.bodyResolver.setContext(topDownAnalysisContext); this.bodyResolver.setControlFlowAnalyzer(controlFlowAnalyzer); this.bodyResolver.setDeclarationsChecker(declarationsChecker); this.bodyResolver.setDescriptorResolver(descriptorResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java index 284c976b5a0..32ce7e4f36e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java @@ -110,6 +110,10 @@ public class BodyResolver { this.declarationsChecker = declarationsChecker; } + @Inject + public void setContext(@NotNull BodiesResolveContext context) { + this.context = context; + } private void resolveBehaviorDeclarationBodies(@NotNull BodiesResolveContext bodiesResolveContext) { // Initialize context @@ -132,10 +136,14 @@ public class BodyResolver { } public void resolveBodies(@NotNull BodiesResolveContext bodiesResolveContext) { - resolveBehaviorDeclarationBodies(bodiesResolveContext); - controlFlowAnalyzer.process(bodiesResolveContext); - declarationsChecker.process(bodiesResolveContext); + context = bodiesResolveContext; + resolveBodies(); + } + public void resolveBodies() { + resolveBehaviorDeclarationBodies(context); + controlFlowAnalyzer.process(context); + declarationsChecker.process(context); } private void resolveDelegationSpecifierLists() { @@ -482,7 +490,7 @@ public class BodyResolver { } } - private void resolveFunctionBody( + public void resolveFunctionBody( @NotNull BindingTrace trace, @NotNull JetDeclarationWithBody function, @NotNull FunctionDescriptor functionDescriptor, diff --git a/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java b/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java index f3f137cd08c..b8908ea9ca9 100644 --- a/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java +++ b/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java @@ -222,6 +222,7 @@ public class AllInjectorsGenerator { generator.addPublicParameter(Project.class); generator.addPublicParameter(TopDownAnalysisParameters.class); generator.addPublicParameter(BindingTrace.class); + generator.addPublicParameter(BodiesResolveContext.class); generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForBodyResolve"); } 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 8c93376ad77..00e2a1badac 100644 --- a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java +++ b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java @@ -128,6 +128,7 @@ public class InjectorForTopDownAnalyzerForJs { this.topDownAnalysisContext.setTopDownAnalysisParameters(topDownAnalysisParameters); this.bodyResolver.setCallResolver(callResolver); + this.bodyResolver.setContext(topDownAnalysisContext); this.bodyResolver.setControlFlowAnalyzer(controlFlowAnalyzer); this.bodyResolver.setDeclarationsChecker(declarationsChecker); this.bodyResolver.setDescriptorResolver(descriptorResolver);