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());
}
}
+
}