diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -2028,6 +2028,11 @@ if (PreviousNotConst->isSimpleTypeSpecifier()) return true; + // type[] a in Java + if (Style.Language == FormatStyle::LK_Java && + PreviousNotConst->is(tok::r_square)) + return true; + // const a = in JavaScript. return Style.isJavaScript() && PreviousNotConst->is(tok::kw_const); } diff --git a/clang/unittests/Format/FormatTestJava.cpp b/clang/unittests/Format/FormatTestJava.cpp --- a/clang/unittests/Format/FormatTestJava.cpp +++ b/clang/unittests/Format/FormatTestJava.cpp @@ -584,6 +584,17 @@ " void f() {}")); } +TEST_F(FormatTestJava, AlignDeclarations) { + FormatStyle Style = getLLVMStyle(FormatStyle::LK_Java); + Style.AlignConsecutiveDeclarations.Enabled = true; + verifyFormat("private final String[] args;\n" + "private final A_ParserHelper parserHelper;\n" + "private final int numOfCmdArgs;\n" + "private int numOfCmdArgs;\n" + "private String[] args;", + Style); +} + TEST_F(FormatTestJava, KeepsDelimitersOnOwnLineInJavaDocComments) { EXPECT_EQ("/**\n" " * javadoc line 1\n"