]> granicus.if.org Git - clang/commitdiff
clang-format: [Java] Support Foo.class;
authorDaniel Jasper <djasper@google.com>
Wed, 26 Nov 2014 08:17:08 +0000 (08:17 +0000)
committerDaniel Jasper <djasper@google.com>
Wed, 26 Nov 2014 08:17:08 +0000 (08:17 +0000)
Before:
  SomeClass.
  class.getName();

After:
  SomeClass.class.getName();

This fixes llvm.org/PR21665.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222813 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/UnwrappedLineParser.cpp
unittests/Format/FormatTestJava.cpp

index ba492aae0295cd38756e4643ca62d3d38cc09e79..21f0e7bad1bd3da5030e2635cd2fa1417ef219c9 100644 (file)
@@ -757,6 +757,13 @@ void UnwrappedLineParser::parseStructuralElement() {
       // A record declaration or definition is always the start of a structural
       // element.
       break;
+    case tok::period:
+      nextToken();
+      // In Java, classes have an implicit static member "class".
+      if (Style.Language == FormatStyle::LK_Java && FormatTok &&
+          FormatTok->is(tok::kw_class))
+        nextToken();
+      break;
     case tok::semi:
       nextToken();
       addUnwrappedLine();
index 5a45b80f3bf94318a8d479fd27461aedec78340a..47e219b4a1bcf5155f10c1517233989af1853ea5 100644 (file)
@@ -65,6 +65,11 @@ TEST_F(FormatTestJava, FormatsInstanceOfLikeOperators) {
                Style);
 }
 
+TEST_F(FormatTestJava, ClassKeyword) {
+  verifyFormat("SomeClass.class.getName();");
+  verifyFormat("Class c = SomeClass.class;");
+}
+
 TEST_F(FormatTestJava, ClassDeclarations) {
   verifyFormat("public class SomeClass {\n"
                "  private int a;\n"