]> granicus.if.org Git - clang/commitdiff
clang-format: [Java] Fix line break behavior of class declarations.
authorDaniel Jasper <djasper@google.com>
Fri, 14 Nov 2014 10:15:56 +0000 (10:15 +0000)
committerDaniel Jasper <djasper@google.com>
Fri, 14 Nov 2014 10:15:56 +0000 (10:15 +0000)
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

lib/Format/TokenAnnotator.cpp
unittests/Format/FormatTestJava.cpp

index bce1d64166f9ce6f889f74177227b89659cda5d7..48ce19e1323bf39073bfffbfc1db7dd564d1c571 100644 (file)
@@ -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)
index 3799003b7760b470c297cc27a1ad79629c6d68d3..6523c86f5260a8641751a64c82bfeb4b1013373a 100644 (file)
@@ -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"