From e13fa067cc40a8caccc772aa5c7805b19ef6a98f Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 23 Aug 2012 18:46:16 +0400 Subject: [PATCH] Proper resolved calls in loop ranges --- .../jet/lang/resolve/calls/CallResolver.java | 1 + .../expressions/ControlStructureTypingVisitor.java | 13 ++++++------- .../types/expressions/ExpressionTypingContext.java | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) 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 9afda1d11fd..8f56ccb1599 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 @@ -1132,6 +1132,7 @@ public class CallResolver { } } + @Deprecated // Creates wrong resolved calls, should be removed @NotNull public OverloadResolutionResults resolveExactSignature(@NotNull JetScope scope, @NotNull ReceiverDescriptor receiver, @NotNull Name name, @NotNull List parameterTypes) { List> candidates = findCandidatesByExactSignature(scope, receiver, name, parameterTypes); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingVisitor.java index 84f12b9fc98..7c729f3a22b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingVisitor.java @@ -384,11 +384,10 @@ public class ControlStructureTypingVisitor extends ExpressionTypingVisitor { @NotNull String name, @NotNull SimpleDiagnosticFactory ambiguity, @NotNull SimpleDiagnosticFactory missing, - @NotNull WritableSlice> call + @NotNull WritableSlice> resolvedCallKey ) { - OverloadResolutionResults - nextResolutionResults = context.resolveExactSignature(new TransientReceiver(iteratorType), Name.identifier(name), Collections - .emptyList()); + OverloadResolutionResults nextResolutionResults = resolveFakeCall( + new TransientReceiver(iteratorType), context, Name.identifier(name)); if (nextResolutionResults.isAmbiguity()) { context.trace.report(ambiguity.on(loopRangeExpression)); } @@ -396,9 +395,9 @@ public class ControlStructureTypingVisitor extends ExpressionTypingVisitor { context.trace.report(missing.on(loopRangeExpression)); } else { - ResolvedCall nextCall = nextResolutionResults.getResultingCall(); - context.trace.record(call, loopRangeExpression, nextCall); - return nextCall.getResultingDescriptor().getReturnType(); + ResolvedCall resolvedCall = nextResolutionResults.getResultingCall(); + context.trace.record(resolvedCallKey, loopRangeExpression, resolvedCall); + return resolvedCall.getResultingDescriptor().getReturnType(); } return null; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java index 3067164efe4..824088e5e28 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java @@ -174,6 +174,7 @@ public class ExpressionTypingContext { return expressionTypingServices.getCallResolver().resolveSimpleProperty(makeResolutionContext(call)); } + @Deprecated // Builds wrong resolved calls, should be removed @NotNull public OverloadResolutionResults resolveExactSignature(@NotNull ReceiverDescriptor receiver, @NotNull Name name, @NotNull List parameterTypes) { return expressionTypingServices.getCallResolver().resolveExactSignature(scope, receiver, name, parameterTypes);