From 400e6d3f44f50c5f0738e41b4fd1559dca569a5c Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Mon, 16 Dec 2013 20:00:53 +0400 Subject: [PATCH] KT-4310 Check for definite returns #KT-4310 Fixed --- .../expressions/ControlStructureTypingUtils.java | 10 ++++++++-- .../diagnostics/tests/controlStructures/kt4310.kt | 11 +++++++++++ .../jet/checkers/JetDiagnosticsTestGenerated.java | 5 +++++ 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/controlStructures/kt4310.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java index be8edf9e94d..97e60c3c873 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java @@ -270,8 +270,14 @@ public class ControlStructureTypingUtils { @Override public Void visitIfExpression(@NotNull JetIfExpression ifExpression, CheckTypeContext c) { - checkExpressionType(ifExpression.getThen(), c); - checkExpressionType(ifExpression.getElse(), c); + JetExpression thenBranch = ifExpression.getThen(); + JetExpression elseBranch = ifExpression.getElse(); + if (thenBranch == null || elseBranch == null) { + visitExpression(ifExpression, c); + return null; + } + checkExpressionType(thenBranch, c); + checkExpressionType(elseBranch, c); return null; } diff --git a/compiler/testData/diagnostics/tests/controlStructures/kt4310.kt b/compiler/testData/diagnostics/tests/controlStructures/kt4310.kt new file mode 100644 index 00000000000..f8666c5985c --- /dev/null +++ b/compiler/testData/diagnostics/tests/controlStructures/kt4310.kt @@ -0,0 +1,11 @@ +package f + +fun test(a: Boolean, b: Boolean): Int { + return if(a) { + 1 + } else { + if (b) { + 3 + } + } // no error, but must be +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 793b56df7e2..ff712272d93 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -1670,6 +1670,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/controlStructures/kt1075.kt"); } + @TestMetadata("kt4310.kt") + public void testKt4310() throws Exception { + doTest("compiler/testData/diagnostics/tests/controlStructures/kt4310.kt"); + } + @TestMetadata("kt657.kt") public void testKt657() throws Exception { doTest("compiler/testData/diagnostics/tests/controlStructures/kt657.kt");