From c7a71827a769774aaa4a5d05ef453f489e1b7d30 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 24 Dec 2014 14:47:38 +0300 Subject: [PATCH] Introduce Variable: Amend semicolons to updated expression #KT-2098 Fixed --- .../KotlinIntroduceVariableHandler.java | 16 +++++++++++++++- .../introduceVariable/NoNewLinesInBetween.kt | 5 +++++ .../NoNewLinesInBetween.kt.after | 5 +++++ .../NoNewLinesInBetweenNoBraces.kt | 6 ++++++ .../NoNewLinesInBetweenNoBraces.kt.after | 8 ++++++++ .../JetExtractionTestGenerated.java | 12 ++++++++++++ 6 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/introduceVariable/NoNewLinesInBetween.kt create mode 100644 idea/testData/refactoring/introduceVariable/NoNewLinesInBetween.kt.after create mode 100644 idea/testData/refactoring/introduceVariable/NoNewLinesInBetweenNoBraces.kt create mode 100644 idea/testData/refactoring/introduceVariable/NoNewLinesInBetweenNoBraces.kt.after diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java b/idea/src/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java index 4f659d23aff..b9d9f85ed93 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java @@ -377,8 +377,16 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase { } } else { + PsiElement parent = anchor.getParent(); + PsiElement copyTo = parent.getLastChild(); + PsiElement copyFrom = anchor.getNextSibling(); + property = (JetProperty)emptyBody.addAfter(property, firstChild); emptyBody.addAfter(psiFactory.createNewLine(), firstChild); + if (copyFrom != null && copyTo != null) { + emptyBody.addRangeAfter(copyFrom, copyTo, property); + parent.deleteChildRange(copyFrom, copyTo); + } emptyBody = (JetBlockExpression) anchor.replace(emptyBody); } for (PsiElement child : emptyBody.getChildren()) { @@ -406,7 +414,13 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase { replaceExpression(replace); } else if (!needBraces) { - replace.delete(); + PsiElement sibling = PsiTreeUtil.skipSiblingsBackward(replace, PsiWhiteSpace.class); + if (sibling == property) { + replace.getParent().deleteChildRange(property.getNextSibling(), replace); + } + else { + replace.delete(); + } } } propertyRef.set(property); diff --git a/idea/testData/refactoring/introduceVariable/NoNewLinesInBetween.kt b/idea/testData/refactoring/introduceVariable/NoNewLinesInBetween.kt new file mode 100644 index 00000000000..0cd8d852acb --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/NoNewLinesInBetween.kt @@ -0,0 +1,5 @@ +fun bar(): Int = 1 + +fun foo() { + bar(); +} \ No newline at end of file diff --git a/idea/testData/refactoring/introduceVariable/NoNewLinesInBetween.kt.after b/idea/testData/refactoring/introduceVariable/NoNewLinesInBetween.kt.after new file mode 100644 index 00000000000..1f5f3942917 --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/NoNewLinesInBetween.kt.after @@ -0,0 +1,5 @@ +fun bar(): Int = 1 + +fun foo() { + val i = bar(); +} \ No newline at end of file diff --git a/idea/testData/refactoring/introduceVariable/NoNewLinesInBetweenNoBraces.kt b/idea/testData/refactoring/introduceVariable/NoNewLinesInBetweenNoBraces.kt new file mode 100644 index 00000000000..c26ec052344 --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/NoNewLinesInBetweenNoBraces.kt @@ -0,0 +1,6 @@ +fun bar(): Int = 1 +fun baz() + +fun foo() { + if (true) bar(); else baz() +} \ No newline at end of file diff --git a/idea/testData/refactoring/introduceVariable/NoNewLinesInBetweenNoBraces.kt.after b/idea/testData/refactoring/introduceVariable/NoNewLinesInBetweenNoBraces.kt.after new file mode 100644 index 00000000000..e136ba4be0c --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/NoNewLinesInBetweenNoBraces.kt.after @@ -0,0 +1,8 @@ +fun bar(): Int = 1 +fun baz() + +fun foo() { + if (true) { + val i = bar(); + } else baz() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java index f04cfa8e09f..7c2272963b7 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java @@ -177,6 +177,18 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest { doIntroduceVariableTest(fileName); } + @TestMetadata("NoNewLinesInBetween.kt") + public void testNoNewLinesInBetween() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/NoNewLinesInBetween.kt"); + doIntroduceVariableTest(fileName); + } + + @TestMetadata("NoNewLinesInBetweenNoBraces.kt") + public void testNoNewLinesInBetweenNoBraces() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/NoNewLinesInBetweenNoBraces.kt"); + doIntroduceVariableTest(fileName); + } + @TestMetadata("nonEquivalentReceivers.kt") public void testNonEquivalentReceivers() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/nonEquivalentReceivers.kt");