From b89f260d252cd80330e91b41ce54d59b89e7e9ab Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Wed, 23 Apr 2014 20:44:00 +0400 Subject: [PATCH] Fixed bug: do not lose all candidates when updating status to success --- .../jet/lang/resolve/calls/CallResolver.java | 2 +- .../calls/results/OverloadResolutionResultsImpl.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) 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 8c6d653b4a5..1902e51b76f 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 @@ -406,7 +406,7 @@ public class CallResolver { candidateResolver.completeTypeInferenceForAllCandidates(context, results); if (resolvedCall.getStatus().isSuccess()) { - return OverloadResolutionResultsImpl.success(resolvedCall); + return results.changeStatusToSuccess(); } return results; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/results/OverloadResolutionResultsImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/results/OverloadResolutionResultsImpl.java index 48b8f1c3880..bc775e90d2b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/results/OverloadResolutionResultsImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/results/OverloadResolutionResultsImpl.java @@ -140,4 +140,15 @@ public class OverloadResolutionResultsImpl impleme public Collection> getAllCandidates() { return allCandidates; } + + public OverloadResolutionResultsImpl changeStatusToSuccess() { + if (getResultCode() == Code.SUCCESS) return this; + + assert isSingleResult() && getResultCode() == Code.INCOMPLETE_TYPE_INFERENCE : + "Only incomplete type inference status with one candidate can be changed to success: " + + getResultCode() + "\n" + getResultingCalls(); + OverloadResolutionResultsImpl newResults = new OverloadResolutionResultsImpl(Code.SUCCESS, getResultingCalls()); + newResults.setAllCandidates(getAllCandidates()); + return newResults; + } }