diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java index 2f0b7d19d99..acb9585636f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java @@ -290,8 +290,29 @@ public class CandidateResolver { ? constraintSystem.getCurrentSubstitutor().substitute(effectiveExpectedType, Variance.INVARIANT) : effectiveExpectedType; + //todo inner calls should be analyzed, for parenthesized, labeled, if, when expressions as well + JetVisitor callExpressionFinder = new JetVisitor() { + @Override + public JetExpression visitQualifiedExpression(JetQualifiedExpression expression, Void data) { + JetExpression selector = expression.getSelectorExpression(); + return selector != null ? selector.accept(this, null) : null; + } + + @Override + public JetExpression visitCallExpression(JetCallExpression expression, Void data) { + return expression; + } + + @Override + public JetExpression visitJetElement(JetElement element, Void data) { + return null; + } + }; + JetExpression callExpression = expression.accept(callExpressionFinder, null); + if (callExpression == null) continue; + CallCandidateResolutionContext storedContextForArgument = - context.resolutionResultsCache.getDeferredComputation(expression); + context.resolutionResultsCache.getDeferredComputation(CallKey.create(context.call.getCallType(), callExpression)); if (storedContextForArgument == null) continue; CallCandidateResolutionContext contextForArgument =