diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java index dca80964cc0..c03e85dcc92 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java @@ -45,6 +45,7 @@ import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; +import org.jetbrains.jet.util.slicedmap.WritableSlice; import java.util.ArrayList; import java.util.Collection; @@ -265,10 +266,22 @@ public class ExpressionTypingUtils { @NotNull ExpressionTypingContext context, @NotNull Name name ) { - JetReferenceExpression fake = JetPsiFactory.createSimpleName(context.expressionTypingServices.getProject(), "fake"); - BindingTrace fakeTrace = TemporaryBindingTrace.create(context.trace); + final JetReferenceExpression fake = JetPsiFactory.createSimpleName(context.expressionTypingServices.getProject(), "fake"); + TemporaryBindingTrace fakeTrace = TemporaryBindingTrace.create(context.trace); Call call = CallMaker.makeCall(fake, receiver, null, fake, Collections.emptyList()); - return Pair.create(call, context.replaceBindingTrace(fakeTrace).resolveCallWithGivenName(call, fake, name)); + OverloadResolutionResults results = + context.replaceBindingTrace(fakeTrace).resolveCallWithGivenName(call, fake, name); + if (results.isSuccess()) { + fakeTrace.commit(new TraceEntryFilter() { + @Override + public boolean accept(@NotNull WritableSlice slice, Object key) { + // excluding all entries related to fake expression + // keys in RESOLUTION_RESULTS_FOR_FUNCTION slice have fake expression inside + return key != fake && slice != RESOLUTION_RESULTS_FOR_FUNCTION; + } + }, false); + } + return Pair.create(call, results); } public static void defineLocalVariablesFromMultiDeclaration( diff --git a/idea/testData/checker/infos/Autocasts.jet b/idea/testData/checker/infos/Autocasts.jet index 53601579ce3..adfe94ac032 100644 --- a/idea/testData/checker/infos/Autocasts.jet +++ b/idea/testData/checker/infos/Autocasts.jet @@ -233,3 +233,10 @@ fun foo(var a: Any): Int { } return 1 } + +fun inForLoop(x: Any?) { + if (x is Array) { + for (i in x) {} + } + for (i in x) {} +}