forked from OSchip/llvm-project
clang-format: [Java] Support anonymous classes after = and return.
Before: A a = new A(){public String toString(){return "NotReallyA"; } } ; After: A a = return new A() { public String toString() { return "NotReallyA"; } }; This fixes llvm.org/PR22878. llvm-svn: 232042
This commit is contained in:
parent
bbdb712765
commit
6acf513099
|
@ -868,6 +868,9 @@ void UnwrappedLineParser::parseStructuralElement() {
|
|||
case tok::l_square:
|
||||
parseSquare();
|
||||
break;
|
||||
case tok::kw_new:
|
||||
parseNew();
|
||||
break;
|
||||
default:
|
||||
nextToken();
|
||||
break;
|
||||
|
@ -1274,6 +1277,31 @@ void UnwrappedLineParser::parseNamespace() {
|
|||
// FIXME: Add error handling.
|
||||
}
|
||||
|
||||
void UnwrappedLineParser::parseNew() {
|
||||
assert(FormatTok->is(tok::kw_new) && "'new' expected");
|
||||
nextToken();
|
||||
if (Style.Language != FormatStyle::LK_Java)
|
||||
return;
|
||||
|
||||
// In Java, we can parse everything up to the parens, which aren't optional.
|
||||
do {
|
||||
// There should not be a ;, { or } before the new's open paren.
|
||||
if (FormatTok->isOneOf(tok::semi, tok::l_brace, tok::r_brace))
|
||||
return;
|
||||
|
||||
// Consume the parens.
|
||||
if (FormatTok->is(tok::l_paren)) {
|
||||
parseParens();
|
||||
|
||||
// If there is a class body of an anonymous class, consume that as child.
|
||||
if (FormatTok->is(tok::l_brace))
|
||||
parseChildBlock();
|
||||
return;
|
||||
}
|
||||
nextToken();
|
||||
} while (!eof());
|
||||
}
|
||||
|
||||
void UnwrappedLineParser::parseForOrWhileLoop() {
|
||||
assert((FormatTok->Tok.is(tok::kw_for) || FormatTok->Tok.is(tok::kw_while) ||
|
||||
FormatTok->IsForEachMacro) &&
|
||||
|
|
|
@ -95,6 +95,7 @@ private:
|
|||
void parseCaseLabel();
|
||||
void parseSwitch();
|
||||
void parseNamespace();
|
||||
void parseNew();
|
||||
void parseAccessSpecifier();
|
||||
void parseEnum();
|
||||
void parseJavaEnumBody();
|
||||
|
|
|
@ -153,6 +153,19 @@ TEST_F(FormatTestJava, ClassDeclarations) {
|
|||
"}");
|
||||
}
|
||||
|
||||
TEST_F(FormatTestJava, AnonymousClasses) {
|
||||
verifyFormat("return new A() {\n"
|
||||
" public String toString() {\n"
|
||||
" return \"NotReallyA\";\n"
|
||||
" }\n"
|
||||
"};");
|
||||
verifyFormat("A a = new A() {\n"
|
||||
" public String toString() {\n"
|
||||
" return \"NotReallyA\";\n"
|
||||
" }\n"
|
||||
"};");
|
||||
}
|
||||
|
||||
TEST_F(FormatTestJava, EnumDeclarations) {
|
||||
verifyFormat("enum SomeThing { ABC, CDE }");
|
||||
verifyFormat("enum SomeThing {\n"
|
||||
|
|
Loading…
Reference in New Issue