diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveBracesIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveBracesIntention.kt index af6acfc1f17..f056cbd7299 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveBracesIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveBracesIntention.kt @@ -22,6 +22,8 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiWhiteSpace import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.endOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffset class RemoveBracesIntention : SelfTargetingIntention(KtElement::class.java, "Remove braces") { @@ -57,13 +59,15 @@ class RemoveBracesIntention : SelfTargetingIntention(KtElement::class override fun applyTo(element: KtElement, editor: Editor?) { val block = element.findChildBlock() ?: return val statement = block.statements.single() + val caretOnAfterStatement = if (editor != null) editor.caretModel.offset >= statement.endOffset else false val container = block.parent val construct = container.parent as KtExpression handleComments(construct, block) val newElement = block.replace(statement.copy()) - + editor?.caretModel?.moveToOffset(if (caretOnAfterStatement) newElement.endOffset else newElement.startOffset) + val factory = KtPsiFactory(block) if (construct is KtDoWhileExpression) { @@ -75,7 +79,10 @@ class RemoveBracesIntention : SelfTargetingIntention(KtElement::class construct.parent is KtExpression && construct.parent !is KtStatementExpression ) { - construct.replace(factory.createExpressionByPattern("($0)", construct)) + val replaced = construct.replace(factory.createExpressionByPattern("($0)", construct)) + (replaced.children[0] as? KtIfExpression)?.`else`?.let { + editor?.caretModel?.moveToOffset(if (caretOnAfterStatement) it.endOffset else it.startOffset) + } } } diff --git a/idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt.after b/idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt.after index 62ac1e6e3f0..43d560f8031 100644 --- a/idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt.after +++ b/idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt.after @@ -3,5 +3,5 @@ fun test(b: Boolean) { val list1 = mutableListOf(1) val list2 = mutableListOf(2) - (if (b) list1 else list2).add(3) + (if (b) list1 else list2).add(3) } \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/elseInPlusAssignExpression.kt b/idea/testData/intentions/removeBraces/elseInPlusAssignExpression.kt index 54b10a89437..ea4b5cd42d0 100644 --- a/idea/testData/intentions/removeBraces/elseInPlusAssignExpression.kt +++ b/idea/testData/intentions/removeBraces/elseInPlusAssignExpression.kt @@ -3,5 +3,5 @@ fun test(b: Boolean) { val list1 = mutableListOf(1) val list2 = mutableListOf(2) - if (b) {list1} else {list2} += 3 + if (b) {list1} else {list2} += 3 } \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/elseInPlusAssignExpression.kt.after b/idea/testData/intentions/removeBraces/elseInPlusAssignExpression.kt.after index 3a44a566758..76faadf529f 100644 --- a/idea/testData/intentions/removeBraces/elseInPlusAssignExpression.kt.after +++ b/idea/testData/intentions/removeBraces/elseInPlusAssignExpression.kt.after @@ -3,5 +3,5 @@ fun test(b: Boolean) { val list1 = mutableListOf(1) val list2 = mutableListOf(2) - (if (b) {list1} else list2) += 3 + (if (b) {list1} else list2) += 3 } \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/for.kt.after b/idea/testData/intentions/removeBraces/for.kt.after index bb89631c0c4..63be7a0a63f 100644 --- a/idea/testData/intentions/removeBraces/for.kt.after +++ b/idea/testData/intentions/removeBraces/for.kt.after @@ -1,5 +1,5 @@ fun doSomething(a: T) {} fun foo() { - for (i in 1..4) doSomething("test") + for (i in 1..4) doSomething("test") } diff --git a/idea/testData/intentions/removeBraces/forWithLocalVariable.kt b/idea/testData/intentions/removeBraces/forWithLocalVariable.kt index c50a753eb23..259d38ea341 100644 --- a/idea/testData/intentions/removeBraces/forWithLocalVariable.kt +++ b/idea/testData/intentions/removeBraces/forWithLocalVariable.kt @@ -1,5 +1,5 @@ fun foo(a: List) { - for (x in a) { - val y = x + for (x in a) { + val y = x } } \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/if.kt.after b/idea/testData/intentions/removeBraces/if.kt.after index b68f4dd50e6..8c73b797a02 100644 --- a/idea/testData/intentions/removeBraces/if.kt.after +++ b/idea/testData/intentions/removeBraces/if.kt.after @@ -1,5 +1,5 @@ fun doSomething(a: T) {} fun foo() { - if (true) doSomething("test") + if (true) doSomething("test") }