clang-format: [Java] Improve cast detection.
authorDaniel Jasper <djasper@google.com>
Wed, 26 Nov 2014 12:23:10 +0000 (12:23 +0000)
committerDaniel Jasper <djasper@google.com>
Wed, 26 Nov 2014 12:23:10 +0000 (12:23 +0000)
Before:
  a[b >> 1] = (byte)(c() << 4);

After:
  a[b >> 1] = (byte) (c() << 4);

llvm-svn: 222827

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

index 9b32c35..2e3e2dd 100644 (file)
@@ -921,15 +921,19 @@ private:
         LeftOfParens->MatchingParen &&
         LeftOfParens->MatchingParen->is(TT_LambdaLSquare))
       return false;
+    if (Tok.Next) {
+      if (Style.Language == FormatStyle::LK_JavaScript &&
+          Tok.Next->is(Keywords.kw_in))
+        return false;
+      if (Style.Language == FormatStyle::LK_Java && Tok.Next->is(tok::l_paren))
+        return true;
+    }
     bool IsCast = false;
     bool ParensAreEmpty = Tok.Previous == Tok.MatchingParen;
     bool ParensAreType =
         !Tok.Previous ||
         Tok.Previous->isOneOf(TT_PointerOrReference, TT_TemplateCloser) ||
         Tok.Previous->isSimpleTypeSpecifier();
-    if (Style.Language == FormatStyle::LK_JavaScript && Tok.Next &&
-        Tok.Next->is(Keywords.kw_in))
-      return false;
     bool ParensCouldEndDecl =
         Tok.Next && Tok.Next->isOneOf(tok::equal, tok::semi, tok::l_brace);
     bool IsSizeOfOrAlignOf =
index 5c80bab..674c13b 100644 (file)
@@ -54,6 +54,10 @@ TEST_F(FormatTestJava, NoAlternativeOperatorNames) {
   verifyFormat("someObject.and();");
 }
 
+TEST_F(FormatTestJava, UnderstandsCasts) {
+  verifyFormat("a[b >> 1] = (byte) (c() << 4);");
+}
+
 TEST_F(FormatTestJava, FormatsInstanceOfLikeOperators) {
   FormatStyle Style = getStyleWithColumns(50);
   verifyFormat("return aaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"