From b1372f0d9e6539a5893aaf74d57d03bfad0971a8 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 17 Dec 2014 19:33:34 +0300 Subject: [PATCH] Fixed if-statements with else branch handling --- .../joinLines/JoinBlockIntoSingleStatementHandler.kt | 3 +++ idea/testData/joinLines/nestedIfs/InnerWithElse.kt | 5 +++++ .../joinLines/nestedIfs/InnerWithElse.kt.after | 3 +++ idea/testData/joinLines/nestedIfs/OuterWithElse.kt | 8 ++++++++ .../joinLines/nestedIfs/OuterWithElse.kt.after | 7 +++++++ .../declarations/JoinLinesTestGenerated.java | 12 ++++++++++++ 6 files changed, 38 insertions(+) create mode 100644 idea/testData/joinLines/nestedIfs/InnerWithElse.kt create mode 100644 idea/testData/joinLines/nestedIfs/InnerWithElse.kt.after create mode 100644 idea/testData/joinLines/nestedIfs/OuterWithElse.kt create mode 100644 idea/testData/joinLines/nestedIfs/OuterWithElse.kt.after diff --git a/idea/src/org/jetbrains/jet/plugin/joinLines/JoinBlockIntoSingleStatementHandler.kt b/idea/src/org/jetbrains/jet/plugin/joinLines/JoinBlockIntoSingleStatementHandler.kt index e9a9bef79dc..0478c8562e1 100644 --- a/idea/src/org/jetbrains/jet/plugin/joinLines/JoinBlockIntoSingleStatementHandler.kt +++ b/idea/src/org/jetbrains/jet/plugin/joinLines/JoinBlockIntoSingleStatementHandler.kt @@ -47,6 +47,9 @@ public class JoinBlockIntoSingleStatementHandler : JoinRawLinesHandlerDelegate { // handle nested if's val pparent = parent.getParent() if (pparent is JetIfExpression && block == pparent.getThen() && statement is JetIfExpression && statement.getElse() == null) { + // if outer if has else-branch and inner does not have it, do not remove braces otherwise else-branch will belong to different if! + if (pparent.getElse() != null) return -1 + val condition1 = pparent.getCondition() val condition2 = statement.getCondition() val body = statement.getThen() diff --git a/idea/testData/joinLines/nestedIfs/InnerWithElse.kt b/idea/testData/joinLines/nestedIfs/InnerWithElse.kt new file mode 100644 index 00000000000..7f69d7ed942 --- /dev/null +++ b/idea/testData/joinLines/nestedIfs/InnerWithElse.kt @@ -0,0 +1,5 @@ +fun foo() { + if (a) { + if (b) foo() else bar() + } +} diff --git a/idea/testData/joinLines/nestedIfs/InnerWithElse.kt.after b/idea/testData/joinLines/nestedIfs/InnerWithElse.kt.after new file mode 100644 index 00000000000..926fb86fdf9 --- /dev/null +++ b/idea/testData/joinLines/nestedIfs/InnerWithElse.kt.after @@ -0,0 +1,3 @@ +fun foo() { + if (a) if (b) foo() else bar() +} diff --git a/idea/testData/joinLines/nestedIfs/OuterWithElse.kt b/idea/testData/joinLines/nestedIfs/OuterWithElse.kt new file mode 100644 index 00000000000..83fa9228520 --- /dev/null +++ b/idea/testData/joinLines/nestedIfs/OuterWithElse.kt @@ -0,0 +1,8 @@ +fun foo() { + if (a) { + if (b) foo() + } + else { + bar() + } +} diff --git a/idea/testData/joinLines/nestedIfs/OuterWithElse.kt.after b/idea/testData/joinLines/nestedIfs/OuterWithElse.kt.after new file mode 100644 index 00000000000..ddef24c6ec1 --- /dev/null +++ b/idea/testData/joinLines/nestedIfs/OuterWithElse.kt.after @@ -0,0 +1,7 @@ +fun foo() { + if (a) { if (b) foo() + } + else { + bar() + } +} diff --git a/idea/tests/org/jetbrains/jet/plugin/intentions/declarations/JoinLinesTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/intentions/declarations/JoinLinesTestGenerated.java index 2011213ea7d..ffdd3e642b6 100644 --- a/idea/tests/org/jetbrains/jet/plugin/intentions/declarations/JoinLinesTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/intentions/declarations/JoinLinesTestGenerated.java @@ -174,6 +174,18 @@ public class JoinLinesTestGenerated extends AbstractJoinLinesTest { doTest(fileName); } + @TestMetadata("InnerWithElse.kt") + public void testInnerWithElse() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/joinLines/nestedIfs/InnerWithElse.kt"); + doTest(fileName); + } + + @TestMetadata("OuterWithElse.kt") + public void testOuterWithElse() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/joinLines/nestedIfs/OuterWithElse.kt"); + doTest(fileName); + } + @TestMetadata("Simple.kt") public void testSimple() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/joinLines/nestedIfs/Simple.kt");