summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2014-11-14 10:15:56 +0000
committerDaniel Jasper <djasper@google.com>2014-11-14 10:15:56 +0000
commit9b5b18836026ef26c3afc210a3e71b12fa90005f (patch)
treeb666a4849c660b827ef85e95744f7f572d4c07e6
parentffe568b91fc3f8464483e4f1d808686276f40e4d (diff)
downloadclang-9b5b18836026ef26c3afc210a3e71b12fa90005f.tar.gz
clang-format: [Java] Fix line break behavior of class declarations.
Change breaking preferences: 1. Break before "extends" 2. Break before "implements" 3. Break within the implements list. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221981 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Format/TokenAnnotator.cpp19
-rw-r--r--unittests/Format/FormatTestJava.cpp16
2 files changed, 24 insertions, 11 deletions
diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp
index bce1d64166..48ce19e132 100644
--- a/lib/Format/TokenAnnotator.cpp
+++ b/lib/Format/TokenAnnotator.cpp
@@ -1439,6 +1439,18 @@ unsigned TokenAnnotator::splitPenalty(const AnnotatedLine &Line,
if (Left.is(tok::semi))
return 0;
+
+ if (Style.Language == FormatStyle::LK_Java) {
+ if (Left.Type == TT_LeadingJavaAnnotation)
+ return 1;
+ if (Right.is(Keywords.kw_extends))
+ return 1;
+ if (Right.is(Keywords.kw_implements))
+ return 2;
+ if (Left.is(tok::comma) && Left.NestingLevel == 0)
+ return 3;
+ }
+
if (Left.is(tok::comma) || (Right.is(tok::identifier) && Right.Next &&
Right.Next->Type == TT_DictLiteral))
return 1;
@@ -1448,6 +1460,7 @@ unsigned TokenAnnotator::splitPenalty(const AnnotatedLine &Line,
if (Right.Type != TT_ObjCMethodExpr && Right.Type != TT_LambdaLSquare)
return 500;
}
+
if (Right.Type == TT_StartOfName ||
Right.Type == TT_FunctionDeclarationName || Right.is(tok::kw_operator)) {
if (Line.First->is(tok::kw_for) && Right.PartOfMultiVariableDeclStmt)
@@ -1472,12 +1485,6 @@ unsigned TokenAnnotator::splitPenalty(const AnnotatedLine &Line,
Left.Type == TT_InheritanceColon)
return 2;
- if (Left.Type == TT_LeadingJavaAnnotation)
- return 1;
- if (Style.Language == FormatStyle::LK_Java &&
- Right.is(Keywords.kw_implements))
- return 2;
-
if (Right.isMemberAccess()) {
if (Left.is(tok::r_paren) && Left.MatchingParen &&
Left.MatchingParen->ParameterCount > 0)
diff --git a/unittests/Format/FormatTestJava.cpp b/unittests/Format/FormatTestJava.cpp
index 3799003b77..6523c86f52 100644
--- a/unittests/Format/FormatTestJava.cpp
+++ b/unittests/Format/FormatTestJava.cpp
@@ -69,8 +69,11 @@ TEST_F(FormatTestJava, ClassDeclarations) {
"}");
verifyFormat("public class A extends B.C {}");
+ verifyFormat("abstract class SomeClass\n"
+ " extends SomeOtherClass implements SomeInterface {}",
+ getStyleWithColumns(60));
verifyFormat("abstract class SomeClass extends SomeOtherClass\n"
- " implements SomeInterface {}",
+ " implements SomeInterfaceeeeeeeeeeeee {}",
getStyleWithColumns(60));
verifyFormat("abstract class SomeClass\n"
" extends SomeOtherClass\n"
@@ -81,14 +84,17 @@ TEST_F(FormatTestJava, ClassDeclarations) {
" implements SomeInterface,\n"
" AnotherInterface {}",
getStyleWithColumns(40));
+ verifyFormat("abstract class SomeClass\n"
+ " implements SomeInterface, AnotherInterface {}",
+ getStyleWithColumns(60));
verifyFormat("@SomeAnnotation()\n"
- "abstract class aaaaaaaaaaaa extends bbbbbbbbbbbbbbb\n"
- " implements cccccccccccc {\n"
+ "abstract class aaaaaaaaaaaa\n"
+ " extends bbbbbbbbbbbbbbb implements cccccccccccc {\n"
"}",
getStyleWithColumns(76));
verifyFormat("@SomeAnnotation()\n"
- "abstract class aaaaaaaaa<a> extends bbbbbbbbbbbb<b>\n"
- " implements cccccccccccc {\n"
+ "abstract class aaaaaaaaa<a>\n"
+ " extends bbbbbbbbbbbb<b> implements cccccccccccc {\n"
"}",
getStyleWithColumns(76));
verifyFormat("interface SomeInterface<A> extends Foo, Bar {\n"