From 4e146072845c8c29960956289471e6d3853cff29 Mon Sep 17 00:00:00 2001 From: Denis Zhdanov Date: Tue, 25 Jan 2011 11:18:23 +0300 Subject: [PATCH] IDEA-63820 Allow "throws" to be placed on the new line without indent 1. Added ability to configure java formatter in a way to align 'throws' keyword to method start; 2. Corresponding tests are added; --- ...JavaLanguageCodeStyleSettingsProvider.java | 3 ++- .../psi/formatter/java/AbstractJavaBlock.java | 1 + .../java/JavaFormatterAlignmentTest.java | 22 +++++++++++++++++++ .../codeStyle/CommonCodeStyleSettings.java | 1 + .../codeStyle/WrappingAndBracesPanel.java | 1 + .../src/messages/ApplicationBundle.properties | 1 + 6 files changed, 28 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/ide/JavaLanguageCodeStyleSettingsProvider.java b/java/java-impl/src/com/intellij/ide/JavaLanguageCodeStyleSettingsProvider.java index 464e6761a0eb..5e851f65886b 100644 --- a/java/java-impl/src/com/intellij/ide/JavaLanguageCodeStyleSettingsProvider.java +++ b/java/java-impl/src/com/intellij/ide/JavaLanguageCodeStyleSettingsProvider.java @@ -215,7 +215,8 @@ public class JavaLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSett " x--;\n" + " } while (x > 10) \n" + " }\n" + - " public static void test() { \n" + + " public static void test() \n" + + " throws Exception { \n" + " foo.foo().bar(\"arg1\", \n" + " \"arg2\"); \n" + " } \n" + diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java b/java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java index 217cfa449d54..e6f14c03dc91 100644 --- a/java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java +++ b/java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java @@ -823,6 +823,7 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo if (role == ChildRole.TYPE_PARAMETER_LIST) return defaultAlignment; if (role == ChildRole.TYPE) return defaultAlignment; if (role == ChildRole.NAME) return defaultAlignment; + if (role == ChildRole.THROWS_LIST && mySettings.ALIGN_THROWS_KEYWORD) return defaultAlignment; return null; } diff --git a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterAlignmentTest.java b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterAlignmentTest.java index df01c1730213..962298ef0b6d 100644 --- a/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterAlignmentTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/formatter/java/JavaFormatterAlignmentTest.java @@ -251,4 +251,26 @@ public class JavaFormatterAlignmentTest extends AbstractJavaFormatterTest { "}" ); } + + public void testAlignThrowsKeyword() throws Exception { + // Inspired by IDEA-63820 + + getSettings().ALIGN_THROWS_KEYWORD = true; + doClassTest( + "public void test()\n" + + " throws Exception {}", + "public void test()\n" + + "throws Exception {\n" + + "}" + ); + + getSettings().ALIGN_THROWS_KEYWORD = false; + doClassTest( + "public void test()\n" + + " throws Exception {}", + "public void test()\n" + + " throws Exception {\n" + + "}" + ); + } } diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/CommonCodeStyleSettings.java b/platform/lang-api/src/com/intellij/psi/codeStyle/CommonCodeStyleSettings.java index 698cd3ad5a7f..44b1baa91379 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CommonCodeStyleSettings.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CommonCodeStyleSettings.java @@ -299,6 +299,7 @@ public class CommonCodeStyleSettings { public boolean ALIGN_MULTILINE_ASSIGNMENT = false; public boolean ALIGN_MULTILINE_TERNARY_OPERATION = false; public boolean ALIGN_MULTILINE_THROWS_LIST = false; + public boolean ALIGN_THROWS_KEYWORD = false; public boolean ALIGN_MULTILINE_EXTENDS_LIST = false; public boolean ALIGN_MULTILINE_METHOD_BRACKETS = false; diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/WrappingAndBracesPanel.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/WrappingAndBracesPanel.java index eff6430a43be..038e7608b7c5 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/WrappingAndBracesPanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/WrappingAndBracesPanel.java @@ -49,6 +49,7 @@ public class WrappingAndBracesPanel extends OptionTableWithPreviewPanel { addOption("THROWS_LIST_WRAP", WRAPPING_THROWS_LIST, WRAP_OPTIONS, WRAP_VALUES); addOption("ALIGN_MULTILINE_THROWS_LIST", ApplicationBundle.message("wrapping.align.when.multiline"), WRAPPING_THROWS_LIST); + addOption("ALIGN_THROWS_KEYWORD", ApplicationBundle.message("wrapping.align.throws.keyword"), WRAPPING_THROWS_LIST); addOption("THROWS_KEYWORD_WRAP", WRAPPING_THROWS_KEYWORD, WRAP_OPTIONS_FOR_SINGLETON, WRAP_VALUES_FOR_SINGLETON); addOption("METHOD_PARAMETERS_WRAP", WRAPPING_METHOD_PARAMETERS, WRAP_OPTIONS, WRAP_VALUES); diff --git a/platform/platform-resources-en/src/messages/ApplicationBundle.properties b/platform/platform-resources-en/src/messages/ApplicationBundle.properties index eeca36cec25f..fcdb403e126b 100644 --- a/platform/platform-resources-en/src/messages/ApplicationBundle.properties +++ b/platform/platform-resources-en/src/messages/ApplicationBundle.properties @@ -180,6 +180,7 @@ wrapping.extends.implements.list=Extends/implements list wrapping.extends.implements.keyword=Extends/implements keyword wrapping.throws.list=Throws list wrapping.throws.keyword=Throws keyword +wrapping.align.throws.keyword=Align 'throws' to method start wrapping.ternary.operation=Ternary operation wrapping.assignment.variables.groups=Fields/variables groups wrapping.assignment.statement=Assignment statement