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 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