Don't fill type parameter declaration lists Like formal parameter declaration lists, class type parameter declarations should switch to one declaration per line after the first line. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=118391112
diff --git a/core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java b/core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java index 223ccc2..f13e3d4 100644 --- a/core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java +++ b/core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java
@@ -1264,12 +1264,13 @@ { boolean first = true; if (!node.typeParameters().isEmpty()) { - visitTypeParameters(node.typeParameters(), ZERO, BreakOrNot.NO); + token("<"); + typeParametersRest(node.typeParameters(), plusFour); first = false; } boolean openedNameAndTypeScope = false; - // constructor-like declarations that don't match the name of the enclosing class are + // constructor-like declarations that don't match the name of the enclosing class are // parsed as method declarations with a null return type if (!node.isConstructor() && node.getReturnType2() != null) { if (!first) { @@ -1864,22 +1865,22 @@ visitModifiers(node.modifiers(), Direction.VERTICAL, Optional.<BreakTag>absent()); boolean hasSuperclassType = node.getSuperclassType() != null; boolean hasSuperInterfaceTypes = !node.superInterfaceTypes().isEmpty(); - builder.open(ZERO); builder.addAll(breaks); token(node.isInterface() ? "interface" : "class"); builder.space(); visit(node.getName()); if (!node.typeParameters().isEmpty()) { - visitTypeParameters( - node.typeParameters(), hasSuperclassType || hasSuperInterfaceTypes ? plusFour : ZERO, - BreakOrNot.YES); + token("<"); } - if (hasSuperclassType || hasSuperInterfaceTypes) { - builder.open(plusFour); + builder.open(plusFour); + { + if (!node.typeParameters().isEmpty()) { + typeParametersRest( + node.typeParameters(), hasSuperclassType || hasSuperInterfaceTypes ? plusFour : ZERO); + } if (hasSuperclassType) { builder.breakToFill(" "); token("extends"); - // TODO(b/20761216): using a non-breaking space here could cause >100 char lines builder.space(); node.getSuperclassType().accept(this); } @@ -1899,7 +1900,6 @@ } builder.close(); } - builder.close(); } builder.close(); if (node.bodyDeclarations() == null) { @@ -2501,29 +2501,27 @@ ReceiverParameter.NO); } - /** Helper method for {@link MethodDeclaration}s and {@link TypeDeclaration}s. */ - private void visitTypeParameters( - List<TypeParameter> nodes, Indent plusIndent, BreakOrNot breakAfterOpen) { - if (!nodes.isEmpty()) { - token("<"); - builder.open(plusIndent); - builder.open(plusFour); - if (breakAfterOpen.isYes()) { - builder.breakOp(); + /** + * Helper method for formatting the type parameter list of a {@link MethodDeclaration} or + * {@link TypeDeclaration}. Does not omit the leading '<', which should be associated with + * the type name. + */ + private void typeParametersRest(List<TypeParameter> typeParameters, Indent plusIndent) { + builder.open(plusIndent); + builder.breakOp(); + builder.open(ZERO); + boolean first = true; + for (TypeParameter typeParameter : typeParameters) { + if (!first) { + token(","); + builder.breakOp(" "); } - boolean first = true; - for (TypeParameter node : nodes) { - if (!first) { - token(","); - builder.breakToFill(" "); - } - visit(node); - first = false; - } - builder.close(); - builder.close(); - token(">"); + typeParameter.accept(this); + first = false; } + token(">"); + builder.close(); + builder.close(); } /** Helper method for {@link UnionType}s. */
diff --git a/core/src/test/resources/com/google/googlejavaformat/java/testdata/B21305044.output b/core/src/test/resources/com/google/googlejavaformat/java/testdata/B21305044.output index aaf6546..32296d2 100644 --- a/core/src/test/resources/com/google/googlejavaformat/java/testdata/B21305044.output +++ b/core/src/test/resources/com/google/googlejavaformat/java/testdata/B21305044.output
@@ -1,9 +1,10 @@ class B21305044 { class T< - @Nullable X extends @Nullable Object, @Nullable Y extends @Nullable Object, - @Nullable Z extends @Nullable Object> extends Function<@Nullable X, @Nullable Y> - implements Predicate<@Nullable Z> { + @Nullable X extends @Nullable Object, + @Nullable Y extends @Nullable Object, + @Nullable Z extends @Nullable Object> + extends Function<@Nullable X, @Nullable Y> implements Predicate<@Nullable Z> { public T(@Nullable T this, List<@Nullable X> xs) {} public T(@Nullable T B21305044.this, List<@Nullable X> xs) {}
diff --git a/core/src/test/resources/com/google/googlejavaformat/java/testdata/B26293162.input b/core/src/test/resources/com/google/googlejavaformat/java/testdata/B26293162.input new file mode 100644 index 0000000..691bebe --- /dev/null +++ b/core/src/test/resources/com/google/googlejavaformat/java/testdata/B26293162.input
@@ -0,0 +1,43 @@ +class Xxxx { + + public static final class XxxxXxxxxxxxXxxxxxxxxXxxxxxXxxxxxxx< + X, X, X extends XxxxxxxxxXxxxxxxxxXxxxxxxx<X, X>> { + + int x; + } + + public static final class XxxxXxxxxxxxXxxxxxxxxXxxxxxXxxxxxxx< + X, X, X extends XxxxxxxxxXxxxxxxxxXxxxxxxx<X, X>> extends Xxxxx { + + int x; + } + + class XxxxxxxxXxxxxxxxxXxxxXxxx< + X extends XxxxxxxxxXxxxxxx, X extends XxxxxxxxxXxxxxx, X extends Xxxxxxxxxxxxx, X> + extends XxxxXxxx { + + int x; + } + + @Xxx + class XxxxxxxxxxxXxxxxxXx< + X extends XxxxxxXxxxxxxxxxxXxxxxxXxxxxx, X extends Xxxxxxx, XX extends Xxxxxxxxx<X>> + extends XxxxxxxxXx<X, XX> { + + int x; + } + + static class XxxxxXxxxxXxxx< + XXXXX extends XxxxxxxxXxxxxxx<XXXXX>, XXX extends XxxxxxxxXxxxxxx<XXX>> { + + int x; + } + + @Xxx + class XxxxxxxxxxxXxxxxxXx< + X extends XxxxxxXxxxxxxxxxxXxxxxxXxxxxx, X extends Xxxxxxx, X extends Xxxxxxx, + XX extends Xxxxxxxxx<X>> extends XxxxxxxxXx<X, XX> { + + int x; + } +}
diff --git a/core/src/test/resources/com/google/googlejavaformat/java/testdata/B26293162.output b/core/src/test/resources/com/google/googlejavaformat/java/testdata/B26293162.output new file mode 100644 index 0000000..96361ef --- /dev/null +++ b/core/src/test/resources/com/google/googlejavaformat/java/testdata/B26293162.output
@@ -0,0 +1,47 @@ +class Xxxx { + + public static final class XxxxXxxxxxxxXxxxxxxxxXxxxxxXxxxxxxx< + X, X, X extends XxxxxxxxxXxxxxxxxxXxxxxxxx<X, X>> { + + int x; + } + + public static final class XxxxXxxxxxxxXxxxxxxxxXxxxxxXxxxxxxx< + X, X, X extends XxxxxxxxxXxxxxxxxxXxxxxxxx<X, X>> + extends Xxxxx { + + int x; + } + + class XxxxxxxxXxxxxxxxxXxxxXxxx< + X extends XxxxxxxxxXxxxxxx, X extends XxxxxxxxxXxxxxx, X extends Xxxxxxxxxxxxx, X> + extends XxxxXxxx { + + int x; + } + + @Xxx + class XxxxxxxxxxxXxxxxxXx< + X extends XxxxxxXxxxxxxxxxxXxxxxxXxxxxx, X extends Xxxxxxx, XX extends Xxxxxxxxx<X>> + extends XxxxxxxxXx<X, XX> { + + int x; + } + + static class XxxxxXxxxxXxxx< + XXXXX extends XxxxxxxxXxxxxxx<XXXXX>, XXX extends XxxxxxxxXxxxxxx<XXX>> { + + int x; + } + + @Xxx + class XxxxxxxxxxxXxxxxxXx< + X extends XxxxxxXxxxxxxxxxxXxxxxxXxxxxx, + X extends Xxxxxxx, + X extends Xxxxxxx, + XX extends Xxxxxxxxx<X>> + extends XxxxxxxxXx<X, XX> { + + int x; + } +}
diff --git a/core/src/test/resources/com/google/googlejavaformat/java/testdata/M.output b/core/src/test/resources/com/google/googlejavaformat/java/testdata/M.output index 6cc984f..6a73e32 100644 --- a/core/src/test/resources/com/google/googlejavaformat/java/testdata/M.output +++ b/core/src/test/resources/com/google/googlejavaformat/java/testdata/M.output
@@ -238,28 +238,152 @@ return null; } - <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, - T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> + < + T0, + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24, + T25, + T26, + T27, + T28, + T29, + T30, + T31> T methodName20(int x) { return null; } - <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, - T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> + < + T0, + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24, + T25, + T26, + T27, + T28, + T29, + T30, + T31> T methodName21(int x) throws Exception { return null; } - <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, - T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> + < + T0, + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24, + T25, + T26, + T27, + T28, + T29, + T30, + T31> T methodName22(int x) throws Exception0, Exception1, Exception2, Exception3, Exception4, Exception5, Exception6, Exception7, Exception8, Exception9 { return null; } - <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, - T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> + < + T0, + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24, + T25, + T26, + T27, + T28, + T29, + T30, + T31> T methodName22( int a, int b, @@ -286,8 +410,39 @@ return null; } - <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, - T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> + < + T0, + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24, + T25, + T26, + T27, + T28, + T29, + T30, + T31> T methodName23( int a, int b, @@ -315,8 +470,39 @@ return null; } - <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, - T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> + < + T0, + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24, + T25, + T26, + T27, + T28, + T29, + T30, + T31> T methodName30( int a, int b, @@ -345,8 +531,39 @@ return null; } - <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, - T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> + < + T0, + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24, + T25, + T26, + T27, + T28, + T29, + T30, + T31> Pair< Pair<Pair<Pair<T, T>, Pair<T, T>>, Pair<Pair<T, T>, Pair<T, T>>>, Pair<Pair<Pair<T, T>, Pair<T, T>>, Pair<Pair<T, T>, Pair<T, T>>>> @@ -354,8 +571,39 @@ return null; } - <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, - T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> + < + T0, + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24, + T25, + T26, + T27, + T28, + T29, + T30, + T31> Pair< Pair<Pair<Pair<T, T>, Pair<T, T>>, Pair<Pair<T, T>, Pair<T, T>>>, Pair<Pair<Pair<T, T>, Pair<T, T>>, Pair<Pair<T, T>, Pair<T, T>>>> @@ -363,8 +611,39 @@ return null; } - <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, - T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> + < + T0, + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24, + T25, + T26, + T27, + T28, + T29, + T30, + T31> Pair< Pair<Pair<Pair<T, T>, Pair<T, T>>, Pair<Pair<T, T>, Pair<T, T>>>, Pair<Pair<Pair<T, T>, Pair<T, T>>, Pair<Pair<T, T>, Pair<T, T>>>> @@ -374,8 +653,39 @@ return null; } - <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, - T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> + < + T0, + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24, + T25, + T26, + T27, + T28, + T29, + T30, + T31> Pair< Pair<Pair<Pair<T, T>, Pair<T, T>>, Pair<Pair<T, T>, Pair<T, T>>>, Pair<Pair<Pair<T, T>, Pair<T, T>>, Pair<Pair<T, T>, Pair<T, T>>>> @@ -405,8 +715,39 @@ return null; } - <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, - T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> + < + T0, + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24, + T25, + T26, + T27, + T28, + T29, + T30, + T31> Pair< Pair<Pair<Pair<T, T>, Pair<T, T>>, Pair<Pair<T, T>, Pair<T, T>>>, Pair<Pair<Pair<T, T>, Pair<T, T>>, Pair<Pair<T, T>, Pair<T, T>>>> @@ -437,8 +778,39 @@ return null; } - <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, - T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31> + < + T0, + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24, + T25, + T26, + T27, + T28, + T29, + T30, + T31> Pair< Pair<Pair<Pair<T, T>, Pair<T, T>>, Pair<Pair<T, T>, Pair<T, T>>>, Pair<Pair<Pair<T, T>, Pair<T, T>>, Pair<Pair<T, T>, Pair<T, T>>>> @@ -623,8 +995,19 @@ return this; } - <XXXXXXXXXX, XXXXXXXXXX, XXXXXXXXXX, XXXXXXXXXX, XXXXXXXXXX, XXXXXXXXXX, XXXXXXXXXX, XXXXXXXXXX, - XXXXXXXXXX, XXXXXXXXXX, XXXXXXXXXX, XXXXXXXXXX> + < + XXXXXXXXXX, + XXXXXXXXXX, + XXXXXXXXXX, + XXXXXXXXXX, + XXXXXXXXXX, + XXXXXXXXXX, + XXXXXXXXXX, + XXXXXXXXXX, + XXXXXXXXXX, + XXXXXXXXXX, + XXXXXXXXXX, + XXXXXXXXXX> M( ZZZZZZZZZZ z, ZZZZZZZZZZ z,
diff --git a/core/src/test/resources/com/google/googlejavaformat/java/testdata/P.output b/core/src/test/resources/com/google/googlejavaformat/java/testdata/P.output index 8cc377c..9c63831 100644 --- a/core/src/test/resources/com/google/googlejavaformat/java/testdata/P.output +++ b/core/src/test/resources/com/google/googlejavaformat/java/testdata/P.output
@@ -5,8 +5,30 @@ * PrefixExpressions, and PrimitiveTypes. */ class P< - T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, - T22, T23, T24> { + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10, + T11, + T12, + T13, + T14, + T15, + T16, + T17, + T18, + T19, + T20, + T21, + T22, + T23, + T24> { void f() { int x = (1 + 2) * 3; ++x;