From 46907f861a8a94bc9c745c8ccb5929fb5f36f1da Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 11 Jun 2020 18:20:32 +0900 Subject: [PATCH] Extend Selection: don't select lambda parameters if lambda is multiple lines (#2586) #KT-29364 Fixed --- .../wordSelection/KotlinStatementGroupSelectioner.kt | 2 ++ .../testData/wordSelection/ValueParametersInLambda2/0.kt | 5 +++++ .../testData/wordSelection/ValueParametersInLambda2/1.kt | 5 +++++ .../testData/wordSelection/ValueParametersInLambda2/2.kt | 5 +++++ .../testData/wordSelection/ValueParametersInLambda2/3.kt | 5 +++++ .../testData/wordSelection/ValueParametersInLambda2/4.kt | 5 +++++ .../testData/wordSelection/ValueParametersInLambda3/0.kt | 9 +++++++++ .../testData/wordSelection/ValueParametersInLambda3/1.kt | 9 +++++++++ .../testData/wordSelection/ValueParametersInLambda3/2.kt | 9 +++++++++ .../testData/wordSelection/ValueParametersInLambda3/3.kt | 9 +++++++++ .../testData/wordSelection/ValueParametersInLambda3/4.kt | 9 +++++++++ .../testData/wordSelection/ValueParametersInLambda3/5.kt | 9 +++++++++ .../testData/wordSelection/ValueParametersInLambda4/0.kt | 9 +++++++++ .../testData/wordSelection/ValueParametersInLambda4/1.kt | 9 +++++++++ .../testData/wordSelection/ValueParametersInLambda4/2.kt | 9 +++++++++ .../testData/wordSelection/ValueParametersInLambda4/3.kt | 9 +++++++++ .../testData/wordSelection/ValueParametersInLambda4/4.kt | 9 +++++++++ .../testData/wordSelection/ValueParametersInLambda4/5.kt | 9 +++++++++ .../org/jetbrains/kotlin/idea/WordSelectionTest.java | 6 ++++++ 19 files changed, 141 insertions(+) create mode 100644 idea/testData/wordSelection/ValueParametersInLambda2/0.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda2/1.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda2/2.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda2/3.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda2/4.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda3/0.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda3/1.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda3/2.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda3/3.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda3/4.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda3/5.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda4/0.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda4/1.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda4/2.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda4/3.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda4/4.kt create mode 100644 idea/testData/wordSelection/ValueParametersInLambda4/5.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/editor/wordSelection/KotlinStatementGroupSelectioner.kt b/idea/src/org/jetbrains/kotlin/idea/editor/wordSelection/KotlinStatementGroupSelectioner.kt index 17510522788..c0e14d47ee7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/editor/wordSelection/KotlinStatementGroupSelectioner.kt +++ b/idea/src/org/jetbrains/kotlin/idea/editor/wordSelection/KotlinStatementGroupSelectioner.kt @@ -23,6 +23,7 @@ import com.intellij.psi.PsiComment import com.intellij.psi.PsiElement import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.impl.source.tree.LeafPsiElement +import org.jetbrains.kotlin.idea.refactoring.getLineNumber import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.siblings @@ -44,6 +45,7 @@ class KotlinStatementGroupSelectioner : ExtendWordSelectionHandlerBase() { .firstOrNull { // find preceding '{' or blank line it is LeafPsiElement && it.elementType == KtTokens.LBRACE || it is PsiWhiteSpace && it.getText()!!.count { it == '\n' } > 1 + || (it is LeafPsiElement && it.elementType == KtTokens.ARROW && e.getLineNumber() != it.getLineNumber()) } ?.siblings(forward = true, withItself = false) ?.dropWhile { it is PsiWhiteSpace } // and take first non-whitespace element after it diff --git a/idea/testData/wordSelection/ValueParametersInLambda2/0.kt b/idea/testData/wordSelection/ValueParametersInLambda2/0.kt new file mode 100644 index 00000000000..50e3140b9c7 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda2/0.kt @@ -0,0 +1,5 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> it + 1 } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda2/1.kt b/idea/testData/wordSelection/ValueParametersInLambda2/1.kt new file mode 100644 index 00000000000..1e69b11c710 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda2/1.kt @@ -0,0 +1,5 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> it + 1 } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda2/2.kt b/idea/testData/wordSelection/ValueParametersInLambda2/2.kt new file mode 100644 index 00000000000..062261ea008 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda2/2.kt @@ -0,0 +1,5 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> it + 1 } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda2/3.kt b/idea/testData/wordSelection/ValueParametersInLambda2/3.kt new file mode 100644 index 00000000000..b05396a3e87 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda2/3.kt @@ -0,0 +1,5 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> it + 1 } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda2/4.kt b/idea/testData/wordSelection/ValueParametersInLambda2/4.kt new file mode 100644 index 00000000000..64df0457a46 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda2/4.kt @@ -0,0 +1,5 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> it + 1 } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda3/0.kt b/idea/testData/wordSelection/ValueParametersInLambda3/0.kt new file mode 100644 index 00000000000..89c66194a27 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda3/0.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> + it + 1 + + it + 1 + } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda3/1.kt b/idea/testData/wordSelection/ValueParametersInLambda3/1.kt new file mode 100644 index 00000000000..c7e06614660 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda3/1.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> + it + 1 + + it + 1 + } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda3/2.kt b/idea/testData/wordSelection/ValueParametersInLambda3/2.kt new file mode 100644 index 00000000000..b60e87f3d03 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda3/2.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> + it + 1 + + it + 1 + } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda3/3.kt b/idea/testData/wordSelection/ValueParametersInLambda3/3.kt new file mode 100644 index 00000000000..8e9c21e0f67 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda3/3.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> + it + 1 + + it + 1 + } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda3/4.kt b/idea/testData/wordSelection/ValueParametersInLambda3/4.kt new file mode 100644 index 00000000000..54dd1f6929b --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda3/4.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> + it + 1 + + it + 1 + } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda3/5.kt b/idea/testData/wordSelection/ValueParametersInLambda3/5.kt new file mode 100644 index 00000000000..3768f5e0c17 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda3/5.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> + it + 1 + + it + 1 + } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda4/0.kt b/idea/testData/wordSelection/ValueParametersInLambda4/0.kt new file mode 100644 index 00000000000..4ffd34832d2 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda4/0.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> + it + 1 + + it + 1 + } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda4/1.kt b/idea/testData/wordSelection/ValueParametersInLambda4/1.kt new file mode 100644 index 00000000000..6abb1c62ab1 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda4/1.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> + it + 1 + + it + 1 + } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda4/2.kt b/idea/testData/wordSelection/ValueParametersInLambda4/2.kt new file mode 100644 index 00000000000..dbe869084ec --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda4/2.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> + it + 1 + + it + 1 + } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda4/3.kt b/idea/testData/wordSelection/ValueParametersInLambda4/3.kt new file mode 100644 index 00000000000..cecb6736815 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda4/3.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> + it + 1 + + it + 1 + } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda4/4.kt b/idea/testData/wordSelection/ValueParametersInLambda4/4.kt new file mode 100644 index 00000000000..7692c08856c --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda4/4.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> + it + 1 + + it + 1 + } +} \ No newline at end of file diff --git a/idea/testData/wordSelection/ValueParametersInLambda4/5.kt b/idea/testData/wordSelection/ValueParametersInLambda4/5.kt new file mode 100644 index 00000000000..f15a5f1a924 --- /dev/null +++ b/idea/testData/wordSelection/ValueParametersInLambda4/5.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> Int) {} + +fun test() { + foo { it -> + it + 1 + + it + 1 + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/WordSelectionTest.java b/idea/tests/org/jetbrains/kotlin/idea/WordSelectionTest.java index ae3939e7844..ef0b0adf09b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/WordSelectionTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/WordSelectionTest.java @@ -39,6 +39,12 @@ public class WordSelectionTest extends KotlinLightCodeInsightFixtureTestCase { public void testValueParametersInLambda() { doTest(); } + public void testValueParametersInLambda2() { doTest(); } + + public void testValueParametersInLambda3() { doTest(); } + + public void testValueParametersInLambda4() { doTest(); } + public void testDocComment() { doTest(); } public void testDocCommentOneLine() { doTest(); }