small fixes after review
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user