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 1cae04acb40..35409c331ee 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 @@ -17,7 +17,6 @@ package org.jetbrains.jet.lang.resolve.calls; import com.google.common.collect.Lists; -import com.google.common.collect.Sets; import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; @@ -262,7 +261,8 @@ public class CallResolver { @NotNull final BasicCallResolutionContext context, @NotNull final List> prioritizedTasks, @NotNull CallTransformer callTransformer, - @NotNull final JetReferenceExpression reference) { + @NotNull final JetReferenceExpression reference + ) { PsiElement element = context.call.getCallElement(); OverloadResolutionResults results = null; TemporaryBindingTrace traceToResolveCall = TemporaryBindingTrace.create(context.trace, "trace to resolve call", context.call); @@ -279,11 +279,10 @@ public class CallResolver { if (results == null) { BasicCallResolutionContext newContext = context.replaceBindingTrace(traceToResolveCall); results = doResolveCall(newContext, prioritizedTasks, callTransformer, reference); - if (results instanceof OverloadResolutionResultsImpl) { - DelegatingBindingTrace deltasTraceForTypeInference = ((OverloadResolutionResultsImpl) results).getTrace(); - if (deltasTraceForTypeInference != null) { - deltasTraceForTypeInference.addAllMyDataTo(traceToResolveCall); - } + assert results instanceof OverloadResolutionResultsImpl; + DelegatingBindingTrace deltasTraceForTypeInference = ((OverloadResolutionResultsImpl) results).getTrace(); + if (deltasTraceForTypeInference != null) { + deltasTraceForTypeInference.addAllMyDataTo(traceToResolveCall); } completeTypeInferenceDependentOnFunctionLiterals(newContext, results, TracingStrategy.EMPTY); cacheResults(resolutionResultsSlice, context, results, traceToResolveCall); 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 2db11fd2d41..da8fb26217b 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 @@ -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.results.ResolutionStatus.*; import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE; -import static org.jetbrains.jet.lang.types.TypeUtils.canHaveSubtypes; public class CandidateResolver { @NotNull @@ -195,7 +194,6 @@ public class CandidateResolver { ) { ResolvedCallImpl resolvedCall = context.candidateCall; assert resolvedCall.hasUnknownTypeParameters(); - D descriptor = resolvedCall.getCandidateDescriptor(); ConstraintSystem constraintSystem = resolvedCall.getConstraintSystem(); assert constraintSystem != null; @@ -328,9 +326,9 @@ public class CandidateResolver { TemporaryBindingTrace traceToResolveFunctionLiteral = TemporaryBindingTrace.create( 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()); if (statementExpression == null) return; + final boolean[] mismatch = new boolean[1]; ObservableBindingTrace errorInterceptingTrace = ExpressionTypingUtils.makeTraceInterceptingTypeMismatch( traceToResolveFunctionLiteral, statementExpression, mismatch); CallCandidateResolutionContext newContext = @@ -340,10 +338,9 @@ public class CandidateResolver { constraintSystem.addSubtypeConstraint( type, effectiveExpectedType, ConstraintPosition.getValueParameterPosition(valueParameterDescriptor.getIndex())); traceToResolveFunctionLiteral.commit(); + return; } - else { - BindingContextUtils.commitResolutionCacheData(traceToResolveFunctionLiteral, context.trace); - } + BindingContextUtils.commitResolutionCacheData(traceToResolveFunctionLiteral, context.trace); } JetType expectedTypeWithoutReturnType = hasExpectedReturnType ? CallResolverUtil.replaceReturnTypeToUnknown(expectedType) : expectedType; CallCandidateResolutionContext newContext = context.replaceExpectedType(expectedTypeWithoutReturnType);