From 9b5b18836026ef26c3afc210a3e71b12fa90005f Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Fri, 14 Nov 2014 10:15:56 +0000 Subject: [PATCH] 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 --- lib/Format/TokenAnnotator.cpp | 19 +++++++++++++------ unittests/Format/FormatTestJava.cpp | 16 +++++++++++----- 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 extends bbbbbbbbbbbb\n" - " implements cccccccccccc {\n" + "abstract class aaaaaaaaa\n" + " extends bbbbbbbbbbbb implements cccccccccccc {\n" "}", getStyleWithColumns(76)); verifyFormat("interface SomeInterface extends Foo, Bar {\n" -- 2.40.0