Inject context for body resolve

This commit is contained in:
Nikolay Krasko
2012-08-10 20:13:30 +04:00
parent d33b826055
commit cf6787b798
7 changed files with 29 additions and 7 deletions
@@ -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);
@@ -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();
@@ -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;
}
}
@@ -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);
@@ -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,
@@ -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");
}
@@ -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);