diff --git a/java/java-impl/src/com/intellij/application/options/JavaCodeStyleMainPanel.java b/java/java-impl/src/com/intellij/application/options/JavaCodeStyleMainPanel.java index 0e0c5632bed9..eef435b94222 100644 --- a/java/java-impl/src/com/intellij/application/options/JavaCodeStyleMainPanel.java +++ b/java/java-impl/src/com/intellij/application/options/JavaCodeStyleMainPanel.java @@ -15,16 +15,28 @@ */ package com.intellij.application.options; +import com.intellij.ide.highlighter.JavaFileType; import com.intellij.lang.Language; import com.intellij.lang.java.JavaLanguage; +import com.intellij.openapi.editor.colors.EditorColorsScheme; +import com.intellij.openapi.editor.highlighter.EditorHighlighter; +import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.options.Configurable; +import com.intellij.openapi.options.ConfigurationException; import com.intellij.psi.codeStyle.CodeStyleSettings; +import com.intellij.psi.codeStyle.CodeStyleSettingsProvider; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; /** * @author Rustam Vishnyakov */ public class JavaCodeStyleMainPanel extends MultiTabCodeStyleAbstractPanel { - protected JavaCodeStyleMainPanel(CodeStyleSettings settings) { - super(settings); + + protected JavaCodeStyleMainPanel(CodeStyleSettings currentSettings, CodeStyleSettings settings) { + super(currentSettings, settings); } @Override @@ -38,5 +50,74 @@ public class JavaCodeStyleMainPanel extends MultiTabCodeStyleAbstractPanel { addTab(new JavaDocFormattingPanel(settings)); addTab(new CodeStyleImportsPanelWrapper(settings)); addTab(new CodeStyleGenerationWrapper(settings)); + for (CodeStyleSettingsProvider provider : Extensions.getExtensions(CodeStyleSettingsProvider.EXTENSION_POINT_NAME)) { + if (provider.getLanguage() == JavaLanguage.INSTANCE && !provider.hasSettingsPage()) { + Configurable configurable = provider.createSettingsPage(getCurrentSettings(), settings); + ConfigurableWrapper wrapper = new ConfigurableWrapper(configurable, settings); + addTab(wrapper); + } + } + + } + + private class ConfigurableWrapper extends CodeStyleAbstractPanel { + + private Configurable myConfigurable; + + public ConfigurableWrapper(Configurable configurable, CodeStyleSettings settings) { + super(settings); + myConfigurable = configurable; + } + + @Override + protected int getRightMargin() { + return 0; + } + + @Override + protected EditorHighlighter createHighlighter(EditorColorsScheme scheme) { + return null; + } + + @NotNull + @Override + protected FileType getFileType() { + return JavaFileType.INSTANCE; + } + + @Override + protected String getTabTitle() { + return myConfigurable.getDisplayName(); + } + + @Override + protected String getPreviewText() { + return null; + } + + @Override + public void apply(CodeStyleSettings settings) { + try { + myConfigurable.apply(); + } + catch (ConfigurationException e) { + // Ignore + } + } + + @Override + public boolean isModified(CodeStyleSettings settings) { + return myConfigurable.isModified(); + } + + @Override + public JComponent getPanel() { + return myConfigurable.createComponent(); + } + + @Override + protected void resetImpl(CodeStyleSettings settings) { + myConfigurable.reset(); + } } } diff --git a/java/java-impl/src/com/intellij/application/options/JavaCodeStyleSettingsProvider.java b/java/java-impl/src/com/intellij/application/options/JavaCodeStyleSettingsProvider.java index ffcc45821ead..789e29550c6e 100644 --- a/java/java-impl/src/com/intellij/application/options/JavaCodeStyleSettingsProvider.java +++ b/java/java-impl/src/com/intellij/application/options/JavaCodeStyleSettingsProvider.java @@ -29,9 +29,9 @@ public class JavaCodeStyleSettingsProvider extends CodeStyleSettingsProvider { @NotNull @Override public Configurable createSettingsPage(CodeStyleSettings settings, CodeStyleSettings originalSettings) { - return new CodeStyleAbstractConfigurable(settings, originalSettings, "Java") { + return new CodeStyleAbstractConfigurable(settings, originalSettings, "Java") { protected CodeStyleAbstractPanel createPanel(final CodeStyleSettings settings) { - return new JavaCodeStyleMainPanel(settings); + return new JavaCodeStyleMainPanel(getCurrentSettings(), settings); } public String getHelpTopic() { return null; diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsProvider.java b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsProvider.java index a05d1800064e..a4a782982473 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsProvider.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsProvider.java @@ -15,6 +15,7 @@ */ package com.intellij.psi.codeStyle; +import com.intellij.lang.Language; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.extensions.ExtensionPointName; import org.jetbrains.annotations.NotNull; @@ -43,7 +44,8 @@ public abstract class CodeStyleSettingsProvider { */ @Nullable public String getConfigurableDisplayName() { - return null; + Language lang = getLanguage(); + return lang == null ? null : lang.getDisplayName(); } public boolean hasSettingsPage() { @@ -53,4 +55,17 @@ public abstract class CodeStyleSettingsProvider { public DisplayPriority getPriority() { return DisplayPriority.LANGUAGE_SETTINGS; } + + /** + * Specifies a language this provider applies to. If the language is not null, its display name will + * be used as a configurable name by default if getConfigurableDisplayName() is not + * overridden. + * + * @return null by default. + */ + @Nullable + public Language getLanguage() { + return null; + } + } diff --git a/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractConfigurable.java b/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractConfigurable.java index 16ce3243ccc7..cd1ff197c6c7 100644 --- a/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractConfigurable.java +++ b/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractConfigurable.java @@ -103,4 +103,8 @@ public abstract class CodeStyleAbstractConfigurable implements Configurable, Opt public Set processListOptions() { return myPanel.processListOptions(); } + + protected CodeStyleSettings getCurrentSettings() { + return mySettings; + } } diff --git a/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java b/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java index 5e403b9869ac..6a6d812c0d20 100644 --- a/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java @@ -88,8 +88,14 @@ public abstract class CodeStyleAbstractPanel implements Disposable { private boolean myShowsPreviewHighlighters; private boolean mySkipPreviewHighlighting; private LanguageSelector myLanguageSelector; - + private final CodeStyleSettings myCurrentSettings; + protected CodeStyleAbstractPanel(CodeStyleSettings settings) { + this(null, settings); + } + + protected CodeStyleAbstractPanel(@Nullable CodeStyleSettings currentSettings, CodeStyleSettings settings) { + myCurrentSettings = currentSettings; mySettings = settings; myEditor = createEditor(); @@ -614,5 +620,9 @@ public abstract class CodeStyleAbstractPanel implements Disposable { public boolean setPanelLanguage(Language language) { return false; } + + protected CodeStyleSettings getCurrentSettings() { + return myCurrentSettings; + } } diff --git a/platform/lang-impl/src/com/intellij/application/options/CommonCodeStyleSettingsConfigurable.java b/platform/lang-impl/src/com/intellij/application/options/CommonCodeStyleSettingsConfigurable.java index 52bfdca2abde..d22ff49e9320 100644 --- a/platform/lang-impl/src/com/intellij/application/options/CommonCodeStyleSettingsConfigurable.java +++ b/platform/lang-impl/src/com/intellij/application/options/CommonCodeStyleSettingsConfigurable.java @@ -35,7 +35,7 @@ public class CommonCodeStyleSettingsConfigurable extends CodeStyleAbstractConfig @Override protected CodeStyleAbstractPanel createPanel(CodeStyleSettings settings) { - return new MyCodeStylePanel(settings); + return new MyCodeStylePanel(getCurrentSettings(), settings); } @Override @@ -48,8 +48,8 @@ public class CommonCodeStyleSettingsConfigurable extends CodeStyleAbstractConfig private CodeStyleBlankLinesPanel myBlankLinesPanel; private WrappingAndBracesPanel myWrappingAndBracesPanel; - protected MyCodeStylePanel(CodeStyleSettings settings) { - super(settings); + protected MyCodeStylePanel(CodeStyleSettings currentSettings, CodeStyleSettings settings) { + super(currentSettings, settings); } @Override diff --git a/platform/lang-impl/src/com/intellij/application/options/MultiTabCodeStyleAbstractPanel.java b/platform/lang-impl/src/com/intellij/application/options/MultiTabCodeStyleAbstractPanel.java index c45f7b636d8e..7c3ee4d408bc 100644 --- a/platform/lang-impl/src/com/intellij/application/options/MultiTabCodeStyleAbstractPanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/MultiTabCodeStyleAbstractPanel.java @@ -39,9 +39,8 @@ public abstract class MultiTabCodeStyleAbstractPanel extends CodeStyleAbstractPa private JPanel myPanel; private JTabbedPane myTabbedPane; - - protected MultiTabCodeStyleAbstractPanel(CodeStyleSettings settings) { - super(settings); + protected MultiTabCodeStyleAbstractPanel(CodeStyleSettings currentSettings, CodeStyleSettings settings) { + super(currentSettings, settings); } protected void initTabs(CodeStyleSettings settings) { @@ -240,4 +239,5 @@ public abstract class MultiTabCodeStyleAbstractPanel extends CodeStyleAbstractPa provider.customizeSettings(panel, panel.getSettingsType()); } } + }