From 44c15d83110ebad7734a6162653a1ac33b589347 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 30 Nov 2017 03:16:50 +0300 Subject: [PATCH] Remove braces: add parentheses to if-else inside expression So #KT-18308 Fixed --- .../idea/intentions/RemoveBracesIntention.kt | 12 +++++++++++- .../elseInDotQualifiedExpression.kt | 7 +++++++ .../elseInDotQualifiedExpression.kt.after | 7 +++++++ .../removeBraces/ifInDotQualifiedExpression.kt | 7 +++++++ .../ifInDotQualifiedExpression.kt.after | 7 +++++++ .../whenInDotQualifiedExpression.kt | 12 ++++++++++++ .../whenInDotQualifiedExpression.kt.after | 10 ++++++++++ .../intentions/IntentionTestGenerated.java | 18 ++++++++++++++++++ 8 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt create mode 100644 idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt.after create mode 100644 idea/testData/intentions/removeBraces/ifInDotQualifiedExpression.kt create mode 100644 idea/testData/intentions/removeBraces/ifInDotQualifiedExpression.kt.after create mode 100644 idea/testData/intentions/removeBraces/whenInDotQualifiedExpression.kt create mode 100644 idea/testData/intentions/removeBraces/whenInDotQualifiedExpression.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveBracesIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveBracesIntention.kt index 7488de1c847..83598da538f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveBracesIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveBracesIntention.kt @@ -20,7 +20,9 @@ import com.intellij.openapi.editor.Editor import com.intellij.psi.PsiComment 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.getStrictParentOfType class RemoveBracesIntention : SelfTargetingIntention(KtElement::class.java, "Remove braces") { @@ -61,8 +63,16 @@ class RemoveBracesIntention : SelfTargetingIntention(KtElement::class val newElement = block.replace(statement.copy()) + val factory = KtPsiFactory(block) + if (construct is KtDoWhileExpression) { - newElement.parent!!.addAfter(KtPsiFactory(block).createNewLine(), newElement) + newElement.parent!!.addAfter(factory.createNewLine(), newElement) + } + + if (construct is KtIfExpression && + container.node.elementType == KtNodeTypes.ELSE && + construct.getStrictParentOfType() != null) { + construct.replace(factory.createExpressionByPattern("($0)", construct)) } } diff --git a/idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt b/idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt new file mode 100644 index 00000000000..e81f4a53ee5 --- /dev/null +++ b/idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt @@ -0,0 +1,7 @@ +// WITH_RUNTIME +fun test(b: Boolean) { + val list1 = mutableListOf(1) + val list2 = mutableListOf(2) + + if (b) list1 else {list2}.add(3) +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt.after b/idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt.after new file mode 100644 index 00000000000..62ac1e6e3f0 --- /dev/null +++ b/idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt.after @@ -0,0 +1,7 @@ +// WITH_RUNTIME +fun test(b: Boolean) { + val list1 = mutableListOf(1) + val list2 = mutableListOf(2) + + (if (b) list1 else list2).add(3) +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/ifInDotQualifiedExpression.kt b/idea/testData/intentions/removeBraces/ifInDotQualifiedExpression.kt new file mode 100644 index 00000000000..f43b5e726a2 --- /dev/null +++ b/idea/testData/intentions/removeBraces/ifInDotQualifiedExpression.kt @@ -0,0 +1,7 @@ +// WITH_RUNTIME +fun test(b: Boolean) { + val list1 = mutableListOf(1) + val list2 = mutableListOf(2) + + if (b) {list1} else {list2}.add(3) +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/ifInDotQualifiedExpression.kt.after b/idea/testData/intentions/removeBraces/ifInDotQualifiedExpression.kt.after new file mode 100644 index 00000000000..2cca5accd18 --- /dev/null +++ b/idea/testData/intentions/removeBraces/ifInDotQualifiedExpression.kt.after @@ -0,0 +1,7 @@ +// WITH_RUNTIME +fun test(b: Boolean) { + val list1 = mutableListOf(1) + val list2 = mutableListOf(2) + + if (b) list1 else {list2}.add(3) +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/whenInDotQualifiedExpression.kt b/idea/testData/intentions/removeBraces/whenInDotQualifiedExpression.kt new file mode 100644 index 00000000000..d9baa44c46a --- /dev/null +++ b/idea/testData/intentions/removeBraces/whenInDotQualifiedExpression.kt @@ -0,0 +1,12 @@ +// WITH_RUNTIME +fun test(b: Boolean) { + val list1 = mutableListOf(1) + val list2 = mutableListOf(2) + + when { + b -> list1 + else -> { + list2 + } + }.add(3) +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/whenInDotQualifiedExpression.kt.after b/idea/testData/intentions/removeBraces/whenInDotQualifiedExpression.kt.after new file mode 100644 index 00000000000..c53b5bcbf29 --- /dev/null +++ b/idea/testData/intentions/removeBraces/whenInDotQualifiedExpression.kt.after @@ -0,0 +1,10 @@ +// WITH_RUNTIME +fun test(b: Boolean) { + val list1 = mutableListOf(1) + val list2 = mutableListOf(2) + + when { + b -> list1 + else -> list2 + }.add(3) +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 27961d1b33f..66508c3106f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -12123,6 +12123,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("elseInDotQualifiedExpression.kt") + public void testElseInDotQualifiedExpression() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/elseInDotQualifiedExpression.kt"); + doTest(fileName); + } + @TestMetadata("for.kt") public void testFor() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/for.kt"); @@ -12141,6 +12147,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("ifInDotQualifiedExpression.kt") + public void testIfInDotQualifiedExpression() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/ifInDotQualifiedExpression.kt"); + doTest(fileName); + } + @TestMetadata("ifInsideIf.kt") public void testIfInsideIf() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/ifInsideIf.kt"); @@ -12177,6 +12189,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("whenInDotQualifiedExpression.kt") + public void testWhenInDotQualifiedExpression() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/whenInDotQualifiedExpression.kt"); + doTest(fileName); + } + @TestMetadata("whenLambda.kt") public void testWhenLambda() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/whenLambda.kt");