From ccc6c0ee82ce2054503e66c710606c8fa0b48bdb Mon Sep 17 00:00:00 2001 From: Mikhail Pyltsin Date: Thu, 4 Sep 2025 11:36:14 +0200 Subject: [PATCH] =?UTF-8?q?[java]=20IDEA-378236=20Double-clicking=20the=20?= =?UTF-8?q?closing=20bracket=20line=20of=20a=20switch=20block=20doesn?= =?UTF-8?q?=E2=80=99t=20select=20the=20entire=20block=20inside=20the=20bra?= =?UTF-8?q?ckets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - exclude braces from selection GitOrigin-RevId: 1a0d1d6a237e9069b60321668c2ef9f570a82464 --- .../wordSelection/CaseStatementsSelectioner.java | 3 +++ .../AbstractBasicJavaSelectWordTest.java | 4 ++++ .../selectWordAction/switchEnd1/after1.java | 15 +++++++++++++++ .../selectWordAction/switchEnd1/before.java | 15 +++++++++++++++ .../selectWordAction/switchEnd2/after1.java | 15 +++++++++++++++ .../selectWordAction/switchEnd2/before.java | 15 +++++++++++++++ .../selectWordAction/switchStart1/after1.java | 15 +++++++++++++++ .../selectWordAction/switchStart1/before.java | 15 +++++++++++++++ .../selectWordAction/switchStart2/after1.java | 15 +++++++++++++++ .../selectWordAction/switchStart2/before.java | 15 +++++++++++++++ 10 files changed, 127 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/selectWordAction/switchEnd1/after1.java create mode 100644 java/java-tests/testData/codeInsight/selectWordAction/switchEnd1/before.java create mode 100644 java/java-tests/testData/codeInsight/selectWordAction/switchEnd2/after1.java create mode 100644 java/java-tests/testData/codeInsight/selectWordAction/switchEnd2/before.java create mode 100644 java/java-tests/testData/codeInsight/selectWordAction/switchStart1/after1.java create mode 100644 java/java-tests/testData/codeInsight/selectWordAction/switchStart1/before.java create mode 100644 java/java-tests/testData/codeInsight/selectWordAction/switchStart2/after1.java create mode 100644 java/java-tests/testData/codeInsight/selectWordAction/switchStart2/before.java diff --git a/java/java-frontback-impl/src/com/intellij/codeInsight/editorActions/wordSelection/CaseStatementsSelectioner.java b/java/java-frontback-impl/src/com/intellij/codeInsight/editorActions/wordSelection/CaseStatementsSelectioner.java index cb01b5afffb7..29dadbc0595d 100644 --- a/java/java-frontback-impl/src/com/intellij/codeInsight/editorActions/wordSelection/CaseStatementsSelectioner.java +++ b/java/java-frontback-impl/src/com/intellij/codeInsight/editorActions/wordSelection/CaseStatementsSelectioner.java @@ -5,6 +5,7 @@ import com.intellij.lang.ASTNode; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.util.TextRange; +import com.intellij.psi.JavaTokenType; import com.intellij.psi.PsiElement; import com.intellij.psi.TokenType; import com.intellij.psi.impl.source.BasicJavaAstTreeUtil; @@ -22,6 +23,8 @@ public final class CaseStatementsSelectioner extends AbstractBasicBackBasicSelec public boolean canSelect(@NotNull PsiElement e) { ASTNode node = BasicJavaAstTreeUtil.toNode(e); return node != null && + !BasicJavaAstTreeUtil.is(node, JavaTokenType.RBRACE) && + !BasicJavaAstTreeUtil.is(node, JavaTokenType.LBRACE) && BasicJavaAstTreeUtil.is(node.getTreeParent(), BASIC_CODE_BLOCK) && BasicJavaAstTreeUtil.is(node.getTreeParent().getTreeParent(), BASIC_SWITCH_STATEMENT); } diff --git a/java/java-frontback-tests/testSrc/com/intellij/codeInsight/AbstractBasicJavaSelectWordTest.java b/java/java-frontback-tests/testSrc/com/intellij/codeInsight/AbstractBasicJavaSelectWordTest.java index 4fbe04f3d7ca..4b67963fce86 100644 --- a/java/java-frontback-tests/testSrc/com/intellij/codeInsight/AbstractBasicJavaSelectWordTest.java +++ b/java/java-frontback-tests/testSrc/com/intellij/codeInsight/AbstractBasicJavaSelectWordTest.java @@ -52,6 +52,10 @@ public abstract class AbstractBasicJavaSelectWordTest extends SelectWordTestBase public void testSwitch() { doTest("java"); } public void testSwitch2() { doTest("java"); } public void testSwitch3() { doTest("java"); } + public void testSwitchStart1() { doTest("java"); } + public void testSwitchStart2() { doTest("java"); } + public void testSwitchEnd1() { doTest("java"); } + public void testSwitchEnd2() { doTest("java"); } public void testJavaStartLine() { doTest("java"); } public void testJavaEndLine() { doTest("java", false); } diff --git a/java/java-tests/testData/codeInsight/selectWordAction/switchEnd1/after1.java b/java/java-tests/testData/codeInsight/selectWordAction/switchEnd1/after1.java new file mode 100644 index 000000000000..975d4b2734f7 --- /dev/null +++ b/java/java-tests/testData/codeInsight/selectWordAction/switchEnd1/after1.java @@ -0,0 +1,15 @@ +public class TestSwitchSelect +{ + public static void main(String[] args) + { + switch (type) { + case 1: + break; + + case 2: + break; + default: + break; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/selectWordAction/switchEnd1/before.java b/java/java-tests/testData/codeInsight/selectWordAction/switchEnd1/before.java new file mode 100644 index 000000000000..6bd0fa86b80b --- /dev/null +++ b/java/java-tests/testData/codeInsight/selectWordAction/switchEnd1/before.java @@ -0,0 +1,15 @@ +public class TestSwitchSelect +{ + public static void main(String[] args) + { + switch (type) { + case 1: + break; + + case 2: + break; + default: + break; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/selectWordAction/switchEnd2/after1.java b/java/java-tests/testData/codeInsight/selectWordAction/switchEnd2/after1.java new file mode 100644 index 000000000000..c4685b3f050e --- /dev/null +++ b/java/java-tests/testData/codeInsight/selectWordAction/switchEnd2/after1.java @@ -0,0 +1,15 @@ +public class TestSwitchSelect +{ + public static void main(String[] args) + { + switch (type) { + case 1: + break; + + case 2: + break; + default: + break; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/selectWordAction/switchEnd2/before.java b/java/java-tests/testData/codeInsight/selectWordAction/switchEnd2/before.java new file mode 100644 index 000000000000..6a556d74ae33 --- /dev/null +++ b/java/java-tests/testData/codeInsight/selectWordAction/switchEnd2/before.java @@ -0,0 +1,15 @@ +public class TestSwitchSelect +{ + public static void main(String[] args) + { + switch (type) { + case 1: + break; + + case 2: + break; + default: + break; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/selectWordAction/switchStart1/after1.java b/java/java-tests/testData/codeInsight/selectWordAction/switchStart1/after1.java new file mode 100644 index 000000000000..aad5919acf1f --- /dev/null +++ b/java/java-tests/testData/codeInsight/selectWordAction/switchStart1/after1.java @@ -0,0 +1,15 @@ +public class TestSwitchSelect +{ + public static void main(String[] args) + { + switch (type) { + case 1: + break; + + case 2: + break; + default: + break; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/selectWordAction/switchStart1/before.java b/java/java-tests/testData/codeInsight/selectWordAction/switchStart1/before.java new file mode 100644 index 000000000000..c6196d036fcd --- /dev/null +++ b/java/java-tests/testData/codeInsight/selectWordAction/switchStart1/before.java @@ -0,0 +1,15 @@ +public class TestSwitchSelect +{ + public static void main(String[] args) + { + switch (type) { + case 1: + break; + + case 2: + break; + default: + break; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/selectWordAction/switchStart2/after1.java b/java/java-tests/testData/codeInsight/selectWordAction/switchStart2/after1.java new file mode 100644 index 000000000000..ffa6352a2f8f --- /dev/null +++ b/java/java-tests/testData/codeInsight/selectWordAction/switchStart2/after1.java @@ -0,0 +1,15 @@ +public class TestSwitchSelect +{ + public static void main(String[] args) + { + switch (type) { + case 1: + break; + + case 2: + break; + default: + break; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/selectWordAction/switchStart2/before.java b/java/java-tests/testData/codeInsight/selectWordAction/switchStart2/before.java new file mode 100644 index 000000000000..2ca9db6473d6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/selectWordAction/switchStart2/before.java @@ -0,0 +1,15 @@ +public class TestSwitchSelect +{ + public static void main(String[] args) + { + switch (type) { + case 1: + break; + + case 2: + break; + default: + break; + } + } +} \ No newline at end of file