From 616eb957664ef3a09a98196f5607a2aee2b81acc Mon Sep 17 00:00:00 2001 From: Yaroslav Lepenkin Date: Tue, 10 Jan 2017 18:30:18 +0300 Subject: [PATCH] Keep type annotation on the same line with type in method declaration --- .../java/wrap/impl/JavaChildWrapArranger.java | 6 +++- .../psi/formatter/java/JavaFormatterTest.java | 36 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildWrapArranger.java b/java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildWrapArranger.java index 867285006e3f..bd3484267f57 100644 --- a/java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildWrapArranger.java +++ b/java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildWrapArranger.java @@ -173,8 +173,12 @@ public class JavaChildWrapArranger { else if (nodeType == JavaElementType.MODIFIER_LIST) { if (childType == JavaElementType.ANNOTATION) { + ASTNode prev = FormatterUtil.getPreviousNonWhitespaceSibling(child); + if (prev instanceof PsiKeyword) { + return null; + } + if (isTypeAnnotationOrFalseIfDumb(child)) { - ASTNode prev = FormatterUtil.getPreviousNonWhitespaceSibling(child); if (prev == null || prev.getElementType() != JavaElementType.ANNOTATION || isTypeAnnotationOrFalseIfDumb(prev)) { return Wrap.createWrap(WrapType.NONE, false); } diff --git a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterTest.java b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterTest.java index 19aba7887b6b..d908a52e5c49 100644 --- a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterTest.java @@ -3293,5 +3293,41 @@ public void testSCR260() throws Exception { "};" ); } + + public void testKeepTypeAnnotationNearType() { + doTextTest( + "import java.lang.annotation.ElementType;\n" + + "import java.lang.annotation.Retention;\n" + + "import java.lang.annotation.RetentionPolicy;\n" + + "import java.lang.annotation.Target;\n" + + "\n" + + "@Target(value=ElementType.TYPE_USE)\n" + + "@Retention(value= RetentionPolicy.RUNTIME)\n" + + "public @interface X {}\n" + + "class Q {\n" + + " @Override\n" + + " public @X List objects() {\n" + + " return null;\n" + + " }\n" + + "}", + + "import java.lang.annotation.ElementType;\n" + + "import java.lang.annotation.Retention;\n" + + "import java.lang.annotation.RetentionPolicy;\n" + + "import java.lang.annotation.Target;\n" + + "\n" + + "@Target(value = ElementType.TYPE_USE)\n" + + "@Retention(value = RetentionPolicy.RUNTIME)\n" + + "public @interface X {\n" + + "}\n" + + "\n" + + "class Q {\n" + + " @Override\n" + + " public @X List objects() {\n" + + " return null;\n" + + " }\n" + + "}" + ); + } }