From 0e9875aec3725aef6f0bcf0819bded21a6e73c38 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 27 Jan 2014 18:01:35 +0400 Subject: [PATCH] Support moving into "else" branch of conditional expression #KT-3877 Fixed --- .../upDownMover/JetExpressionMover.java | 7 +++++++ .../moveUpDown/expressions/intoElse1.kt | 10 ++++++++++ .../moveUpDown/expressions/intoElse1.kt.after | 10 ++++++++++ .../moveUpDown/expressions/intoElse2.kt | 11 ++++++++++ .../moveUpDown/expressions/intoElse2.kt.after | 11 ++++++++++ .../moveUpDown/expressions/outOfElse1.kt | 10 ++++++++++ .../expressions/outOfElse1.kt.after | 10 ++++++++++ .../moveUpDown/expressions/outOfElse2.kt | 10 ++++++++++ .../expressions/outOfElse2.kt.after | 10 ++++++++++ .../moveUpDown/CodeMoverTestGenerated.java | 20 +++++++++++++++++++ 10 files changed, 109 insertions(+) create mode 100644 idea/testData/codeInsight/moveUpDown/expressions/intoElse1.kt create mode 100644 idea/testData/codeInsight/moveUpDown/expressions/intoElse1.kt.after create mode 100644 idea/testData/codeInsight/moveUpDown/expressions/intoElse2.kt create mode 100644 idea/testData/codeInsight/moveUpDown/expressions/intoElse2.kt.after create mode 100644 idea/testData/codeInsight/moveUpDown/expressions/outOfElse1.kt create mode 100644 idea/testData/codeInsight/moveUpDown/expressions/outOfElse1.kt.after create mode 100644 idea/testData/codeInsight/moveUpDown/expressions/outOfElse2.kt create mode 100644 idea/testData/codeInsight/moveUpDown/expressions/outOfElse2.kt.after diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/upDownMover/JetExpressionMover.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/upDownMover/JetExpressionMover.java index ee2b1fd7969..24fd5dd4fdc 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/upDownMover/JetExpressionMover.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/upDownMover/JetExpressionMover.java @@ -219,6 +219,13 @@ public class JetExpressionMover extends AbstractJetUpDownMover { @Nullable private static LineRange getExpressionTargetRange(@NotNull Editor editor, @NotNull PsiElement sibling, boolean down) { + if (sibling instanceof JetIfExpression && !down) { + JetExpression elseBranch = ((JetIfExpression) sibling).getElse(); + if (elseBranch instanceof JetBlockExpression) { + sibling = elseBranch; + } + } + PsiElement start = sibling; PsiElement end = sibling; diff --git a/idea/testData/codeInsight/moveUpDown/expressions/intoElse1.kt b/idea/testData/codeInsight/moveUpDown/expressions/intoElse1.kt new file mode 100644 index 00000000000..773bba6b2f5 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/expressions/intoElse1.kt @@ -0,0 +1,10 @@ +// MOVE: down + +fun foo(x: Boolean) { + if (x) { + println(x) + } + else { + + } +} diff --git a/idea/testData/codeInsight/moveUpDown/expressions/intoElse1.kt.after b/idea/testData/codeInsight/moveUpDown/expressions/intoElse1.kt.after new file mode 100644 index 00000000000..e58313a9790 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/expressions/intoElse1.kt.after @@ -0,0 +1,10 @@ +// MOVE: down + +fun foo(x: Boolean) { + if (x) { + } + else { + println(x) + + } +} diff --git a/idea/testData/codeInsight/moveUpDown/expressions/intoElse2.kt b/idea/testData/codeInsight/moveUpDown/expressions/intoElse2.kt new file mode 100644 index 00000000000..50bbaa49d98 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/expressions/intoElse2.kt @@ -0,0 +1,11 @@ +// MOVE: up + +fun foo(x: Boolean) { + if (x) { + + } + else { + + } + println(x) +} diff --git a/idea/testData/codeInsight/moveUpDown/expressions/intoElse2.kt.after b/idea/testData/codeInsight/moveUpDown/expressions/intoElse2.kt.after new file mode 100644 index 00000000000..37a3f009a4a --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/expressions/intoElse2.kt.after @@ -0,0 +1,11 @@ +// MOVE: up + +fun foo(x: Boolean) { + if (x) { + + } + else { + + println(x) + } +} diff --git a/idea/testData/codeInsight/moveUpDown/expressions/outOfElse1.kt b/idea/testData/codeInsight/moveUpDown/expressions/outOfElse1.kt new file mode 100644 index 00000000000..cb920a216a1 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/expressions/outOfElse1.kt @@ -0,0 +1,10 @@ +// MOVE: up + +fun foo(x: Boolean) { + if (x) { + + } + else { + println(x) + } +} diff --git a/idea/testData/codeInsight/moveUpDown/expressions/outOfElse1.kt.after b/idea/testData/codeInsight/moveUpDown/expressions/outOfElse1.kt.after new file mode 100644 index 00000000000..6694978a3f3 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/expressions/outOfElse1.kt.after @@ -0,0 +1,10 @@ +// MOVE: up + +fun foo(x: Boolean) { + if (x) { + + println(x) + } + else { + } +} diff --git a/idea/testData/codeInsight/moveUpDown/expressions/outOfElse2.kt b/idea/testData/codeInsight/moveUpDown/expressions/outOfElse2.kt new file mode 100644 index 00000000000..cdf6983ab26 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/expressions/outOfElse2.kt @@ -0,0 +1,10 @@ +// MOVE: down + +fun foo(x: Boolean) { + if (x) { + + } + else { + println(x) + } +} diff --git a/idea/testData/codeInsight/moveUpDown/expressions/outOfElse2.kt.after b/idea/testData/codeInsight/moveUpDown/expressions/outOfElse2.kt.after new file mode 100644 index 00000000000..66a6dc708b5 --- /dev/null +++ b/idea/testData/codeInsight/moveUpDown/expressions/outOfElse2.kt.after @@ -0,0 +1,10 @@ +// MOVE: down + +fun foo(x: Boolean) { + if (x) { + + } + else { + } + println(x) +} diff --git a/idea/tests/org/jetbrains/jet/plugin/codeInsight/moveUpDown/CodeMoverTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/codeInsight/moveUpDown/CodeMoverTestGenerated.java index 92f48b11242..e8f437b5518 100644 --- a/idea/tests/org/jetbrains/jet/plugin/codeInsight/moveUpDown/CodeMoverTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/codeInsight/moveUpDown/CodeMoverTestGenerated.java @@ -932,6 +932,16 @@ public class CodeMoverTestGenerated extends AbstractCodeMoverTest { doTestExpression("idea/testData/codeInsight/moveUpDown/expressions/intoClosureWithParams1.kt"); } + @TestMetadata("intoElse1.kt") + public void testIntoElse1() throws Exception { + doTestExpression("idea/testData/codeInsight/moveUpDown/expressions/intoElse1.kt"); + } + + @TestMetadata("intoElse2.kt") + public void testIntoElse2() throws Exception { + doTestExpression("idea/testData/codeInsight/moveUpDown/expressions/intoElse2.kt"); + } + @TestMetadata("intoNestedClosure1.kt") public void testIntoNestedClosure1() throws Exception { doTestExpression("idea/testData/codeInsight/moveUpDown/expressions/intoNestedClosure1.kt"); @@ -1007,6 +1017,16 @@ public class CodeMoverTestGenerated extends AbstractCodeMoverTest { doTestExpression("idea/testData/codeInsight/moveUpDown/expressions/outOfClosureWithParams1.kt"); } + @TestMetadata("outOfElse1.kt") + public void testOutOfElse1() throws Exception { + doTestExpression("idea/testData/codeInsight/moveUpDown/expressions/outOfElse1.kt"); + } + + @TestMetadata("outOfElse2.kt") + public void testOutOfElse2() throws Exception { + doTestExpression("idea/testData/codeInsight/moveUpDown/expressions/outOfElse2.kt"); + } + @TestMetadata("outOfNestedClosure1.kt") public void testOutOfNestedClosure1() throws Exception { doTestExpression("idea/testData/codeInsight/moveUpDown/expressions/outOfNestedClosure1.kt");