diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java index 2b2b110514a6..3e874736a04b 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java @@ -266,6 +266,12 @@ public class CodeStyleSettings extends CommonCodeStyleSettings implements Clonea */ @Deprecated public int RIGHT_MARGIN = 120; + /** + * Do not use this field directly since it doesn't reflect a setting for a specific language which may + * overwrite this one. Call {@link #isWrapOnTyping(Language)} method instead. + * + * @see #WRAP_ON_TYPING + */ public boolean WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN = false; @@ -957,4 +963,23 @@ public class CodeStyleSettings extends CommonCodeStyleSettings implements Clonea public void setDefaultRightMargin(int rightMargin) { RIGHT_MARGIN = rightMargin; } + + /** + * Defines whether or not wrapping should occur when typing reaches right margin. + * @param language The language to check the option for or null for a global option. + * @return True if wrapping on right margin is enabled. + */ + public boolean isWrapOnTyping(@Nullable Language language) { + if (language != null) { + CommonCodeStyleSettings langSettings = getCommonSettings(language); + if (langSettings != null) { + if (langSettings.WRAP_ON_TYPING != WrapOnTyping.DEFAULT.intValue) { + return langSettings.WRAP_ON_TYPING == WrapOnTyping.WRAP.intValue; + } + } + } + //noinspection deprecation + return WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN; + } + } diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsCustomizable.java b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsCustomizable.java index 5ddf99d92b58..f639a607bb3c 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsCustomizable.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsCustomizable.java @@ -113,6 +113,7 @@ public interface CodeStyleSettingsCustomizable { enum WrappingOrBraceOption { RIGHT_MARGIN, + WRAP_ON_TYPING, KEEP_CONTROL_STATEMENT_IN_ONE_LINE, LINE_COMMENT_AT_FIRST_COLUMN, BLOCK_COMMENT_AT_FIRST_COLUMN, @@ -287,6 +288,17 @@ public interface CodeStyleSettingsCustomizable { CommonCodeStyleSettings.NEXT_LINE_SHIFTED2 }; + String[] WRAP_ON_TYPING_OPTIONS = { + ApplicationBundle.message("wrapping.wrap.on.typing.no.wrap"), + ApplicationBundle.message("wrapping.wrap.on.typing.wrap"), + ApplicationBundle.message("wrapping.wrap.on.typing.default") + }; + int [] WRAP_ON_TYPING_VALUES = { + CommonCodeStyleSettings.WrapOnTyping.NO_WRAP.intValue, + CommonCodeStyleSettings.WrapOnTyping.WRAP.intValue, + CommonCodeStyleSettings.WrapOnTyping.DEFAULT.intValue + }; + void showAllStandardOptions(); void showStandardOptions(String... optionNames); 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 6c01003b365d..f90ddcaf56c3 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CommonCodeStyleSettings.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CommonCodeStyleSettings.java @@ -890,6 +890,23 @@ public class CommonCodeStyleSettings { public int FORCE_REARRANGE_MODE = REARRANGE_ACCORDIND_TO_DIALOG; + public enum WrapOnTyping { + DEFAULT(-1), + NO_WRAP (0), + WRAP (1); + + public int intValue; + + WrapOnTyping(int i) { + this.intValue = i; + } + } + + /** + * Defines if wrapping should occur when typing reaches right margin. Do not use a value of this field directly, call + * {@link CodeStyleSettings#isWrapOnTyping(Language)} method instead. + */ + public int WRAP_ON_TYPING = WrapOnTyping.DEFAULT.intValue; //-------------------------Indent options------------------------------------------------- public static class IndentOptions implements JDOMExternalizable, Cloneable { 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 098bd5b5f7aa..66b398a83250 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 @@ -61,6 +61,7 @@ public class WrappingAndBracesPanel extends OptionTableWithPreviewPanel { @Override protected void initTables() { addOption("RIGHT_MARGIN", ApplicationBundle.message("editbox.right.margin.columns"), null, 0, 999, -1, ApplicationBundle.message("settings.code.style.default.general")); + addOption("WRAP_ON_TYPING", ApplicationBundle.message("wrapping.wrap.on.typing"), null, WRAP_ON_TYPING_OPTIONS, WRAP_ON_TYPING_VALUES); addOption("KEEP_LINE_BREAKS", ApplicationBundle.message("wrapping.keep.line.breaks"), WRAPPING_KEEP); addOption("KEEP_FIRST_COLUMN_COMMENT", ApplicationBundle.message("wrapping.keep.comment.at.first.column"), WRAPPING_KEEP); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/AutoHardWrapHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/AutoHardWrapHandler.java index 6184c6741236..04916af5377f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/AutoHardWrapHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/AutoHardWrapHandler.java @@ -17,6 +17,7 @@ package com.intellij.codeInsight.editorActions; import com.intellij.codeInsight.template.TemplateManager; import com.intellij.formatting.FormatConstants; +import com.intellij.lang.Language; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.formatter.WhiteSpaceFormattingStrategy; import com.intellij.ide.DataManager; @@ -47,7 +48,7 @@ public class AutoHardWrapHandler { /** * This key is used as a flag that indicates if 'auto wrap line on typing' activity is performed now. * - * @see CodeStyleSettings#WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN + * @see CodeStyleSettings#isWrapOnTyping(Language) */ public static final Key AUTO_WRAP_LINE_IN_PROGRESS_KEY = new Key("AUTO_WRAP_LINE_IN_PROGRESS"); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleFacadeImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleFacadeImpl.java index 81eda35222dd..914d225f802b 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleFacadeImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleFacadeImpl.java @@ -74,10 +74,16 @@ public class CodeStyleFacadeImpl extends CodeStyleFacade { } @Override + @Deprecated public boolean isWrapWhenTypingReachesRightMargin() { return CodeStyleSettingsManager.getSettings(myProject).WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN; } + @Override + public boolean isWrapOnTyping(@Nullable Language language) { + return CodeStyleSettingsManager.getSettings(myProject).isWrapOnTyping(language); + } + @Override public int getTabSize(final FileType fileType) { return CodeStyleSettingsManager.getSettings(myProject).getTabSize(fileType); diff --git a/platform/platform-api/src/com/intellij/codeStyle/CodeStyleFacade.java b/platform/platform-api/src/com/intellij/codeStyle/CodeStyleFacade.java index 0bc7ed42febb..c3c4c36ac0ad 100644 --- a/platform/platform-api/src/com/intellij/codeStyle/CodeStyleFacade.java +++ b/platform/platform-api/src/com/intellij/codeStyle/CodeStyleFacade.java @@ -56,8 +56,17 @@ public abstract class CodeStyleFacade { public abstract int getRightMargin(Language language); + /** + * @return True if wrap on typing is enabled + * @deprecated Use isWrapOnTyping(language) instead + */ public abstract boolean isWrapWhenTypingReachesRightMargin(); + @SuppressWarnings("deprecation") + public boolean isWrapOnTyping(@Nullable Language language) { + return isWrapWhenTypingReachesRightMargin(); + } + public abstract int getTabSize(final FileType fileType); public abstract boolean useTabCharacter(final FileType fileType); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SettingsImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SettingsImpl.java index ed14e128a804..3ab014cb4344 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SettingsImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SettingsImpl.java @@ -213,7 +213,7 @@ public class SettingsImpl implements EditorSettings { public boolean isWrapWhenTypingReachesRightMargin(Project project) { return myWrapWhenTypingReachesRightMargin != null ? myWrapWhenTypingReachesRightMargin.booleanValue() : - CodeStyleFacade.getInstance(project).isWrapWhenTypingReachesRightMargin(); + CodeStyleFacade.getInstance(project).isWrapOnTyping(myLanguage); } @Override diff --git a/platform/platform-resources-en/src/messages/ApplicationBundle.properties b/platform/platform-resources-en/src/messages/ApplicationBundle.properties index 813ce4e8b6a7..1e55dc90d1d4 100644 --- a/platform/platform-resources-en/src/messages/ApplicationBundle.properties +++ b/platform/platform-resources-en/src/messages/ApplicationBundle.properties @@ -136,6 +136,11 @@ button.remove.r=&Remove wrapping.and.braces=Wrapping and Braces +wrapping.wrap.on.typing=Wrap on typing +wrapping.wrap.on.typing.no.wrap=No +wrapping.wrap.on.typing.wrap=Yes +wrapping.wrap.on.typing.default=Default + wrapping.keep.when.reformatting=Keep when reformatting wrapping.keep.line.breaks=Line breaks wrapping.keep.comment.at.first.column=Comment at first column