diff --git a/packages/prettier-plugin-java/package.json b/packages/prettier-plugin-java/package.json index 997ca293f..2cfad3a74 100644 --- a/packages/prettier-plugin-java/package.json +++ b/packages/prettier-plugin-java/package.json @@ -1,6 +1,6 @@ { "name": "prettier-plugin-java", - "version": "2.7.3", + "version": "2.7.4", "description": "Prettier Java Plugin", "type": "module", "exports": { diff --git a/packages/prettier-plugin-java/src/printers/blocks-and-statements.ts b/packages/prettier-plugin-java/src/printers/blocks-and-statements.ts index aada5339c..4bdc44766 100644 --- a/packages/prettier-plugin-java/src/printers/blocks-and-statements.ts +++ b/packages/prettier-plugin-java/src/printers/blocks-and-statements.ts @@ -394,9 +394,9 @@ export default { return join(" ", blocks); }, - resourceSpecification(path, print, options) { + resourceSpecification(path, print) { const resources = [call(path, print, "resourceList")]; - if (options.trailingComma !== "none") { + if (path.node.children.Semicolon) { resources.push(ifBreak(";")); } return indentInParentheses(resources); diff --git a/packages/prettier-plugin-java/src/printers/helpers.ts b/packages/prettier-plugin-java/src/printers/helpers.ts index 8677cb152..bf0ec40c7 100644 --- a/packages/prettier-plugin-java/src/printers/helpers.ts +++ b/packages/prettier-plugin-java/src/printers/helpers.ts @@ -304,26 +304,30 @@ export function printClassType( path: AstPath, print: JavaPrintFn ) { - return flatMap( - path, - childPath => { - const { node, isLast } = childPath; - const child = [print(childPath)]; - if (isTerminal(node)) { - if (!isLast) { - child.push("."); + const { children } = path.node; + return definedKeys(children, ["annotation", "Identifier", "typeArguments"]) + .flatMap(child => + children[child]!.map((node, index) => ({ + child, + index, + startOffset: parser.locStart(node) + })) + ) + .sort((a, b) => a.startOffset - b.startOffset) + .flatMap(({ child, index: childIndex }, index, array) => { + const node = children[child]![childIndex]; + const next = array.at(index + 1); + const nextNode = next && children[next.child]![next.index]; + const docs = [call(path, print, child, childIndex)]; + if (nextNode) { + if (isNonTerminal(node)) { + docs.push(node.name === "annotation" ? " " : "."); + } else if (isTerminal(nextNode) || nextNode.name === "annotation") { + docs.push("."); } - } else if (node.name === "annotation") { - child.push(" "); } - return child; - }, - definedKeys(path.node.children, [ - "annotation", - "Identifier", - "typeArguments" - ]) - ); + return docs; + }); } export function isBinaryExpression(expression: ExpressionCstNode) { diff --git a/packages/prettier-plugin-java/test/unit-test/try_catch/_input.java b/packages/prettier-plugin-java/test/unit-test/try_catch/_input.java index cbd661ce1..d0ad1abf6 100644 --- a/packages/prettier-plugin-java/test/unit-test/try_catch/_input.java +++ b/packages/prettier-plugin-java/test/unit-test/try_catch/_input.java @@ -62,4 +62,14 @@ void multiResourceTry() { } } + void multiResourceTryWithTrailingSemi() { + try ( + FirstResource firstResource = new FirstResource(); + SecondResource secondResource = new SecondResource(); + ) { + return br.readLine(); + } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) { + System.out.println("Warning: Not breaking multi exceptions"); + } + } } diff --git a/packages/prettier-plugin-java/test/unit-test/try_catch/_output.java b/packages/prettier-plugin-java/test/unit-test/try_catch/_output.java index 5ff25f01c..6a192dd88 100644 --- a/packages/prettier-plugin-java/test/unit-test/try_catch/_output.java +++ b/packages/prettier-plugin-java/test/unit-test/try_catch/_output.java @@ -59,6 +59,17 @@ void resourceTry() { } void multiResourceTry() { + try ( + FirstResource firstResource = new FirstResource(); + SecondResource secondResource = new SecondResource() + ) { + return br.readLine(); + } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) { + System.out.println("Warning: Not breaking multi exceptions"); + } + } + + void multiResourceTryWithTrailingSemi() { try ( FirstResource firstResource = new FirstResource(); SecondResource secondResource = new SecondResource(); diff --git a/packages/prettier-plugin-java/test/unit-test/types/_input.java b/packages/prettier-plugin-java/test/unit-test/types/_input.java index 213d4b9f2..7163ef0ef 100644 --- a/packages/prettier-plugin-java/test/unit-test/types/_input.java +++ b/packages/prettier-plugin-java/test/unit-test/types/_input.java @@ -23,4 +23,8 @@ public void dataTypes() { String stringVariable; } + public void complexTypes() { + @A B.C.@E @F G.H h; + } + } diff --git a/packages/prettier-plugin-java/test/unit-test/types/_output.java b/packages/prettier-plugin-java/test/unit-test/types/_output.java index 425f492a4..8052ddedf 100644 --- a/packages/prettier-plugin-java/test/unit-test/types/_output.java +++ b/packages/prettier-plugin-java/test/unit-test/types/_output.java @@ -22,4 +22,9 @@ public void dataTypes() { Boolean booleanVariable; String stringVariable; } + + public void complexTypes() { + @A + B.C.@E @F G.H h; + } }