Introduced CompositeExtension (to pass several of them).

This commit is contained in:
Evgeny Gerashchenko
2013-09-26 03:11:50 +04:00
parent 722ffbdab5
commit 2c877f080e
9 changed files with 55 additions and 34 deletions
@@ -22,7 +22,7 @@ import org.jetbrains.jet.lang.resolve.BodyResolver;
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.resolve.calls.NeedSyntheticCallResolverExtension;
import org.jetbrains.jet.lang.resolve.calls.CompositeExtension;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.BindingTrace;
@@ -81,7 +81,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private final ControlFlowAnalyzer controlFlowAnalyzer;
private final DeclarationsChecker declarationsChecker;
private final DescriptorResolver descriptorResolver;
private final NeedSyntheticCallResolverExtension needSyntheticCallResolverExtension;
private final CompositeExtension compositeExtension;
private final Project project;
private final TopDownAnalysisParameters topDownAnalysisParameters;
private final BindingTrace bindingTrace;
@@ -141,7 +141,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.controlFlowAnalyzer = new ControlFlowAnalyzer();
this.declarationsChecker = new DeclarationsChecker();
this.descriptorResolver = new DescriptorResolver();
this.needSyntheticCallResolverExtension = new NeedSyntheticCallResolverExtension();
this.compositeExtension = new CompositeExtension();
this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters;
this.bindingTrace = bindingTrace;
@@ -257,7 +257,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
callResolver.setArgumentTypeResolver(argumentTypeResolver);
callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setExtension(needSyntheticCallResolverExtension);
callResolver.setExtension(compositeExtension);
callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
@@ -17,7 +17,7 @@
package org.jetbrains.jet.di;
import org.jetbrains.jet.lang.resolve.BodyResolver;
import org.jetbrains.jet.lang.resolve.calls.NeedSyntheticCallResolverExtension;
import org.jetbrains.jet.lang.resolve.calls.CompositeExtension;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
@@ -44,7 +44,7 @@ import javax.annotation.PreDestroy;
public class InjectorForBodyResolve {
private final BodyResolver bodyResolver;
private final NeedSyntheticCallResolverExtension needSyntheticCallResolverExtension;
private final CompositeExtension compositeExtension;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final Project project;
private final TopDownAnalysisParameters topDownAnalysisParameters;
@@ -73,7 +73,7 @@ public class InjectorForBodyResolve {
@NotNull ModuleDescriptor moduleDescriptor
) {
this.bodyResolver = new BodyResolver();
this.needSyntheticCallResolverExtension = new NeedSyntheticCallResolverExtension();
this.compositeExtension = new CompositeExtension();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters;
@@ -111,7 +111,7 @@ public class InjectorForBodyResolve {
callResolver.setArgumentTypeResolver(argumentTypeResolver);
callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setExtension(needSyntheticCallResolverExtension);
callResolver.setExtension(compositeExtension);
callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
@@ -26,7 +26,7 @@ import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
import org.jetbrains.jet.lang.psi.JetImportsFactory;
import org.jetbrains.jet.lang.resolve.calls.NeedSyntheticCallResolverExtension;
import org.jetbrains.jet.lang.resolve.calls.CompositeExtension;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
@@ -48,7 +48,7 @@ public class InjectorForLazyResolve {
private final AnnotationResolver annotationResolver;
private final QualifiedExpressionResolver qualifiedExpressionResolver;
private final JetImportsFactory jetImportsFactory;
private final NeedSyntheticCallResolverExtension needSyntheticCallResolverExtension;
private final CompositeExtension compositeExtension;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final CallExpressionResolver callExpressionResolver;
private final CallResolver callResolver;
@@ -70,7 +70,7 @@ public class InjectorForLazyResolve {
this.annotationResolver = new AnnotationResolver();
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
this.jetImportsFactory = new JetImportsFactory();
this.needSyntheticCallResolverExtension = new NeedSyntheticCallResolverExtension();
this.compositeExtension = new CompositeExtension();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.callExpressionResolver = new CallExpressionResolver();
this.callResolver = new CallResolver();
@@ -103,7 +103,7 @@ public class InjectorForLazyResolve {
callResolver.setArgumentTypeResolver(argumentTypeResolver);
callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setExtension(needSyntheticCallResolverExtension);
callResolver.setExtension(compositeExtension);
callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
@@ -17,7 +17,7 @@
package org.jetbrains.jet.di;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.resolve.calls.NeedSyntheticCallResolverExtension;
import org.jetbrains.jet.lang.resolve.calls.CompositeExtension;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
@@ -36,7 +36,7 @@ import javax.annotation.PreDestroy;
public class InjectorForMacros {
private final ExpressionTypingServices expressionTypingServices;
private final NeedSyntheticCallResolverExtension needSyntheticCallResolverExtension;
private final CompositeExtension compositeExtension;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final Project project;
private final ModuleDescriptor moduleDescriptor;
@@ -54,7 +54,7 @@ public class InjectorForMacros {
@NotNull ModuleDescriptor moduleDescriptor
) {
this.expressionTypingServices = new ExpressionTypingServices();
this.needSyntheticCallResolverExtension = new NeedSyntheticCallResolverExtension();
this.compositeExtension = new CompositeExtension();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.project = project;
this.moduleDescriptor = moduleDescriptor;
@@ -81,7 +81,7 @@ public class InjectorForMacros {
callResolver.setArgumentTypeResolver(argumentTypeResolver);
callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setExtension(needSyntheticCallResolverExtension);
callResolver.setExtension(compositeExtension);
callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
@@ -22,7 +22,7 @@ import org.jetbrains.jet.lang.resolve.BodyResolver;
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.resolve.calls.NeedSyntheticCallResolverExtension;
import org.jetbrains.jet.lang.resolve.calls.CompositeExtension;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.BindingTrace;
@@ -58,7 +58,7 @@ public class InjectorForTopDownAnalyzerBasic {
private final ControlFlowAnalyzer controlFlowAnalyzer;
private final DeclarationsChecker declarationsChecker;
private final DescriptorResolver descriptorResolver;
private final NeedSyntheticCallResolverExtension needSyntheticCallResolverExtension;
private final CompositeExtension compositeExtension;
private final Project project;
private final TopDownAnalysisParameters topDownAnalysisParameters;
private final BindingTrace bindingTrace;
@@ -96,7 +96,7 @@ public class InjectorForTopDownAnalyzerBasic {
this.controlFlowAnalyzer = new ControlFlowAnalyzer();
this.declarationsChecker = new DeclarationsChecker();
this.descriptorResolver = new DescriptorResolver();
this.needSyntheticCallResolverExtension = new NeedSyntheticCallResolverExtension();
this.compositeExtension = new CompositeExtension();
this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters;
this.bindingTrace = bindingTrace;
@@ -170,7 +170,7 @@ public class InjectorForTopDownAnalyzerBasic {
callResolver.setArgumentTypeResolver(argumentTypeResolver);
callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setExtension(needSyntheticCallResolverExtension);
callResolver.setExtension(compositeExtension);
callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
@@ -0,0 +1,21 @@
package org.jetbrains.jet.lang.resolve.calls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
import org.jetbrains.jet.lang.resolve.calls.context.BasicCallResolutionContext;
import org.jetbrains.jet.lang.resolve.calls.results.OverloadResolutionResultsImpl;
public class CompositeExtension implements CallResolverExtension {
private final CallResolverExtension[] delegates = new CallResolverExtension[]{
new NeedSyntheticCallResolverExtension()};
@Override
public <F extends CallableDescriptor> void run(
@NotNull OverloadResolutionResultsImpl<F> results,
@NotNull BasicCallResolutionContext context
) {
for (CallResolverExtension delegate : delegates) {
delegate.run(results, context);
}
}
}
@@ -20,7 +20,7 @@ import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.resolve.TypeResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.calls.NeedSyntheticCallResolverExtension;
import org.jetbrains.jet.lang.resolve.calls.CompositeExtension;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import com.intellij.openapi.project.Project;
@@ -40,7 +40,7 @@ public class InjectorForTests {
private final ExpressionTypingServices expressionTypingServices;
private final TypeResolver typeResolver;
private final CallResolver callResolver;
private final NeedSyntheticCallResolverExtension needSyntheticCallResolverExtension;
private final CompositeExtension compositeExtension;
private final KotlinBuiltIns kotlinBuiltIns;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final Project project;
@@ -59,7 +59,7 @@ public class InjectorForTests {
this.expressionTypingServices = new ExpressionTypingServices();
this.typeResolver = new TypeResolver();
this.callResolver = new CallResolver();
this.needSyntheticCallResolverExtension = new NeedSyntheticCallResolverExtension();
this.compositeExtension = new CompositeExtension();
this.kotlinBuiltIns = KotlinBuiltIns.getInstance();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.project = project;
@@ -89,7 +89,7 @@ public class InjectorForTests {
this.callResolver.setArgumentTypeResolver(argumentTypeResolver);
this.callResolver.setCandidateResolver(candidateResolver);
this.callResolver.setExpressionTypingServices(expressionTypingServices);
this.callResolver.setExtension(needSyntheticCallResolverExtension);
this.callResolver.setExtension(compositeExtension);
this.callResolver.setTypeResolver(typeResolver);
annotationResolver.setCallResolver(callResolver);
@@ -32,8 +32,8 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.psi.JetImportsFactory;
import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.calls.CompositeExtension;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.calls.NeedSyntheticCallResolverExtension;
import org.jetbrains.jet.lang.resolve.java.JavaBridgeConfiguration;
import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
@@ -90,7 +90,7 @@ public class GenerateInjectors {
generator.addPublicField(AnnotationResolver.class);
generator.addPublicField(QualifiedExpressionResolver.class);
generator.addPublicField(JetImportsFactory.class);
generator.addField(NeedSyntheticCallResolverExtension.class);
generator.addField(CompositeExtension.class);
generator.addField(false, PlatformToKotlinClassMap.class, null, new GivenExpression("moduleDescriptor.getPlatformToKotlinClassMap()"));
generator.configure("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForLazyResolve", GenerateInjectors.class);
return generator;
@@ -171,7 +171,7 @@ public class GenerateInjectors {
generator.addPublicField(ControlFlowAnalyzer.class);
generator.addPublicField(DeclarationsChecker.class);
generator.addPublicField(DescriptorResolver.class);
generator.addField(NeedSyntheticCallResolverExtension.class);
generator.addField(CompositeExtension.class);
// Parameters
generator.addPublicParameter(Project.class);
@@ -186,7 +186,7 @@ public class GenerateInjectors {
// Fields
generator.addPublicField(ExpressionTypingServices.class);
generator.addField(NeedSyntheticCallResolverExtension.class);
generator.addField(CompositeExtension.class);
generator.addField(false, PlatformToKotlinClassMap.class, null, new GivenExpression("moduleDescriptor.getPlatformToKotlinClassMap()"));
// Parameters
@@ -205,7 +205,7 @@ public class GenerateInjectors {
generator.addPublicField(ExpressionTypingServices.class);
generator.addPublicField(TypeResolver.class);
generator.addPublicField(CallResolver.class);
generator.addField(NeedSyntheticCallResolverExtension.class);
generator.addField(CompositeExtension.class);
generator.addField(true, KotlinBuiltIns.class, null, new GivenExpression("KotlinBuiltIns.getInstance()"));
generator.addField(false, PlatformToKotlinClassMap.class, null, new GivenExpression("moduleDescriptor.getPlatformToKotlinClassMap()"));
@@ -245,7 +245,7 @@ public class GenerateInjectors {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
// Fields
generator.addPublicField(BodyResolver.class);
generator.addField(NeedSyntheticCallResolverExtension.class);
generator.addField(CompositeExtension.class);
generator.addField(false, PlatformToKotlinClassMap.class, null, new GivenExpression("moduleDescriptor.getPlatformToKotlinClassMap()"));
// Parameters
@@ -22,7 +22,7 @@ import org.jetbrains.jet.lang.resolve.BodyResolver;
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.resolve.calls.NeedSyntheticCallResolverExtension;
import org.jetbrains.jet.lang.resolve.calls.CompositeExtension;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.BindingTrace;
@@ -58,7 +58,7 @@ public class InjectorForTopDownAnalyzerForJs {
private final ControlFlowAnalyzer controlFlowAnalyzer;
private final DeclarationsChecker declarationsChecker;
private final DescriptorResolver descriptorResolver;
private final NeedSyntheticCallResolverExtension needSyntheticCallResolverExtension;
private final CompositeExtension compositeExtension;
private final Project project;
private final TopDownAnalysisParameters topDownAnalysisParameters;
private final BindingTrace bindingTrace;
@@ -95,7 +95,7 @@ public class InjectorForTopDownAnalyzerForJs {
this.controlFlowAnalyzer = new ControlFlowAnalyzer();
this.declarationsChecker = new DeclarationsChecker();
this.descriptorResolver = new DescriptorResolver();
this.needSyntheticCallResolverExtension = new NeedSyntheticCallResolverExtension();
this.compositeExtension = new CompositeExtension();
this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters;
this.bindingTrace = bindingTrace;
@@ -169,7 +169,7 @@ public class InjectorForTopDownAnalyzerForJs {
callResolver.setArgumentTypeResolver(argumentTypeResolver);
callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setExtension(needSyntheticCallResolverExtension);
callResolver.setExtension(compositeExtension);
callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);