diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForLazyResolveWithJava.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForLazyResolveWithJava.java index 35069955ad1..1e5f6b595e4 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForLazyResolveWithJava.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForLazyResolveWithJava.java @@ -48,6 +48,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; +import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.psi.JetImportsFactory; import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider; @@ -99,6 +100,7 @@ public class InjectorForLazyResolveWithJava { private final TypeResolver typeResolver; private final QualifiedExpressionResolver qualifiedExpressionResolver; private final CallResolverExtensionProvider callResolverExtensionProvider; + private final CallCompleter callCompleter; private final CandidateResolver candidateResolver; private final JetImportsFactory jetImportsFactory; private final ScopeProvider scopeProvider; @@ -154,6 +156,7 @@ public class InjectorForLazyResolveWithJava { this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.candidateResolver = new CandidateResolver(); + this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.jetImportsFactory = new JetImportsFactory(); this.scopeProvider = new ScopeProvider(getResolveSession()); this.scriptBodyResolver = new ScriptBodyResolver(); @@ -189,6 +192,7 @@ public class InjectorForLazyResolveWithJava { annotationResolver.setTypeResolver(typeResolver); callResolver.setArgumentTypeResolver(argumentTypeResolver); + callResolver.setCallCompleter(callCompleter); callResolver.setCandidateResolver(candidateResolver); callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setTypeResolver(typeResolver); 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 21932d46d8d..56a52ec2c76 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -51,6 +51,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; +import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer; import org.jetbrains.jet.lang.resolve.DeclarationsChecker; @@ -112,6 +113,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly private final TypeResolver typeResolver; private final QualifiedExpressionResolver qualifiedExpressionResolver; private final CallResolverExtensionProvider callResolverExtensionProvider; + private final CallCompleter callCompleter; private final CandidateResolver candidateResolver; private final ControlFlowAnalyzer controlFlowAnalyzer; private final DeclarationsChecker declarationsChecker; @@ -180,6 +182,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.candidateResolver = new CandidateResolver(); + this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.controlFlowAnalyzer = new ControlFlowAnalyzer(); this.declarationsChecker = new DeclarationsChecker(); this.functionAnalyzerExtension = new FunctionAnalyzerExtension(); @@ -239,6 +242,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly annotationResolver.setTypeResolver(typeResolver); callResolver.setArgumentTypeResolver(argumentTypeResolver); + callResolver.setCallCompleter(callCompleter); callResolver.setCandidateResolver(candidateResolver); callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setTypeResolver(typeResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java index 5f13bed034a..caa424c7acf 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForBodyResolve.java @@ -38,6 +38,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; +import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer; import org.jetbrains.jet.lang.resolve.DeclarationsChecker; @@ -72,6 +73,7 @@ public class InjectorForBodyResolve { private final TypeResolver typeResolver; private final QualifiedExpressionResolver qualifiedExpressionResolver; private final CallResolverExtensionProvider callResolverExtensionProvider; + private final CallCompleter callCompleter; private final CandidateResolver candidateResolver; private final ControlFlowAnalyzer controlFlowAnalyzer; private final DeclarationsChecker declarationsChecker; @@ -107,6 +109,7 @@ public class InjectorForBodyResolve { this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.candidateResolver = new CandidateResolver(); + this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.controlFlowAnalyzer = new ControlFlowAnalyzer(); this.declarationsChecker = new DeclarationsChecker(); this.functionAnalyzerExtension = new FunctionAnalyzerExtension(); @@ -127,6 +130,7 @@ public class InjectorForBodyResolve { annotationResolver.setTypeResolver(typeResolver); callResolver.setArgumentTypeResolver(argumentTypeResolver); + callResolver.setCallCompleter(callCompleter); callResolver.setCandidateResolver(candidateResolver); callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setTypeResolver(typeResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java index ba4e60a38f5..573e6504b50 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForLazyResolve.java @@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; +import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.psi.JetImportsFactory; import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider; @@ -73,6 +74,7 @@ public class InjectorForLazyResolve { private final TypeResolver typeResolver; private final QualifiedExpressionResolver qualifiedExpressionResolver; private final CallResolverExtensionProvider callResolverExtensionProvider; + private final CallCompleter callCompleter; private final CandidateResolver candidateResolver; private final JetImportsFactory jetImportsFactory; private final ScopeProvider scopeProvider; @@ -109,6 +111,7 @@ public class InjectorForLazyResolve { this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.candidateResolver = new CandidateResolver(); + this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.jetImportsFactory = new JetImportsFactory(); this.scopeProvider = new ScopeProvider(getResolveSession()); this.scriptBodyResolver = new ScriptBodyResolver(); @@ -126,6 +129,7 @@ public class InjectorForLazyResolve { annotationResolver.setTypeResolver(typeResolver); callResolver.setArgumentTypeResolver(argumentTypeResolver); + callResolver.setCallCompleter(callCompleter); callResolver.setCandidateResolver(candidateResolver); callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setTypeResolver(typeResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java index 206a8b21aa4..d05e83c250d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java @@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; import org.jetbrains.jet.lang.types.expressions.ForLoopConventionsChecker; import org.jetbrains.jet.lang.reflect.ReflectionTypes; import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver; +import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.annotations.NotNull; import javax.annotation.PreDestroy; @@ -64,6 +65,7 @@ public class InjectorForMacros { private final ForLoopConventionsChecker forLoopConventionsChecker; private final ReflectionTypes reflectionTypes; private final ArgumentTypeResolver argumentTypeResolver; + private final CallCompleter callCompleter; private final CandidateResolver candidateResolver; public InjectorForMacros( @@ -91,6 +93,7 @@ public class InjectorForMacros { this.reflectionTypes = new ReflectionTypes(moduleDescriptor); this.argumentTypeResolver = new ArgumentTypeResolver(); this.candidateResolver = new CandidateResolver(); + this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.expressionTypingServices.setAnnotationResolver(annotationResolver); this.expressionTypingServices.setCallExpressionResolver(callExpressionResolver); @@ -110,6 +113,7 @@ public class InjectorForMacros { this.expressionTypingComponents.setReflectionTypes(reflectionTypes); this.callResolver.setArgumentTypeResolver(argumentTypeResolver); + this.callResolver.setCallCompleter(callCompleter); this.callResolver.setCandidateResolver(candidateResolver); this.callResolver.setExpressionTypingServices(expressionTypingServices); this.callResolver.setTypeResolver(typeResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java index 0107ecd5373..116af37b823 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java @@ -41,6 +41,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; +import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer; import org.jetbrains.jet.lang.resolve.DeclarationsChecker; @@ -85,6 +86,7 @@ public class InjectorForTopDownAnalyzerBasic { private final TypeResolver typeResolver; private final QualifiedExpressionResolver qualifiedExpressionResolver; private final CallResolverExtensionProvider callResolverExtensionProvider; + private final CallCompleter callCompleter; private final CandidateResolver candidateResolver; private final ControlFlowAnalyzer controlFlowAnalyzer; private final DeclarationsChecker declarationsChecker; @@ -130,6 +132,7 @@ public class InjectorForTopDownAnalyzerBasic { this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.candidateResolver = new CandidateResolver(); + this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.controlFlowAnalyzer = new ControlFlowAnalyzer(); this.declarationsChecker = new DeclarationsChecker(); this.functionAnalyzerExtension = new FunctionAnalyzerExtension(); @@ -175,6 +178,7 @@ public class InjectorForTopDownAnalyzerBasic { annotationResolver.setTypeResolver(typeResolver); callResolver.setArgumentTypeResolver(argumentTypeResolver); + callResolver.setCallCompleter(callCompleter); callResolver.setCandidateResolver(candidateResolver); callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setTypeResolver(typeResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallCompleter.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallCompleter.kt new file mode 100644 index 00000000000..efef044e57f --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallCompleter.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.resolve.calls + +import javax.inject.Inject +import kotlin.properties.Delegates + +public class CallCompleter( + val argumentTypeResolver: ArgumentTypeResolver, + val candidateResolver: CandidateResolver +) { +} \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java index bf71a284f3d..eb25f862a29 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java @@ -70,6 +70,8 @@ public class CallResolver { private CandidateResolver candidateResolver; @NotNull private ArgumentTypeResolver argumentTypeResolver; + @NotNull + private CallCompleter callCompleter; @Inject public void setExpressionTypingServices(@NotNull ExpressionTypingServices expressionTypingServices) { this.expressionTypingServices = expressionTypingServices; @@ -90,6 +92,11 @@ public class CallResolver { this.argumentTypeResolver = argumentTypeResolver; } + @Inject + public void setCallCompleter(@NotNull CallCompleter callCompleter) { + this.callCompleter = callCompleter; + } + @NotNull public OverloadResolutionResults resolveSimpleProperty(@NotNull BasicCallResolutionContext context) { JetExpression calleeExpression = context.call.getCalleeExpression(); diff --git a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java index 424e90c175e..d82dcb18b14 100644 --- a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java +++ b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java @@ -28,6 +28,7 @@ import org.jetbrains.jet.storage.StorageManager; import org.jetbrains.jet.lang.resolve.AnnotationResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolver; import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver; +import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents; @@ -56,6 +57,7 @@ public class InjectorForTests { private final AnnotationResolver annotationResolver; private final CallResolver callResolver; private final ArgumentTypeResolver argumentTypeResolver; + private final CallCompleter callCompleter; private final CandidateResolver candidateResolver; private final DelegatedPropertyResolver delegatedPropertyResolver; private final ExpressionTypingComponents expressionTypingComponents; @@ -84,6 +86,7 @@ public class InjectorForTests { this.annotationResolver = new AnnotationResolver(); this.argumentTypeResolver = new ArgumentTypeResolver(); this.candidateResolver = new CandidateResolver(); + this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.delegatedPropertyResolver = new DelegatedPropertyResolver(); this.controlStructureTypingUtils = new ControlStructureTypingUtils(getExpressionTypingServices()); this.forLoopConventionsChecker = new ForLoopConventionsChecker(); @@ -115,6 +118,7 @@ public class InjectorForTests { annotationResolver.setTypeResolver(typeResolver); callResolver.setArgumentTypeResolver(argumentTypeResolver); + callResolver.setCallCompleter(callCompleter); callResolver.setCandidateResolver(candidateResolver); callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setTypeResolver(typeResolver); 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 8c38049e212..4a4032b92fe 100644 --- a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java +++ b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java @@ -41,6 +41,7 @@ import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; +import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer; import org.jetbrains.jet.lang.resolve.DeclarationsChecker; @@ -85,6 +86,7 @@ public class InjectorForTopDownAnalyzerForJs { private final TypeResolver typeResolver; private final QualifiedExpressionResolver qualifiedExpressionResolver; private final CallResolverExtensionProvider callResolverExtensionProvider; + private final CallCompleter callCompleter; private final CandidateResolver candidateResolver; private final ControlFlowAnalyzer controlFlowAnalyzer; private final DeclarationsChecker declarationsChecker; @@ -130,6 +132,7 @@ public class InjectorForTopDownAnalyzerForJs { this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.candidateResolver = new CandidateResolver(); + this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.controlFlowAnalyzer = new ControlFlowAnalyzer(); this.declarationsChecker = new DeclarationsChecker(); this.functionAnalyzerExtension = new FunctionAnalyzerExtension(); @@ -175,6 +178,7 @@ public class InjectorForTopDownAnalyzerForJs { annotationResolver.setTypeResolver(typeResolver); callResolver.setArgumentTypeResolver(argumentTypeResolver); + callResolver.setCallCompleter(callCompleter); callResolver.setCandidateResolver(candidateResolver); callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setTypeResolver(typeResolver);