Skip to content

Commit 2b81885

Browse files
jtkieselclementdessoude
authored andcommitted
fix: support JLS type annotations style
1 parent 00c2abe commit 2b81885

File tree

6 files changed

+60
-17
lines changed

6 files changed

+60
-17
lines changed

packages/prettier-plugin-java/src/printers/printer-utils.ts

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -224,18 +224,19 @@ export function sortModifiers(modifiers: CstNode[] | undefined) {
224224

225225
/**
226226
* iterate in reverse order because we special-case
227-
* method annotations which come after all other
227+
* type annotations which come after all other
228228
* modifiers
229229
*/
230230
forEachRight(modifiers, modifier => {
231231
const isAnnotation = modifier.children.annotation !== undefined;
232-
const isMethodAnnotation =
232+
const isTypeAnnotation =
233233
isAnnotation &&
234234
(modifier.name === "methodModifier" ||
235-
modifier.name === "interfaceMethodModifier");
235+
modifier.name === "interfaceMethodModifier" ||
236+
modifier.name === "fieldModifier");
236237

237238
if (isAnnotation) {
238-
if (isMethodAnnotation && !hasOtherModifier) {
239+
if (isTypeAnnotation && !hasOtherModifier) {
239240
lastAnnotations.unshift(modifier);
240241
} else {
241242
firstAnnotations.unshift(modifier);
@@ -423,7 +424,8 @@ function needLineClassBodyDeclaration(
423424
classMemberDeclaration.children.fieldDeclaration[0];
424425
if (
425426
fieldDeclaration.children.fieldModifier !== undefined &&
426-
hasAnnotation(fieldDeclaration.children.fieldModifier)
427+
hasAnnotation(fieldDeclaration.children.fieldModifier) &&
428+
hasNonTrailingAnnotation(fieldDeclaration.children.fieldModifier)
427429
) {
428430
return true;
429431
}
@@ -442,7 +444,8 @@ function needLineInterfaceMemberDeclaration(
442444
const constantDeclaration = declaration.children.constantDeclaration[0];
443445
if (
444446
constantDeclaration.children.constantModifier !== undefined &&
445-
hasAnnotation(constantDeclaration.children.constantModifier)
447+
hasAnnotation(constantDeclaration.children.constantModifier) &&
448+
hasNonTrailingAnnotation(constantDeclaration.children.constantModifier)
446449
) {
447450
return true;
448451
}
@@ -486,27 +489,37 @@ function isInterfaceMemberASemicolon(
486489
}
487490

488491
function hasAnnotation(
489-
modifiers: FieldModifierCstNode[] | ConstantModifierCstNode[]
492+
modifiers: (
493+
| MethodModifierCstNode
494+
| InterfaceMethodModifierCstNode
495+
| FieldModifierCstNode
496+
| ConstantModifierCstNode
497+
)[]
490498
) {
491499
return modifiers.some(modifier => modifier.children.annotation !== undefined);
492500
}
493501

494502
/**
495-
* Return true if there is a method modifier that does not come after all other modifiers
503+
* Return true if there is a modifier that does not come after all other modifiers
496504
* It is useful to know if sortModifiers will add an annotation before other modifiers
497505
*
498-
* @param methodModifiers
506+
* @param modifiers
499507
* @returns {boolean}
500508
*/
501509
function hasNonTrailingAnnotation(
502-
methodModifiers: (MethodModifierCstNode | InterfaceMethodModifierCstNode)[]
510+
modifiers: (
511+
| MethodModifierCstNode
512+
| InterfaceMethodModifierCstNode
513+
| FieldModifierCstNode
514+
| ConstantModifierCstNode
515+
)[]
503516
) {
504517
const firstAnnotationIndex = findIndex(
505-
methodModifiers,
518+
modifiers,
506519
modifier => modifier.children.annotation !== undefined
507520
);
508521
const lastNonAnnotationIndex = findLastIndex(
509-
methodModifiers,
522+
modifiers,
510523
modifier => modifier.children.annotation === undefined
511524
);
512525

packages/prettier-plugin-java/test/unit-test/blank_lines/_input.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,16 @@ public class BlankLines {
1111
// Bug Fix: https://github.com/jhipster/prettier-java/issues/368
1212
private String fieldOne;
1313
private String fieldTwo;
14-
private @Nullable String shouldAddLineBeforeAndAfter;
14+
@Nullable private String shouldAddLineBeforeAndAfter;
1515
private String fieldThree;
1616
private String fieldFour;
1717

18+
private String a;
19+
private String b;
20+
private @Nullable String shouldNotAddBlankLines;
21+
private String d;
22+
private String e;
23+
1824
public int m = 4;
1925
public Constructors() {
2026
this(true);

packages/prettier-plugin-java/test/unit-test/blank_lines/_output.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ public class BlankLines {
1616
private String fieldThree;
1717
private String fieldFour;
1818

19+
private String a;
20+
private String b;
21+
private @Nullable String shouldNotAddBlankLines;
22+
private String d;
23+
private String e;
24+
1925
public int m = 4;
2026

2127
public Constructors() {

packages/prettier-plugin-java/test/unit-test/comments/class/_output.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -671,8 +671,7 @@ public ImmutableSet<C> columnKeySet() {
671671
return columnKeyToIndex.keySet();
672672
}
673673

674-
@MonotonicNonNull
675-
private transient ColumnMap columnMap;
674+
private transient @MonotonicNonNull ColumnMap columnMap;
676675

677676
@Override
678677
public Map<C, Map<R, V>> columnMap() {
@@ -762,8 +761,7 @@ public ImmutableSet<R> rowKeySet() {
762761
return rowKeyToIndex.keySet();
763762
}
764763

765-
@MonotonicNonNull
766-
private transient RowMap rowMap;
764+
private transient @MonotonicNonNull RowMap rowMap;
767765

768766
@Override
769767
public Map<R, Map<C, V>> rowMap() {

packages/prettier-plugin-java/test/unit-test/modifiers/_input.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@
3131
final @AnnotationOne static public @AnnotationTwo class ClassWithModifiers {
3232
transient @AnnotationOne final private @AnnotationTwo static String CONSTANT = "abc";
3333

34+
final @AnnotationOne static @AnnotationTwo protected @AnnotationThree String CONSTANT_2 = "123";
35+
36+
static @AnnotationOne public @AnnotationTwo String staticField;
37+
38+
public @AnnotationOne @AnnotationTwo String twoTrailingAnnotations;
39+
40+
@AnnotationOne String onlyAnnotations;
41+
3442
final @AnnotationOne static @AnnotationTwo synchronized protected @AnnotationThree String method() {
3543
return CONSTANT;
3644
}

packages/prettier-plugin-java/test/unit-test/modifiers/_output.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,18 @@ public static final class ClassWithModifiers {
4747
@AnnotationTwo
4848
private static final transient String CONSTANT = "abc";
4949

50+
@AnnotationOne
51+
@AnnotationTwo
52+
protected static final @AnnotationThree String CONSTANT_2 = "123";
53+
54+
@AnnotationOne
55+
public static @AnnotationTwo String staticField;
56+
57+
public @AnnotationOne @AnnotationTwo String twoTrailingAnnotations;
58+
59+
@AnnotationOne
60+
String onlyAnnotations;
61+
5062
@AnnotationOne
5163
@AnnotationTwo
5264
protected static final synchronized @AnnotationThree String method() {

0 commit comments

Comments
 (0)