small fixes after review

This commit is contained in:
Svetlana Isakova
2013-02-07 19:35:48 +04:00
parent 4f028e41be
commit c069eedc9b
2 changed files with 9 additions and 13 deletions
@@ -17,7 +17,6 @@
package org.jetbrains.jet.lang.resolve.calls; package org.jetbrains.jet.lang.resolve.calls;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.progress.ProgressIndicatorProvider;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -262,7 +261,8 @@ public class CallResolver {
@NotNull final BasicCallResolutionContext context, @NotNull final BasicCallResolutionContext context,
@NotNull final List<ResolutionTask<D, F>> prioritizedTasks, @NotNull final List<ResolutionTask<D, F>> prioritizedTasks,
@NotNull CallTransformer<D, F> callTransformer, @NotNull CallTransformer<D, F> callTransformer,
@NotNull final JetReferenceExpression reference) { @NotNull final JetReferenceExpression reference
) {
PsiElement element = context.call.getCallElement(); PsiElement element = context.call.getCallElement();
OverloadResolutionResults<F> results = null; OverloadResolutionResults<F> results = null;
TemporaryBindingTrace traceToResolveCall = TemporaryBindingTrace.create(context.trace, "trace to resolve call", context.call); TemporaryBindingTrace traceToResolveCall = TemporaryBindingTrace.create(context.trace, "trace to resolve call", context.call);
@@ -279,11 +279,10 @@ public class CallResolver {
if (results == null) { if (results == null) {
BasicCallResolutionContext newContext = context.replaceBindingTrace(traceToResolveCall); BasicCallResolutionContext newContext = context.replaceBindingTrace(traceToResolveCall);
results = doResolveCall(newContext, prioritizedTasks, callTransformer, reference); results = doResolveCall(newContext, prioritizedTasks, callTransformer, reference);
if (results instanceof OverloadResolutionResultsImpl) { assert results instanceof OverloadResolutionResultsImpl;
DelegatingBindingTrace deltasTraceForTypeInference = ((OverloadResolutionResultsImpl) results).getTrace(); DelegatingBindingTrace deltasTraceForTypeInference = ((OverloadResolutionResultsImpl) results).getTrace();
if (deltasTraceForTypeInference != null) { if (deltasTraceForTypeInference != null) {
deltasTraceForTypeInference.addAllMyDataTo(traceToResolveCall); deltasTraceForTypeInference.addAllMyDataTo(traceToResolveCall);
}
} }
completeTypeInferenceDependentOnFunctionLiterals(newContext, results, TracingStrategy.EMPTY); completeTypeInferenceDependentOnFunctionLiterals(newContext, results, TracingStrategy.EMPTY);
cacheResults(resolutionResultsSlice, context, results, traceToResolveCall); cacheResults(resolutionResultsSlice, context, results, traceToResolveCall);
@@ -58,7 +58,6 @@ import static org.jetbrains.jet.lang.resolve.calls.CallResolverUtil.ResolveArgum
import static org.jetbrains.jet.lang.resolve.calls.CallResolverUtil.ResolveArgumentsMode.SKIP_FUNCTION_ARGUMENTS; import static org.jetbrains.jet.lang.resolve.calls.CallResolverUtil.ResolveArgumentsMode.SKIP_FUNCTION_ARGUMENTS;
import static org.jetbrains.jet.lang.resolve.calls.results.ResolutionStatus.*; import static org.jetbrains.jet.lang.resolve.calls.results.ResolutionStatus.*;
import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE; import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE;
import static org.jetbrains.jet.lang.types.TypeUtils.canHaveSubtypes;
public class CandidateResolver { public class CandidateResolver {
@NotNull @NotNull
@@ -195,7 +194,6 @@ public class CandidateResolver {
) { ) {
ResolvedCallImpl<D> resolvedCall = context.candidateCall; ResolvedCallImpl<D> resolvedCall = context.candidateCall;
assert resolvedCall.hasUnknownTypeParameters(); assert resolvedCall.hasUnknownTypeParameters();
D descriptor = resolvedCall.getCandidateDescriptor();
ConstraintSystem constraintSystem = resolvedCall.getConstraintSystem(); ConstraintSystem constraintSystem = resolvedCall.getConstraintSystem();
assert constraintSystem != null; assert constraintSystem != null;
@@ -328,9 +326,9 @@ public class CandidateResolver {
TemporaryBindingTrace traceToResolveFunctionLiteral = TemporaryBindingTrace.create( TemporaryBindingTrace traceToResolveFunctionLiteral = TemporaryBindingTrace.create(
context.trace, "trace to resolve function literal with expected return type", argumentExpression); context.trace, "trace to resolve function literal with expected return type", argumentExpression);
final boolean[] mismatch = new boolean[1];
JetElement statementExpression = JetPsiUtil.getLastStatementInABlock(((JetFunctionLiteralExpression) argumentExpression).getBodyExpression()); JetElement statementExpression = JetPsiUtil.getLastStatementInABlock(((JetFunctionLiteralExpression) argumentExpression).getBodyExpression());
if (statementExpression == null) return; if (statementExpression == null) return;
final boolean[] mismatch = new boolean[1];
ObservableBindingTrace errorInterceptingTrace = ExpressionTypingUtils.makeTraceInterceptingTypeMismatch( ObservableBindingTrace errorInterceptingTrace = ExpressionTypingUtils.makeTraceInterceptingTypeMismatch(
traceToResolveFunctionLiteral, statementExpression, mismatch); traceToResolveFunctionLiteral, statementExpression, mismatch);
CallCandidateResolutionContext<D> newContext = CallCandidateResolutionContext<D> newContext =
@@ -340,10 +338,9 @@ public class CandidateResolver {
constraintSystem.addSubtypeConstraint( constraintSystem.addSubtypeConstraint(
type, effectiveExpectedType, ConstraintPosition.getValueParameterPosition(valueParameterDescriptor.getIndex())); type, effectiveExpectedType, ConstraintPosition.getValueParameterPosition(valueParameterDescriptor.getIndex()));
traceToResolveFunctionLiteral.commit(); traceToResolveFunctionLiteral.commit();
return;
} }
else { BindingContextUtils.commitResolutionCacheData(traceToResolveFunctionLiteral, context.trace);
BindingContextUtils.commitResolutionCacheData(traceToResolveFunctionLiteral, context.trace);
}
} }
JetType expectedTypeWithoutReturnType = hasExpectedReturnType ? CallResolverUtil.replaceReturnTypeToUnknown(expectedType) : expectedType; JetType expectedTypeWithoutReturnType = hasExpectedReturnType ? CallResolverUtil.replaceReturnTypeToUnknown(expectedType) : expectedType;
CallCandidateResolutionContext<D> newContext = context.replaceExpectedType(expectedTypeWithoutReturnType); CallCandidateResolutionContext<D> newContext = context.replaceExpectedType(expectedTypeWithoutReturnType);