From 86d132339022756a3cb547ebbe1f8ce1f108d759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Mon, 20 Apr 2026 19:20:42 +0200 Subject: [PATCH] JS: reformatting fails for classes that contain a static initializer static initializers have no identifier so don't try to scan them Closes: #9339 --- .../editor/formatter/JsFormatVisitor.java | 16 +++++++++------- .../formatter/staticClassInitializer1.js | 9 +++++++++ .../staticClassInitializer1.js.formatted | 9 +++++++++ .../editor/formatter/JsFormatterTest.java | 4 ++++ 4 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 webcommon/javascript2.editor/test/unit/data/testfiles/formatter/staticClassInitializer1.js create mode 100644 webcommon/javascript2.editor/test/unit/data/testfiles/formatter/staticClassInitializer1.js.formatted diff --git a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/formatter/JsFormatVisitor.java b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/formatter/JsFormatVisitor.java index d629e6b20af5..d9055e96f9ed 100644 --- a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/formatter/JsFormatVisitor.java +++ b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/formatter/JsFormatVisitor.java @@ -969,13 +969,15 @@ public boolean enterVarNode(VarNode varNode) { @Override public boolean enterClassElement(ClassElement propertyNode) { - FormatToken colon = tokenUtils.getNextToken(getFinish(propertyNode.getKey()), - JsTokenId.OPERATOR_COLON, getFinish(propertyNode)); - if (colon != null) { - TokenUtils.appendToken(colon, FormatToken.forFormat(FormatToken.Kind.AFTER_PROPERTY_OPERATOR)); - FormatToken before = colon.previous(); - if (before != null) { - TokenUtils.appendTokenAfterLastVirtual(before, FormatToken.forFormat(FormatToken.Kind.BEFORE_PROPERTY_OPERATOR)); + if (propertyNode.getKey() != null) { + FormatToken colon = tokenUtils.getNextToken(getFinish(propertyNode.getKey()), + JsTokenId.OPERATOR_COLON, getFinish(propertyNode)); + if (colon != null) { + TokenUtils.appendToken(colon, FormatToken.forFormat(FormatToken.Kind.AFTER_PROPERTY_OPERATOR)); + FormatToken before = colon.previous(); + if (before != null) { + TokenUtils.appendTokenAfterLastVirtual(before, FormatToken.forFormat(FormatToken.Kind.BEFORE_PROPERTY_OPERATOR)); + } } } return super.enterPropertyNode(propertyNode); diff --git a/webcommon/javascript2.editor/test/unit/data/testfiles/formatter/staticClassInitializer1.js b/webcommon/javascript2.editor/test/unit/data/testfiles/formatter/staticClassInitializer1.js new file mode 100644 index 000000000000..e9fdff9dce93 --- /dev/null +++ b/webcommon/javascript2.editor/test/unit/data/testfiles/formatter/staticClassInitializer1.js @@ -0,0 +1,9 @@ +class Dummy { + #privateField; + constructor(v) { + this.#privateField = v; + } + static { + console.log("Dummy"); + } + } diff --git a/webcommon/javascript2.editor/test/unit/data/testfiles/formatter/staticClassInitializer1.js.formatted b/webcommon/javascript2.editor/test/unit/data/testfiles/formatter/staticClassInitializer1.js.formatted new file mode 100644 index 000000000000..054903448d51 --- /dev/null +++ b/webcommon/javascript2.editor/test/unit/data/testfiles/formatter/staticClassInitializer1.js.formatted @@ -0,0 +1,9 @@ +class Dummy { + #privateField; + constructor(v) { + this.#privateField = v; + } + static { + console.log("Dummy"); + } +} diff --git a/webcommon/javascript2.editor/test/unit/src/org/netbeans/modules/javascript2/editor/formatter/JsFormatterTest.java b/webcommon/javascript2.editor/test/unit/src/org/netbeans/modules/javascript2/editor/formatter/JsFormatterTest.java index d674099ef127..d619cbf19d7a 100644 --- a/webcommon/javascript2.editor/test/unit/src/org/netbeans/modules/javascript2/editor/formatter/JsFormatterTest.java +++ b/webcommon/javascript2.editor/test/unit/src/org/netbeans/modules/javascript2/editor/formatter/JsFormatterTest.java @@ -2543,4 +2543,8 @@ public void testCommentAtTheEdnOfLine() throws Exception { "} //comment2\n" + "p = stripName(p);", null); } + + public void testFormatStaticClassInitializer() throws Exception { + reformatFileContents("testfiles/formatter/staticClassInitializer1.js",new IndentPrefs(4, 4)); + } }