From 2de69d8cd88f30be471467fbc97af68d1349bebc Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Fri, 6 Apr 2012 20:39:16 +0400 Subject: [PATCH] stop resolution if ambiguity is found --- .../jet/lang/resolve/calls/CallResolver.java | 6 ++++-- .../scopes/stopResolutionOnAmbiguity.jet | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/scopes/stopResolutionOnAmbiguity.jet 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 1cd48afb9fb..f5cc258199c 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 @@ -262,10 +262,12 @@ public class CallResolver { for (ResolutionTask task : prioritizedTasks) { TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create(context.trace); OverloadResolutionResultsImpl results = performResolutionGuardedForExtraFunctionLiteralArguments(task.withTrace(temporaryTrace)); - if (results.isSuccess()) { + if (results.isSuccess() || results.isAmbiguity()) { temporaryTrace.commit(); - debugInfo.set(ResolutionDebugInfo.RESULT, results.getResultingCall()); + if (results.isSuccess()) { + debugInfo.set(ResolutionDebugInfo.RESULT, results.getResultingCall()); + } return results; } diff --git a/compiler/testData/diagnostics/tests/scopes/stopResolutionOnAmbiguity.jet b/compiler/testData/diagnostics/tests/scopes/stopResolutionOnAmbiguity.jet new file mode 100644 index 00000000000..510e039129c --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/stopResolutionOnAmbiguity.jet @@ -0,0 +1,20 @@ +package c + +trait B { + fun bar() {} +} + +class C() { + fun bar() { + } +} + +fun test(a : Any?) { + if (a is B) { + if (a is C) { + a.bar(); + } + } +} + +fun Any?.bar() {}