From 7f8d17a51a99ea864412e5ac551e467be00da791 Mon Sep 17 00:00:00 2001 From: Neil C Smith Date: Mon, 6 Jul 2026 11:04:26 +0100 Subject: [PATCH 1/2] Rename FormatingTest to ReformatterTest for visibility. --- .../save/{FormatingTest.java => ReformatterTest.java} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/{FormatingTest.java => ReformatterTest.java} (99%) diff --git a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/FormatingTest.java b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/ReformatterTest.java similarity index 99% rename from java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/FormatingTest.java rename to java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/ReformatterTest.java index e7caf2bd3467..03d80dec5278 100644 --- a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/FormatingTest.java +++ b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/ReformatterTest.java @@ -66,21 +66,21 @@ * * @author Dusan Balek */ -public class FormatingTest extends NbTestCase { +public class ReformatterTest extends NbTestCase { File testFile = null; private String sourceLevel = "1.8"; private static final List EXTRA_OPTIONS = new ArrayList<>(); /** Creates a new instance of FormatingTest */ - public FormatingTest(String name) { + public ReformatterTest(String name) { super(name); } public static NbTestSuite suite() { NbTestSuite suite = new NbTestSuite(); - suite.addTestSuite(FormatingTest.class); -// suite.addTest(new FormatingTest("testLabelled")); + suite.addTestSuite(ReformatterTest.class); +// suite.addTest(new ReformatterTest("testLabelled")); return suite; } From 54515fa8565153b24a9e3271e9dd28f0f135b66a Mon Sep 17 00:00:00 2001 From: Neil C Smith Date: Mon, 6 Jul 2026 11:10:57 +0100 Subject: [PATCH 2/2] Update Reformatter to honour case wrap settings with switch expressions. Update Reformatter to only add a newline to cases in switch expressions when wrapCaseStatements is set to WRAP_ALWAYS (default). Fixes #7326 --- .../modules/java/source/save/Reformatter.java | 9 ++- .../java/source/save/ReformatterTest.java | 68 +++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) diff --git a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java index 83772ffff2e6..acd9afbfb58b 100644 --- a/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java +++ b/java/java.source.base/src/org/netbeans/modules/java/source/save/Reformatter.java @@ -3047,7 +3047,14 @@ public Boolean visitCase(CaseTree node, Void p) { } } else if (caseBody != null) { - newline(); + switch (cs.wrapCaseStatements()) { + case WRAP_ALWAYS -> { + newline(); + } + default -> { + spaces(1, true); + } + } scan(caseBody, p); spaces(cs.spaceBeforeSemi() ? 1 : 0); accept(SEMICOLON); diff --git a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/ReformatterTest.java b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/ReformatterTest.java index 03d80dec5278..3bcb185d356a 100644 --- a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/ReformatterTest.java +++ b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/save/ReformatterTest.java @@ -2891,6 +2891,74 @@ public void testSwitchCaseDefault() throws Exception { reformat(doc, content, golden); } + public void testSwitchCaseExprWrapping() throws Exception { + try { + SourceVersion.valueOf("RELEASE_17"); //NOI18N + } catch (IllegalArgumentException ex) { + //OK, no RELEASE_17, skip test + return; + } + testFile = new File(getWorkDir(), "Test.java"); + TestUtilities.copyStringToFile(testFile, ""); + FileObject testSourceFO = FileUtil.toFileObject(testFile); + DataObject testSourceDO = DataObject.find(testSourceFO); + EditorCookie ec = (EditorCookie) testSourceDO.getCookie(EditorCookie.class); + final Document doc = ec.openDocument(); + doc.putProperty(Language.class, JavaTokenId.language()); + Preferences preferences = MimeLookup.getLookup(JavaTokenId.language().mimeType()).lookup(Preferences.class); + + String content + = """ + package p; + + public class Test { + + String choose(String str) { + IntStream iso = IntStream.of(1, 2); + return switch (str) { + case null -> "case with null formatting"; + case String string when (string.length() == iso.filter(i -> i / 2 == 0).count() || string.length() == 0) -> + "case with pattern matching + condition + lambda expression formatting"; + case String s when s.length() == 1 -> "case with pattern matching + condition formatting"; + case String s when s.length() == 2 -> { + yield "case with pattern matching + condition formatting"; + } + default -> "default formatting"; + }; + } + } + """; + + String golden + = """ + package p; + + public class Test { + + String choose(String str) { + IntStream iso = IntStream.of(1, 2); + return switch (str) { + case null -> + "case with null formatting"; + case String string when (string.length() == iso.filter(i -> i / 2 == 0).count() || string.length() == 0) -> + "case with pattern matching + condition + lambda expression formatting"; + case String s when s.length() == 1 -> + "case with pattern matching + condition formatting"; + case String s when s.length() == 2 -> { + yield "case with pattern matching + condition formatting"; + } + default -> + "default formatting"; + }; + } + } + """; + reformat(doc, content, golden); + preferences.put("wrapCaseStatements", CodeStyle.WrapStyle.WRAP_NEVER.name()); + reformat(doc, content, content); + + } + public void testSwitchCaseNullAndDefault() throws Exception { try { SourceVersion.valueOf("RELEASE_17"); //NOI18N