Hi djasper,

Support Java lambda expressions

http://reviews.llvm.org/D6350

Files:
  lib/Format/TokenAnnotator.cpp
  unittests/Format/FormatTestJava.cpp
Index: lib/Format/TokenAnnotator.cpp
===================================================================
--- lib/Format/TokenAnnotator.cpp
+++ lib/Format/TokenAnnotator.cpp
@@ -1750,6 +1750,9 @@
     return Right.Type == TT_TemplateCloser && Left.Type == TT_TemplateCloser &&
            (Style.Standard != FormatStyle::LS_Cpp11 || Style.SpacesInAngles);
   }
+  if (Style.Language == FormatStyle::LK_Java &&
+      (Right.is(tok::arrow) || Left.is(tok::arrow)))
+    return true;
   if (Right.isOneOf(tok::arrow, tok::period, tok::arrowstar, tok::periodstar) ||
       Left.isOneOf(tok::arrow, tok::period, tok::arrowstar, tok::periodstar))
     return false;
Index: unittests/Format/FormatTestJava.cpp
===================================================================
--- unittests/Format/FormatTestJava.cpp
+++ unittests/Format/FormatTestJava.cpp
@@ -317,5 +317,25 @@
                getStyleWithColumns(40));
 }
 
+TEST_F(FormatTestJava, Lambdas) {
+  verifyFormat("Consumer<Integer> myConsumer = (y) -> {\n"
+               "  System.out.println(\"x = \" + x); // Statement A\n"
+               "  System.out.println(\"y = \" + y);\n"
+               "}");
+  verifyFormat("String s = invoke(() -> \"done\");");
+  verifyFormat("IntegerMath addition = (a, b) -> a + b");
+  verifyFormat("roster.stream()\n"
+               "    .filter(p -> p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25)\n"
+               "    .map(p -> p.getEmailAddress())\n"
+               "    .forEach(email -> System.out.println(email));");
+  verifyFormat("roster.stream()\n"
+               "    .filter(p -> {\n"
+               "      System.out.println(\"foo\");\n"
+               "      return true;\n"
+               "    })\n"
+               "    .map(p -> p.getEmailAddress())\n"
+               "    .forEach(email -> System.out.println(email));");
+}
+
 } // end namespace tooling
 } // end namespace clang
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to