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() {}