diff --git a/packages/prettier-plugin-java/src/printers/types-values-and-variables.ts b/packages/prettier-plugin-java/src/printers/types-values-and-variables.ts index 9318115b..2b582e13 100644 --- a/packages/prettier-plugin-java/src/printers/types-values-and-variables.ts +++ b/packages/prettier-plugin-java/src/printers/types-values-and-variables.ts @@ -1,10 +1,12 @@ "use strict"; import forEach from "lodash/forEach"; +import { builders } from "prettier/doc"; import { concat, join } from "./prettier-builder"; import { printTokenWithComments } from "./comments/format-comments"; import { + putIntoBraces, rejectAndConcat, rejectAndJoin, rejectAndJoinSeps, @@ -41,6 +43,8 @@ import { isTypeArgumentsCstNode } from "../types/utils"; +const { line, softline } = builders; + export class TypesValuesAndVariablesPrettierVisitor extends BaseCstPrettierPrinter { primitiveType(ctx: PrimitiveTypeCtx) { const annotations = this.mapVisit(ctx.annotation); @@ -196,12 +200,17 @@ export class TypesValuesAndVariablesPrettierVisitor extends BaseCstPrettierPrint typeArguments(ctx: TypeArgumentsCtx) { const typeArgumentList = this.visit(ctx.typeArgumentList); - return rejectAndConcat([ctx.Less[0], typeArgumentList, ctx.Greater[0]]); + return putIntoBraces( + typeArgumentList, + softline, + ctx.Less[0], + ctx.Greater[0] + ); } typeArgumentList(ctx: TypeArgumentListCtx) { const typeArguments = this.mapVisit(ctx.typeArgument); - const commas = ctx.Comma ? ctx.Comma.map(elt => concat([elt, " "])) : []; + const commas = ctx.Comma ? ctx.Comma.map(elt => concat([elt, line])) : []; return rejectAndJoinSeps(commas, typeArguments); } diff --git a/packages/prettier-plugin-java/test/unit-test/require-pragma/invalid-pragma/_output.java b/packages/prettier-plugin-java/test/unit-test/require-pragma/invalid-pragma/_output.java index b7917336..d438919c 100644 --- a/packages/prettier-plugin-java/test/unit-test/require-pragma/invalid-pragma/_output.java +++ b/packages/prettier-plugin-java/test/unit-test/require-pragma/invalid-pragma/_output.java @@ -1,15 +1,15 @@ /** * @surely this is invalid */ - public enum Enum { - - SOME_ENUM, ANOTHER_ENUM, LAST_ENUM; - +public enum Enum { + SOME_ENUM, + ANOTHER_ENUM, + LAST_ENUM, } public enum Enum { - - THIS_IS_GOOD("abc"), THIS_IS_FINE("abc"); + THIS_IS_GOOD("abc"), + THIS_IS_FINE("abc"); public static final String thisWillBeDeleted = "DELETED"; @@ -22,15 +22,12 @@ public Enum(String value) { public String toString() { return "STRING"; } - } class CLassWithEnum { public static enum VALID_THINGS { - - FIRST, SECOND - + FIRST, + SECOND, } - } diff --git a/packages/prettier-plugin-java/test/unit-test/variables/_input.java b/packages/prettier-plugin-java/test/unit-test/variables/_input.java index 77d5563e..0bd6ab89 100644 --- a/packages/prettier-plugin-java/test/unit-test/variables/_input.java +++ b/packages/prettier-plugin-java/test/unit-test/variables/_input.java @@ -156,6 +156,21 @@ public void breakAfterEquals() { : new Object(); } + public void breakOnTypeArguments() { + ExtremelyLongAndObnoxiousClassName variable; + + ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName> variable; + + ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName> variable = + new MyExtremelyLongAndObnoxiousClassName<>(); + + ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName> variable = + new MyExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName>(); + + ExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName> aParticularlyLongAndObnoxiousNameForIllustrativePurposes = + new MyExtremelyLongAndObnoxiousClassName, ExtremelyLongAndObnoxiousClassName>(); + } + public methodWithVariableInitializationWithComments() { Map map = // there is a random comment on this line up here diff --git a/packages/prettier-plugin-java/test/unit-test/variables/_output.java b/packages/prettier-plugin-java/test/unit-test/variables/_output.java index a301d365..918b8066 100644 --- a/packages/prettier-plugin-java/test/unit-test/variables/_output.java +++ b/packages/prettier-plugin-java/test/unit-test/variables/_output.java @@ -20,10 +20,15 @@ public class Variables { "ghi", "jkl" ); - private Map genericVariable4 = - new HashMap(); - private Map genericVariable5 = - new HashMap(); + private Map genericVariable4 = new HashMap< + Integer, + String + >(); + private Map genericVariable5 = new HashMap< + Integer, + String, + Integer + >(); private Object variableWithComment1 /* comment */= new Object(); private Object variableWithComment2 = /* comment */new Object(); @@ -224,6 +229,57 @@ public void breakAfterEquals() { : new Object(); } + public void breakOnTypeArguments() { + ExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName + > variable; + + ExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName, + ExtremelyLongAndObnoxiousClassName + >, + ExtremelyLongAndObnoxiousClassName + > variable; + + ExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName, + ExtremelyLongAndObnoxiousClassName + >, + ExtremelyLongAndObnoxiousClassName + > variable = new MyExtremelyLongAndObnoxiousClassName<>(); + + ExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName, + ExtremelyLongAndObnoxiousClassName + >, + ExtremelyLongAndObnoxiousClassName + > variable = new MyExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName, + ExtremelyLongAndObnoxiousClassName + >, + ExtremelyLongAndObnoxiousClassName + >(); + + ExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName, + ExtremelyLongAndObnoxiousClassName + >, + ExtremelyLongAndObnoxiousClassName + > aParticularlyLongAndObnoxiousNameForIllustrativePurposes = + new MyExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName< + ExtremelyLongAndObnoxiousClassName, + ExtremelyLongAndObnoxiousClassName + >, + ExtremelyLongAndObnoxiousClassName + >(); + } + public methodWithVariableInitializationWithComments() { Map map = // there is a random comment on this line up here