complete analysis for call expressions inside nested qualified expressions

todo: other expressions
This commit is contained in:
Svetlana Isakova
2013-03-15 15:34:46 +04:00
parent cbbac2f2ef
commit 6e26e37c43
@@ -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<JetExpression, Void> callExpressionFinder = new JetVisitor<JetExpression, Void>() {
@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<FunctionDescriptor> storedContextForArgument =
context.resolutionResultsCache.getDeferredComputation(expression);
context.resolutionResultsCache.getDeferredComputation(CallKey.create(context.call.getCallType(), callExpression));
if (storedContextForArgument == null) continue;
CallCandidateResolutionContext<FunctionDescriptor> contextForArgument =