clang-format: [Java] Treat 'instanceof' like other binary operators.
authorDaniel Jasper <djasper@google.com>
Sun, 23 Nov 2014 21:34:25 +0000 (21:34 +0000)
committerDaniel Jasper <djasper@google.com>
Sun, 23 Nov 2014 21:34:25 +0000 (21:34 +0000)
This fixes llvm.org/PR21436.

llvm-svn: 222641

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

index 84e1858a7b825e825df760daf907fe0a97030911..05b05a531dc0fdd2bf42bfa689f709fea1c9aac4 100644 (file)
@@ -532,6 +532,7 @@ struct AdditionalKeywords {
     kw_extends = &IdentTable.get("extends");
     kw_final = &IdentTable.get("final");
     kw_implements = &IdentTable.get("implements");
+    kw_instanceof = &IdentTable.get("instanceof");
     kw_interface = &IdentTable.get("interface");
     kw_synchronized = &IdentTable.get("synchronized");
     kw_throws = &IdentTable.get("throws");
@@ -557,6 +558,7 @@ struct AdditionalKeywords {
   IdentifierInfo *kw_extends;
   IdentifierInfo *kw_final;
   IdentifierInfo *kw_implements;
+  IdentifierInfo *kw_instanceof;
   IdentifierInfo *kw_interface;
   IdentifierInfo *kw_synchronized;
   IdentifierInfo *kw_throws;
index e36a16a54a1de4a948444fab7b3315ff0d50201a..aa6a8f537c3cd135c21027a99734164c1fab8c50 100644 (file)
@@ -795,8 +795,10 @@ private:
     // Line.MightBeFunctionDecl can only be true after the parentheses of a
     // function declaration have been found. In this case, 'Current' is a
     // trailing token of this declaration and thus cannot be a name.
-    if (isStartOfName(Current) &&
-        (!Line.MightBeFunctionDecl || Current.NestingLevel != 0)) {
+    if (Current.is(Keywords.kw_instanceof)) {
+      Current.Type = TT_BinaryOperator;
+    } else if (isStartOfName(Current) &&
+               (!Line.MightBeFunctionDecl || Current.NestingLevel != 0)) {
       Contexts.back().FirstStartOfName = &Current;
       Current.Type = TT_StartOfName;
     } else if (Current.is(tok::kw_auto)) {
index ba91f1677bfc78c5ffe3fe19e0caaa3c3500dc98..5a45b80f3bf94318a8d479fd27461aedec78340a 100644 (file)
@@ -54,6 +54,17 @@ TEST_F(FormatTestJava, NoAlternativeOperatorNames) {
   verifyFormat("someObject.and();");
 }
 
+TEST_F(FormatTestJava, FormatsInstanceOfLikeOperators) {
+  FormatStyle Style = getStyleWithColumns(50);
+  verifyFormat("return aaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
+               "    instanceof bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;",
+               Style);
+  Style.BreakBeforeBinaryOperators = FormatStyle::BOS_None;
+  verifyFormat("return aaaaaaaaaaaaaaaaaaaaaaaaaaaaa instanceof\n"
+               "    bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;",
+               Style);
+}
+
 TEST_F(FormatTestJava, ClassDeclarations) {
   verifyFormat("public class SomeClass {\n"
                "  private int a;\n"