diff --git a/java/java-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java b/java/java-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java index 1b9fb57d2987..eeb7e795e1b8 100644 --- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java +++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java @@ -685,7 +685,7 @@ class ControlFlowAnalyzer extends JavaElementVisitor { private void addGotoCatch(CatchDescriptor cd) { addInstruction(new PushInstruction(myFactory.getVarFactory().create(cd.getParameter(), false), null)); addInstruction(new SwapInstruction()); - addInstruction(new AssignInstruction(null)); + myCurrentFlow.addInstruction(new AssignInstruction(null)); addInstruction(new PopInstruction()); addInstruction(new GotoInstruction(cd.getJumpOffset())); } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/VisitFinallyOnce.java b/java/java-tests/testData/inspection/dataFlow/fixture/VisitFinallyOnce.java new file mode 100644 index 000000000000..7e70eb70add3 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/VisitFinallyOnce.java @@ -0,0 +1,39 @@ +import java.io.IOException; + +class TestIDEAWarn { + private Connection _connection; + + public void warn() throws IOException { + try { + if (_connection != null) { + try { + _connection.commit(); + } finally { + _connection.close(); + _connection = null; + } + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public void warn2() throws IOException { + if (_connection == null) return; + try { + try { + _connection.commit(); + } finally { + _connection.close(); + _connection = null; + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + interface Connection { + void commit() throws IOException; + void close() throws IOException; + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java index 47b3f560eec1..4412631e42eb 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java @@ -71,5 +71,6 @@ public class DataFlowInspectionFixtureTest extends JavaCodeInsightFixtureTestCas public void testContinueFlushesLoopVariable() throws Throwable { doTest(); } public void testEqualsNotNull() throws Throwable { doTest(); } + public void testVisitFinallyOnce() throws Throwable { doTest(); } }