diff --git a/open-java-format/src/main/java/com/palantir/javaformat/java/JavaInputAstVisitor.java b/open-java-format/src/main/java/com/palantir/javaformat/java/JavaInputAstVisitor.java index a23b7a548..076f8aadf 100644 --- a/open-java-format/src/main/java/com/palantir/javaformat/java/JavaInputAstVisitor.java +++ b/open-java-format/src/main/java/com/palantir/javaformat/java/JavaInputAstVisitor.java @@ -1247,10 +1247,10 @@ protected void visitLambdaExpression(LambdaExpressionTree node, boolean statemen token(","); builder.breakOp(" "); } - visitVariables( - ImmutableList.of(parameter), - DeclarationKind.NONE, - inlineAnnotationDirection(parameter.getModifiers())); + // A lambda parameter is a parameter: its annotations stay on its line, as a method parameter's do. The + // vertical direction, a forced break after an annotation with arguments, is for local variable + // declarations. + visitVariables(ImmutableList.of(parameter), DeclarationKind.NONE, Direction.HORIZONTAL); first = false; } if (parens) { diff --git a/open-java-format/src/test/resources/com/palantir/javaformat/java/testdata/ojf-issue-101-annotated-lambda-parameters.input b/open-java-format/src/test/resources/com/palantir/javaformat/java/testdata/ojf-issue-101-annotated-lambda-parameters.input new file mode 100644 index 000000000..e4c539989 --- /dev/null +++ b/open-java-format/src/test/resources/com/palantir/javaformat/java/testdata/ojf-issue-101-annotated-lambda-parameters.input @@ -0,0 +1,29 @@ +import java.util.function.BiFunction; +import java.util.function.Consumer; +import java.util.function.Function; + +class AnnotatedLambdaParameters { + BiFunction withArgs = + (final var x, + @SuppressWarnings("unused") + var y) -> x + y; + + Function typed = ( @SuppressWarnings( "unused" ) String s )->s.length(); + + BiFunction two = (@Deprecated @SuppressWarnings("unused") + var x, var y) -> x + y; + + BiFunction marker = (@Deprecated var x, + @Deprecated final var y) -> x + y; + + Consumer block = (@SuppressWarnings({"unused", "rawtypes"}) + String s) -> { System.out.println(s); }; + + BiFunction tooLongForOneLine = (@SuppressWarnings("unused") Integer first, @SuppressWarnings("unused") Integer second) -> first + second; + + BiFunction parametersDoNotFitOnOneLine = (@SuppressWarnings("unused") Integer firstParameterWithAVeryLongName, @SuppressWarnings("unused") Integer secondParameterWithAVeryLongName) -> firstParameterWithAVeryLongName + secondParameterWithAVeryLongName; + + void method(@SuppressWarnings("unused") int y, @Deprecated int z) { + @SuppressWarnings("unchecked") Function local = o -> (String) o; + } +} diff --git a/open-java-format/src/test/resources/com/palantir/javaformat/java/testdata/ojf-issue-101-annotated-lambda-parameters.output b/open-java-format/src/test/resources/com/palantir/javaformat/java/testdata/ojf-issue-101-annotated-lambda-parameters.output new file mode 100644 index 000000000..41a8338d1 --- /dev/null +++ b/open-java-format/src/test/resources/com/palantir/javaformat/java/testdata/ojf-issue-101-annotated-lambda-parameters.output @@ -0,0 +1,30 @@ +import java.util.function.BiFunction; +import java.util.function.Consumer; +import java.util.function.Function; + +class AnnotatedLambdaParameters { + BiFunction withArgs = (final var x, @SuppressWarnings("unused") var y) -> x + y; + + Function typed = (@SuppressWarnings("unused") String s) -> s.length(); + + BiFunction two = (@Deprecated @SuppressWarnings("unused") var x, var y) -> x + y; + + BiFunction marker = (@Deprecated var x, @Deprecated final var y) -> x + y; + + Consumer block = (@SuppressWarnings({"unused", "rawtypes"}) String s) -> { + System.out.println(s); + }; + + BiFunction tooLongForOneLine = + (@SuppressWarnings("unused") Integer first, @SuppressWarnings("unused") Integer second) -> first + second; + + BiFunction parametersDoNotFitOnOneLine = + (@SuppressWarnings("unused") Integer firstParameterWithAVeryLongName, + @SuppressWarnings("unused") Integer secondParameterWithAVeryLongName) -> + firstParameterWithAVeryLongName + secondParameterWithAVeryLongName; + + void method(@SuppressWarnings("unused") int y, @Deprecated int z) { + @SuppressWarnings("unchecked") + Function local = o -> (String) o; + } +}