Inject context for body resolve
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user