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 db46e082a10..39340de78d8 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -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); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java index dd55aa0d82c..efd34da5671 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java @@ -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); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java index a2a7b5dc4bd..3854e5d6a62 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java @@ -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); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java index 467bb4cadf8..6d1798e5165 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java @@ -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); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java index f14a2e37a89..e8eadfe6bf7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java @@ -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); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CompositeExtension.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CompositeExtension.java new file mode 100644 index 00000000000..31c898cd083 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CompositeExtension.java @@ -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 void run( + @NotNull OverloadResolutionResultsImpl results, + @NotNull BasicCallResolutionContext context + ) { + for (CallResolverExtension delegate : delegates) { + delegate.run(results, context); + } + } +} diff --git a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java index 6bfe138e84e..ca1240cb689 100644 --- a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java +++ b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java @@ -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); diff --git a/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java b/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java index 70a78c7669b..cbb3fefadf2 100644 --- a/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java +++ b/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java @@ -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 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 5b9ca750657..566d52965a5 100644 --- a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java +++ b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java @@ -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);