From c86bb7f5532d3330df164467fe5b3d75430b3fa6 Mon Sep 17 00:00:00 2001 From: Yaroslav Lepenkin Date: Fri, 21 Nov 2014 20:00:05 +0200 Subject: [PATCH] corrected method header text range calculation to work correctly with constructors (fixes IDEA-132781) --- .../java/JavaSpacePropertyProcessor.java | 10 ++++--- .../java/JavaFormatterBracesTest.java | 28 +++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java b/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java index acab27107583..7957119898d1 100644 --- a/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java +++ b/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java @@ -381,11 +381,13 @@ public class JavaSpacePropertyProcessor extends JavaElementVisitor { return true; } - + private static int getMethodHeaderStartOffset(@NotNull PsiMethod method) { - for (PsiElement element : method.getChildren()) { - if (element instanceof PsiTypeElement) { - return element.getTextRange().getStartOffset(); + PsiTypeParameterList typeParameterList = PsiTreeUtil.findChildOfType(method, PsiTypeParameterList.class); + if (typeParameterList != null) { + PsiElement nextNonWsElem = PsiTreeUtil.skipSiblingsForward(typeParameterList, PsiWhiteSpace.class); + if (nextNonWsElem != null) { + return nextNonWsElem.getTextRange().getStartOffset(); } } return method.getTextRange().getStartOffset(); diff --git a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterBracesTest.java b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterBracesTest.java index 582fc3a81a6a..0887d2c26fc4 100644 --- a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterBracesTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterBracesTest.java @@ -289,4 +289,32 @@ public class JavaFormatterBracesTest extends AbstractJavaFormatterTest { "}" ); } + + public void testConstructorLeftBraceWithComment() { + getSettings().METHOD_BRACE_STYLE = CommonCodeStyleSettings.NEXT_LINE_IF_WRAPPED; + doClassTest( + "/**\n" + + " *\n" + + " */\n" + + " public Test() {\n" + + "}\n", + "/**\n" + + " *\n" + + " */\n" + + "public Test() {\n" + + "}\n" + ); + } + + public void testConstructorLeftBraceWithAnnotation() { + getSettings().METHOD_BRACE_STYLE = CommonCodeStyleSettings.NEXT_LINE_IF_WRAPPED; + doClassTest( + " @Deprecated\n" + + "public Test() {\n" + + "}\n", + "@Deprecated\n" + + "public Test() {\n" + + "}\n" + ); + } }