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");