diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingVisitor.java index 46d99b312d9..b68cfbfe52f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingVisitor.java @@ -425,18 +425,22 @@ public class ControlStructureTypingVisitor extends ExpressionTypingVisitor { } } } + + DataFlowInfo dataFlowInfo = context.dataFlowInfo; if (finallyBlock != null) { - facade.getTypeInfo(finallyBlock.getFinalExpression(), context.replaceExpectedType(TypeUtils.NO_EXPECTED_TYPE)); + dataFlowInfo = facade.getTypeInfo(finallyBlock.getFinalExpression(), + context.replaceExpectedType(TypeUtils.NO_EXPECTED_TYPE)).getDataFlowInfo(); } + JetType type = facade.getTypeInfo(tryBlock, context).getType(); if (type != null) { types.add(type); } if (types.isEmpty()) { - return JetTypeInfo.create(null, context.dataFlowInfo); + return JetTypeInfo.create(null, dataFlowInfo); } else { - return JetTypeInfo.create(CommonSupertypes.commonSupertype(types), context.dataFlowInfo); + return JetTypeInfo.create(CommonSupertypes.commonSupertype(types), dataFlowInfo); } } diff --git a/compiler/testData/diagnostics/tests/dataFlowInfoTraversal/TryFinally.kt b/compiler/testData/diagnostics/tests/dataFlowInfoTraversal/TryFinally.kt new file mode 100644 index 00000000000..794937848f9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataFlowInfoTraversal/TryFinally.kt @@ -0,0 +1,19 @@ +fun tryFinally(x: Int?) { + try { + } finally { + x!! + } + x : Int +} + +fun tryCatchFinally(x: Int?) { + try { + x!! + } catch (e: Exception) { + x!! + } finally { + x : Int + x!! + } + x : Int +} diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 5fc6beb0084..625bc7f9679 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -1296,6 +1296,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/dataFlowInfoTraversal/TryCatch.kt"); } + @TestMetadata("TryFinally.kt") + public void testTryFinally() throws Exception { + doTest("compiler/testData/diagnostics/tests/dataFlowInfoTraversal/TryFinally.kt"); + } + @TestMetadata("UnaryExpression.kt") public void testUnaryExpression() throws Exception { doTest("compiler/testData/diagnostics/tests/dataFlowInfoTraversal/UnaryExpression.kt");