diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java index f49cfecf225c..f0def33ebaa6 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/controlFlow/impl/ControlFlowBuilder.java @@ -632,6 +632,7 @@ public class ControlFlowBuilder extends GroovyRecursiveElementVisitor { } private void processInstanceOf(GrExpression expression) { + FList conditionsBefore = myConditions; ConditionInstruction cond = registerCondition(expression); addNodeAndCheckPending(cond); @@ -643,6 +644,7 @@ public class ControlFlowBuilder extends GroovyRecursiveElementVisitor { myHead = cond; addNode(new InstanceOfInstruction(expression, cond)); + myConditions = conditionsBefore; } /** diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.groovy index 8184f62f9f5a..c510cacd0cb5 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.groovy @@ -789,4 +789,15 @@ def foo(List list) { doExprTest '[foo: 2, bar: 4]*.value', 'java.util.ArrayList' doExprTest '[foo: 2, bar: 4]*.undefined', 'java.util.List' } + + void 'test instanceof does not interfere with outer if'() { + doTest '''\ +def bar(CharSequence xx) { + if (xx instanceof String) { + 1 instanceof Object + xx + } +} +''', 'java.lang.String' + } } diff --git a/plugins/groovy/testdata/groovy/controlFlow/ifInstanceofElse.test b/plugins/groovy/testdata/groovy/controlFlow/ifInstanceofElse.test index f6d6f5b404a4..55376b2807ae 100644 --- a/plugins/groovy/testdata/groovy/controlFlow/ifInstanceofElse.test +++ b/plugins/groovy/testdata/groovy/controlFlow/ifInstanceofElse.test @@ -12,9 +12,9 @@ else b = 3 7(8) WRITE b 8(22) element: Assignment expression MAYBE_RETURN 9(10) element: IF statement -10(11) Condition Unary expression, dependent: 3 +10(11) Condition Unary expression 11(12) READ o -12(13,15) Condition Instanceof expression, dependent: 10, 3 +12(13,15) Condition Instanceof expression, dependent: 10 13(14) instanceof: o instanceof Integer 14(17) Negating goto instruction, condition=12Instanceof expression 15(16) instanceof: o instanceof Integer