From 05d8932fa66ccf14cdb5c75b802eaf9ac4446ede Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Wed, 26 Dec 2018 17:33:35 +0900 Subject: [PATCH] Remove useless cast: don't remove parentheses for lambda #KT-28641 Fixed --- .../org/jetbrains/kotlin/psi/KtPsiUtil.java | 5 ++++ .../removeUselessCastForLambdaInParens1.kt | 4 +++ ...moveUselessCastForLambdaInParens1.kt.after | 4 +++ .../removeUselessCastForLambdaInParens2.kt | 8 +++++ ...moveUselessCastForLambdaInParens2.kt.after | 8 +++++ .../removeUselessCastForLambdaInParens3.kt | 9 ++++++ ...moveUselessCastForLambdaInParens3.kt.after | 9 ++++++ .../removeUselessCastForLambdaInParens4.kt | 5 ++++ ...moveUselessCastForLambdaInParens4.kt.after | 5 ++++ .../removeUselessCastForLambdaInParens5.kt | 7 +++++ ...moveUselessCastForLambdaInParens5.kt.after | 7 +++++ .../removeUselessCastForLambdaInParens6.kt | 7 +++++ ...moveUselessCastForLambdaInParens6.kt.after | 7 +++++ .../idea/quickfix/QuickFixTestGenerated.java | 30 +++++++++++++++++++ 14 files changed, 115 insertions(+) create mode 100644 idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens1.kt create mode 100644 idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens1.kt.after create mode 100644 idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens2.kt create mode 100644 idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens2.kt.after create mode 100644 idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens3.kt create mode 100644 idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens3.kt.after create mode 100644 idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens4.kt create mode 100644 idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens4.kt.after create mode 100644 idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens5.kt create mode 100644 idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens5.kt.after create mode 100644 idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens6.kt create mode 100644 idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens6.kt.after diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/KtPsiUtil.java b/compiler/psi/src/org/jetbrains/kotlin/psi/KtPsiUtil.java index e257d797700..fe5bbc31771 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/KtPsiUtil.java +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/KtPsiUtil.java @@ -448,6 +448,11 @@ public class KtPsiUtil { } } + if (innerExpression instanceof KtLambdaExpression) { + PsiElement prevSibling = PsiTreeUtil.skipWhitespacesAndCommentsBackward(currentInner); + if (prevSibling != null && prevSibling.getText().endsWith(KtTokens.RPAR.getValue())) return true; + } + if (parentElement instanceof KtCallExpression && currentInner == ((KtCallExpression) parentElement).getCalleeExpression()) { KtCallExpression parentCall = (KtCallExpression) parentElement; if (innerExpression instanceof KtSimpleNameExpression) return false; diff --git a/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens1.kt b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens1.kt new file mode 100644 index 00000000000..6a59aee2ffc --- /dev/null +++ b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens1.kt @@ -0,0 +1,4 @@ +// "Remove useless cast" "true" +fun test() { + ({ "" } as () -> String) +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens1.kt.after b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens1.kt.after new file mode 100644 index 00000000000..e4038d4b644 --- /dev/null +++ b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens1.kt.after @@ -0,0 +1,4 @@ +// "Remove useless cast" "true" +fun test() { + { "" } +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens2.kt b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens2.kt new file mode 100644 index 00000000000..a9135199793 --- /dev/null +++ b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens2.kt @@ -0,0 +1,8 @@ +// "Remove useless cast" "true" +fun foo() {} + +fun test() { + foo() + // comment + ({ "" } as () -> String) +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens2.kt.after b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens2.kt.after new file mode 100644 index 00000000000..370e99c7de7 --- /dev/null +++ b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens2.kt.after @@ -0,0 +1,8 @@ +// "Remove useless cast" "true" +fun foo() {} + +fun test() { + foo() + // comment + ({ "" }) +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens3.kt b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens3.kt new file mode 100644 index 00000000000..ea4f8e4ccab --- /dev/null +++ b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens3.kt @@ -0,0 +1,9 @@ +// "Remove useless cast" "true" +class A { + fun foo() {} +} + +fun test() { + A().foo() + ({ "" } as () -> String) +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens3.kt.after b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens3.kt.after new file mode 100644 index 00000000000..e03f360d5a0 --- /dev/null +++ b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens3.kt.after @@ -0,0 +1,9 @@ +// "Remove useless cast" "true" +class A { + fun foo() {} +} + +fun test() { + A().foo() + ({ "" }) +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens4.kt b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens4.kt new file mode 100644 index 00000000000..e00d9d50169 --- /dev/null +++ b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens4.kt @@ -0,0 +1,5 @@ +// "Remove useless cast" "true" +fun test() { + class A() + ({ "" } as () -> String) +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens4.kt.after b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens4.kt.after new file mode 100644 index 00000000000..f9949426d4d --- /dev/null +++ b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens4.kt.after @@ -0,0 +1,5 @@ +// "Remove useless cast" "true" +fun test() { + class A() + ({ "" }) +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens5.kt b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens5.kt new file mode 100644 index 00000000000..1edb7b01f75 --- /dev/null +++ b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens5.kt @@ -0,0 +1,7 @@ +// "Remove useless cast" "true" +open class A + +fun test() { + class B : A() + ({ "" } as () -> String) +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens5.kt.after b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens5.kt.after new file mode 100644 index 00000000000..53ec2a04545 --- /dev/null +++ b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens5.kt.after @@ -0,0 +1,7 @@ +// "Remove useless cast" "true" +open class A + +fun test() { + class B : A() + ({ "" }) +} \ No newline at end of file diff --git a/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens6.kt b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens6.kt new file mode 100644 index 00000000000..d2d36bc830f --- /dev/null +++ b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens6.kt @@ -0,0 +1,7 @@ +// "Remove useless cast" "true" +fun foo() {} + +fun main() { + foo(); + ({ "" } as () -> String) +} diff --git a/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens6.kt.after b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens6.kt.after new file mode 100644 index 00000000000..905016fc723 --- /dev/null +++ b/idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens6.kt.after @@ -0,0 +1,7 @@ +// "Remove useless cast" "true" +fun foo() {} + +fun main() { + foo(); + { "" } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 93a83205d85..7efb743410a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -6674,6 +6674,36 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/expressions/removeUselessCast.kt"); } + @TestMetadata("removeUselessCastForLambdaInParens1.kt") + public void testRemoveUselessCastForLambdaInParens1() throws Exception { + runTest("idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens1.kt"); + } + + @TestMetadata("removeUselessCastForLambdaInParens2.kt") + public void testRemoveUselessCastForLambdaInParens2() throws Exception { + runTest("idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens2.kt"); + } + + @TestMetadata("removeUselessCastForLambdaInParens3.kt") + public void testRemoveUselessCastForLambdaInParens3() throws Exception { + runTest("idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens3.kt"); + } + + @TestMetadata("removeUselessCastForLambdaInParens4.kt") + public void testRemoveUselessCastForLambdaInParens4() throws Exception { + runTest("idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens4.kt"); + } + + @TestMetadata("removeUselessCastForLambdaInParens5.kt") + public void testRemoveUselessCastForLambdaInParens5() throws Exception { + runTest("idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens5.kt"); + } + + @TestMetadata("removeUselessCastForLambdaInParens6.kt") + public void testRemoveUselessCastForLambdaInParens6() throws Exception { + runTest("idea/testData/quickfix/expressions/removeUselessCastForLambdaInParens6.kt"); + } + @TestMetadata("removeUselessCastInParens.kt") public void testRemoveUselessCastInParens() throws Exception { runTest("idea/testData/quickfix/expressions/removeUselessCastInParens.kt");