From: Daniel Jasper Date: Tue, 21 Oct 2014 08:24:18 +0000 (+0000) Subject: clang-format: [Java] Wrap after each function annotation. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fab69ff095db6cc222281d266b66d3b8083ad3ed;p=platform%2Fupstream%2Fllvm.git clang-format: [Java] Wrap after each function annotation. Before: @Override public String toString() { .. } After: @Override public String toString() { .. } llvm-svn: 220274 --- diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index ead1da9..4c93c7f 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -458,6 +458,7 @@ unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State, !PreviousNonComment->isOneOf(tok::comma, tok::semi) && PreviousNonComment->Type != TT_TemplateCloser && PreviousNonComment->Type != TT_BinaryOperator && + PreviousNonComment->Type != TT_JavaAnnotation && Current.Type != TT_BinaryOperator && !PreviousNonComment->opensScope()) State.Stack.back().BreakBeforeParameter = true; @@ -533,7 +534,8 @@ unsigned ContinuationIndenter::getNewLineColumn(const LineState &State) { if (Previous.is(tok::comma) && State.Stack.back().VariablePos != 0) return State.Stack.back().VariablePos; if ((PreviousNonComment && (PreviousNonComment->ClosesTemplateDeclaration || - PreviousNonComment->Type == TT_AttributeParen)) || + PreviousNonComment->Type == TT_AttributeParen || + PreviousNonComment->Type == TT_JavaAnnotation)) || (!Style.IndentWrappedFunctionNames && (NextNonComment->is(tok::kw_operator) || NextNonComment->Type == TT_FunctionDeclarationName))) diff --git a/clang/lib/Format/FormatToken.h b/clang/lib/Format/FormatToken.h index dc2c8a466..425a7c8 100644 --- a/clang/lib/Format/FormatToken.h +++ b/clang/lib/Format/FormatToken.h @@ -46,6 +46,7 @@ enum TokenType { TT_ImplicitStringLiteral, TT_InheritanceColon, TT_InlineASMColon, + TT_JavaAnnotation, TT_LambdaLSquare, TT_LineComment, TT_ObjCBlockLBrace, diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 7fbd2f2..ce3d899 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -826,6 +826,9 @@ private: // Line.MightBeFunctionDecl can only be true after the parentheses of a // function declaration have been found. Current.Type = TT_TrailingAnnotation; + } else if (Style.Language == FormatStyle::LK_Java && Current.Previous && + Current.Previous->is(tok::at)) { + Current.Type = TT_JavaAnnotation; } } } @@ -1787,6 +1790,9 @@ bool TokenAnnotator::mustBreakBefore(const AnnotatedLine &Line, if (Right.is(tok::char_constant) && Left.is(tok::plus) && Left.Previous && Left.Previous->is(tok::char_constant)) return true; + } else if (Style.Language == FormatStyle::LK_Java) { + if (Left.Type == TT_JavaAnnotation && Line.MightBeFunctionDecl) + return true; } return false; diff --git a/clang/unittests/Format/FormatTestJava.cpp b/clang/unittests/Format/FormatTestJava.cpp index 2bca3bb..18d945d 100644 --- a/clang/unittests/Format/FormatTestJava.cpp +++ b/clang/unittests/Format/FormatTestJava.cpp @@ -64,5 +64,14 @@ TEST_F(FormatTestJava, ThrowsDeclarations) { " throws LooooooooooooooooooooooooooooongException {}"); } +TEST_F(FormatTestJava, Annotations) { + verifyFormat("@Override\n" + "public String toString() {\n}"); + verifyFormat("@Override\n" + "@Nullable\n" + "public String getNameIfPresent() {\n}"); + verifyFormat("@Partial @Mock DataLoader loader;"); +} + } // end namespace tooling } // end namespace clang