From e328d2d1ca80db2d2b222f2aa266646c7d102f08 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Wed, 7 Mar 2018 04:51:02 +0300 Subject: [PATCH] Suggest "Remove braces" in nested if correctly #KT-14270 Fixed --- .../idea/intentions/RemoveBracesIntention.kt | 5 ++- .../intentions/removeBraces/ifInsideIf2.kt | 7 ++++ .../removeBraces/ifInsideIf2.kt.after | 5 +++ .../intentions/removeBraces/ifInsideIf3.kt | 11 ++++++ .../intentions/removeBraces/ifInsideIf4.kt | 9 +++++ .../removeBraces/ifInsideIf4.kt.after | 7 ++++ .../intentions/removeBraces/ifInsideIf5.kt | 11 ++++++ .../intentions/removeBraces/ifInsideIf6.kt | 9 +++++ .../removeBraces/ifInsideIf6.kt.after | 7 ++++ .../intentions/removeBraces/ifInsideIf7.kt | 13 +++++++ .../intentions/IntentionTestGenerated.java | 36 +++++++++++++++++++ 11 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 idea/testData/intentions/removeBraces/ifInsideIf2.kt create mode 100644 idea/testData/intentions/removeBraces/ifInsideIf2.kt.after create mode 100644 idea/testData/intentions/removeBraces/ifInsideIf3.kt create mode 100644 idea/testData/intentions/removeBraces/ifInsideIf4.kt create mode 100644 idea/testData/intentions/removeBraces/ifInsideIf4.kt.after create mode 100644 idea/testData/intentions/removeBraces/ifInsideIf5.kt create mode 100644 idea/testData/intentions/removeBraces/ifInsideIf6.kt create mode 100644 idea/testData/intentions/removeBraces/ifInsideIf6.kt.after create mode 100644 idea/testData/intentions/removeBraces/ifInsideIf7.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveBracesIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveBracesIntention.kt index f5230e0de8b..8bb8fe4c545 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveBracesIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveBracesIntention.kt @@ -38,7 +38,10 @@ class RemoveBracesIntention : SelfTargetingIntention(KtElement::class val container = block.parent when (container) { is KtContainerNode -> { - if (singleStatement is KtIfExpression && container.parent is KtIfExpression) return false + if (singleStatement is KtIfExpression) { + val elseExpression = (container.parent as? KtIfExpression)?.`else` + if (elseExpression != null && elseExpression != block) return false + } val description = container.description() ?: return false text = "Remove braces from '$description' statement" diff --git a/idea/testData/intentions/removeBraces/ifInsideIf2.kt b/idea/testData/intentions/removeBraces/ifInsideIf2.kt new file mode 100644 index 00000000000..7547d38ded7 --- /dev/null +++ b/idea/testData/intentions/removeBraces/ifInsideIf2.kt @@ -0,0 +1,7 @@ +fun foo(i :Int) {} + +fun test(i: Int, b: Boolean) { + if (i == 1) { + if (b) foo(1) + } +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/ifInsideIf2.kt.after b/idea/testData/intentions/removeBraces/ifInsideIf2.kt.after new file mode 100644 index 00000000000..54fef3e211d --- /dev/null +++ b/idea/testData/intentions/removeBraces/ifInsideIf2.kt.after @@ -0,0 +1,5 @@ +fun foo(i :Int) {} + +fun test(i: Int, b: Boolean) { + if (i == 1) if (b) foo(1) +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/ifInsideIf3.kt b/idea/testData/intentions/removeBraces/ifInsideIf3.kt new file mode 100644 index 00000000000..43ac5370a1d --- /dev/null +++ b/idea/testData/intentions/removeBraces/ifInsideIf3.kt @@ -0,0 +1,11 @@ +// IS_APPLICABLE: false + +fun foo(i :Int) {} + +fun test(i: Int, b: Boolean) { + if (i == 1) { + if (b) foo(1) + } else if (i == 2) { + if (b) foo(2) + } +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/ifInsideIf4.kt b/idea/testData/intentions/removeBraces/ifInsideIf4.kt new file mode 100644 index 00000000000..2e3f2a726f8 --- /dev/null +++ b/idea/testData/intentions/removeBraces/ifInsideIf4.kt @@ -0,0 +1,9 @@ +fun foo(i :Int) {} + +fun test(i: Int, b: Boolean) { + if (i == 1) { + if (b) foo(1) + } else if (i == 2) { + if (b) foo(2) + } +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/ifInsideIf4.kt.after b/idea/testData/intentions/removeBraces/ifInsideIf4.kt.after new file mode 100644 index 00000000000..e9f508bb2d8 --- /dev/null +++ b/idea/testData/intentions/removeBraces/ifInsideIf4.kt.after @@ -0,0 +1,7 @@ +fun foo(i :Int) {} + +fun test(i: Int, b: Boolean) { + if (i == 1) { + if (b) foo(1) + } else if (i == 2) if (b) foo(2) +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/ifInsideIf5.kt b/idea/testData/intentions/removeBraces/ifInsideIf5.kt new file mode 100644 index 00000000000..3e1bbd5dab2 --- /dev/null +++ b/idea/testData/intentions/removeBraces/ifInsideIf5.kt @@ -0,0 +1,11 @@ +// IS_APPLICABLE: false + +fun foo(i :Int) {} + +fun test(i: Int, b: Boolean) { + if (i == 1) { + if (b) foo(1) + } else { + if (b) foo(2) + } +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/ifInsideIf6.kt b/idea/testData/intentions/removeBraces/ifInsideIf6.kt new file mode 100644 index 00000000000..4e29b628531 --- /dev/null +++ b/idea/testData/intentions/removeBraces/ifInsideIf6.kt @@ -0,0 +1,9 @@ +fun foo(i :Int) {} + +fun test(i: Int, b: Boolean) { + if (i == 1) { + if (b) foo(1) + } else { + if (b) foo(2) + } +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/ifInsideIf6.kt.after b/idea/testData/intentions/removeBraces/ifInsideIf6.kt.after new file mode 100644 index 00000000000..be81f14957a --- /dev/null +++ b/idea/testData/intentions/removeBraces/ifInsideIf6.kt.after @@ -0,0 +1,7 @@ +fun foo(i :Int) {} + +fun test(i: Int, b: Boolean) { + if (i == 1) { + if (b) foo(1) + } else if (b) foo(2) +} \ No newline at end of file diff --git a/idea/testData/intentions/removeBraces/ifInsideIf7.kt b/idea/testData/intentions/removeBraces/ifInsideIf7.kt new file mode 100644 index 00000000000..0ec21851e62 --- /dev/null +++ b/idea/testData/intentions/removeBraces/ifInsideIf7.kt @@ -0,0 +1,13 @@ +// IS_APPLICABLE: false + +fun foo(i :Int) {} + +fun test(i: Int, b: Boolean) { + if (i == 1) { + if (b) foo(1) + } else if (i == 2) { + if (b) foo(2) + } else { + if (b) foo(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 8d8150da1a7..ae0699426fc 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -12528,6 +12528,42 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("ifInsideIf2.kt") + public void testIfInsideIf2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/ifInsideIf2.kt"); + doTest(fileName); + } + + @TestMetadata("ifInsideIf3.kt") + public void testIfInsideIf3() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/ifInsideIf3.kt"); + doTest(fileName); + } + + @TestMetadata("ifInsideIf4.kt") + public void testIfInsideIf4() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/ifInsideIf4.kt"); + doTest(fileName); + } + + @TestMetadata("ifInsideIf5.kt") + public void testIfInsideIf5() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/ifInsideIf5.kt"); + doTest(fileName); + } + + @TestMetadata("ifInsideIf6.kt") + public void testIfInsideIf6() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/ifInsideIf6.kt"); + doTest(fileName); + } + + @TestMetadata("ifInsideIf7.kt") + public void testIfInsideIf7() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/ifInsideIf7.kt"); + doTest(fileName); + } + @TestMetadata("ifWithComment.kt") public void testIfWithComment() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/removeBraces/ifWithComment.kt");