removed obsolete use of temporary trace

This commit is contained in:
Svetlana Isakova
2013-08-16 19:10:52 +04:00
parent a6162cf5ba
commit 5af15d607d
@@ -293,17 +293,8 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor {
@NotNull SimpleFunctionDescriptorImpl functionDescriptor, @NotNull SimpleFunctionDescriptorImpl functionDescriptor,
boolean functionTypeExpected boolean functionTypeExpected
) { ) {
TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create(context.trace, "trace to resolve function literal expression",
expression);
JetType expectedReturnType = functionTypeExpected ? KotlinBuiltIns.getInstance().getReturnTypeFromFunctionType(context.expectedType) : null; JetType expectedReturnType = functionTypeExpected ? KotlinBuiltIns.getInstance().getReturnTypeFromFunctionType(context.expectedType) : null;
JetType returnType = computeUnsafeReturnType(expression, context, functionDescriptor, temporaryTrace, expectedReturnType); JetType returnType = computeUnsafeReturnType(expression, context, functionDescriptor, expectedReturnType);
temporaryTrace.commit(new TraceEntryFilter() {
@Override
public boolean accept(@NotNull WritableSlice<?, ?> slice, Object key) {
return (slice != BindingContext.TRACE_DELTAS_CACHE);
}
}, true);
if (!expression.getFunctionLiteral().hasDeclaredReturnType() && functionTypeExpected) { if (!expression.getFunctionLiteral().hasDeclaredReturnType() && functionTypeExpected) {
if (KotlinBuiltIns.getInstance().isUnit(expectedReturnType)) { if (KotlinBuiltIns.getInstance().isUnit(expectedReturnType)) {
@@ -318,7 +309,6 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor {
@NotNull JetFunctionLiteralExpression expression, @NotNull JetFunctionLiteralExpression expression,
@NotNull ExpressionTypingContext context, @NotNull ExpressionTypingContext context,
@NotNull SimpleFunctionDescriptorImpl functionDescriptor, @NotNull SimpleFunctionDescriptorImpl functionDescriptor,
@NotNull TemporaryBindingTrace temporaryTrace,
@Nullable JetType expectedReturnType @Nullable JetType expectedReturnType
) { ) {
JetFunctionLiteral functionLiteral = expression.getFunctionLiteral(); JetFunctionLiteral functionLiteral = expression.getFunctionLiteral();
@@ -334,13 +324,13 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor {
functionDescriptor.setReturnType(declaredReturnType); functionDescriptor.setReturnType(declaredReturnType);
if (expectedReturnType != null) { if (expectedReturnType != null) {
if (!JetTypeChecker.INSTANCE.isSubtypeOf(declaredReturnType, expectedReturnType)) { if (!JetTypeChecker.INSTANCE.isSubtypeOf(declaredReturnType, expectedReturnType)) {
temporaryTrace.report(EXPECTED_RETURN_TYPE_MISMATCH.on(returnTypeRef, expectedReturnType)); context.trace.report(EXPECTED_RETURN_TYPE_MISMATCH.on(returnTypeRef, expectedReturnType));
} }
} }
} }
// Type-check the body // Type-check the body
ExpressionTypingContext newContext = context.replaceBindingTrace(temporaryTrace).replaceScope(functionInnerScope) ExpressionTypingContext newContext = context.replaceScope(functionInnerScope)
.replaceExpectedType(declaredReturnType != null .replaceExpectedType(declaredReturnType != null
? declaredReturnType ? declaredReturnType
: (expectedReturnType != null ? expectedReturnType : NO_EXPECTED_TYPE)); : (expectedReturnType != null ? expectedReturnType : NO_EXPECTED_TYPE));
@@ -348,7 +338,7 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor {
JetType typeOfBodyExpression = context.expressionTypingServices.getBlockReturnedType(bodyExpression, COERCION_TO_UNIT, newContext).getType(); JetType typeOfBodyExpression = context.expressionTypingServices.getBlockReturnedType(bodyExpression, COERCION_TO_UNIT, newContext).getType();
List<JetType> returnedExpressionTypes = Lists.newArrayList(getTypesOfLocallyReturnedExpressions( List<JetType> returnedExpressionTypes = Lists.newArrayList(getTypesOfLocallyReturnedExpressions(
functionLiteral, temporaryTrace, collectReturns(bodyExpression))); functionLiteral, context.trace, collectReturns(bodyExpression)));
ContainerUtil.addIfNotNull(returnedExpressionTypes, typeOfBodyExpression); ContainerUtil.addIfNotNull(returnedExpressionTypes, typeOfBodyExpression);
if (declaredReturnType != null) return declaredReturnType; if (declaredReturnType != null) return declaredReturnType;
@@ -358,7 +348,7 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor {
private static List<JetType> getTypesOfLocallyReturnedExpressions( private static List<JetType> getTypesOfLocallyReturnedExpressions(
final JetFunctionLiteral functionLiteral, final JetFunctionLiteral functionLiteral,
final TemporaryBindingTrace temporaryTrace, final BindingTrace trace,
Collection<JetReturnExpression> returnExpressions Collection<JetReturnExpression> returnExpressions
) { ) {
return ContainerUtil.mapNotNull(returnExpressions, new Function<JetReturnExpression, JetType>() { return ContainerUtil.mapNotNull(returnExpressions, new Function<JetReturnExpression, JetType>() {
@@ -370,7 +360,7 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor {
return null; return null;
} }
PsiElement labelTarget = temporaryTrace.get(BindingContext.LABEL_TARGET, label); PsiElement labelTarget = trace.get(BindingContext.LABEL_TARGET, label);
if (labelTarget != functionLiteral) { if (labelTarget != functionLiteral) {
// Either a local return of inner lambda/function or a non-local return // Either a local return of inner lambda/function or a non-local return
return null; return null;
@@ -380,7 +370,7 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor {
if (returnedExpression == null) { if (returnedExpression == null) {
return KotlinBuiltIns.getInstance().getUnitType(); return KotlinBuiltIns.getInstance().getUnitType();
} }
JetType returnedType = temporaryTrace.get(EXPRESSION_TYPE, returnedExpression); JetType returnedType = trace.get(EXPRESSION_TYPE, returnedExpression);
assert returnedType != null : "No type for returned expression: " + returnedExpression + ",\n" + assert returnedType != null : "No type for returned expression: " + returnedExpression + ",\n" +
"the type should have been computed by getBlockReturnedType() above"; "the type should have been computed by getBlockReturnedType() above";
return returnedType; return returnedType;