diff --git a/java/java-impl/src/com/intellij/application/options/GenerationSettingsProvider.java b/java/java-impl/src/com/intellij/application/options/GenerationSettingsProvider.java index 68e727d18699..dfafcecbe14c 100644 --- a/java/java-impl/src/com/intellij/application/options/GenerationSettingsProvider.java +++ b/java/java-impl/src/com/intellij/application/options/GenerationSettingsProvider.java @@ -19,6 +19,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsProvider; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.application.ApplicationBundle; +import com.intellij.psi.codeStyle.DisplayPriority; import org.jetbrains.annotations.NotNull; /** @@ -36,7 +37,7 @@ public class GenerationSettingsProvider extends CodeStyleSettingsProvider { } @Override - public int getPriority() { - return CODE_PRIORITY; + public DisplayPriority getPriority() { + return DisplayPriority.CODE_SETTINGS; } } diff --git a/java/java-impl/src/com/intellij/application/options/ImportsSettingsProvider.java b/java/java-impl/src/com/intellij/application/options/ImportsSettingsProvider.java index 384dd4f37574..4cd23f94ec7c 100644 --- a/java/java-impl/src/com/intellij/application/options/ImportsSettingsProvider.java +++ b/java/java-impl/src/com/intellij/application/options/ImportsSettingsProvider.java @@ -19,6 +19,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsProvider; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.application.ApplicationBundle; +import com.intellij.psi.codeStyle.DisplayPriority; import org.jetbrains.annotations.NotNull; /** @@ -36,7 +37,7 @@ public class ImportsSettingsProvider extends CodeStyleSettingsProvider { } @Override - public int getPriority() { - return CODE_PRIORITY; + public DisplayPriority getPriority() { + return DisplayPriority.CODE_SETTINGS; } } diff --git a/java/java-impl/src/com/intellij/ide/JavaLanguageCodeStyleSettingsProvider.java b/java/java-impl/src/com/intellij/ide/JavaLanguageCodeStyleSettingsProvider.java index b0ba4f7da093..810ca68d78b2 100644 --- a/java/java-impl/src/com/intellij/ide/JavaLanguageCodeStyleSettingsProvider.java +++ b/java/java-impl/src/com/intellij/ide/JavaLanguageCodeStyleSettingsProvider.java @@ -23,9 +23,11 @@ import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFileFactory; import com.intellij.psi.codeStyle.CodeStyleSettingsCustomizable; +import com.intellij.psi.codeStyle.DisplayPriority; import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider; import com.intellij.psi.util.PsiUtil; import com.intellij.util.LocalTimeCounter; +import com.intellij.util.PlatformUtils; import org.jetbrains.annotations.NotNull; /** @@ -67,6 +69,12 @@ public class JavaLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSett return file; } + @Override + public DisplayPriority getDisplayPriority() { + if (PlatformUtils.isIdea()) return DisplayPriority.KEY_LANGUAGE_SETTINGS; + return DisplayPriority.LANGUAGE_SETTINGS; + } + private static final String GENERAL_CODE_SAMPLE = "public class Foo {\n" + " public int[] X = new int[]{1, 3, 5 7, 9, 11};\n" + 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 de39886b6371..a05d1800064e 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsProvider.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettingsProvider.java @@ -26,11 +26,6 @@ import org.jetbrains.annotations.Nullable; public abstract class CodeStyleSettingsProvider { public static final ExtensionPointName EXTENSION_POINT_NAME = ExtensionPointName.create("com.intellij.codeStyleSettingsProvider"); - public final static int GENERAL_PRIORITY = 0; - public final static int COMMON_SETTINGS_PRIORITY = 1; - public final static int CODE_PRIORITY = 2; - public final static int LANGUAGE_PRIORITY = 3; - public final static int OTHER_PRIORITY = 4; @Nullable public CustomCodeStyleSettings createCustomSettings(CodeStyleSettings settings) { @@ -55,7 +50,7 @@ public abstract class CodeStyleSettingsProvider { return true; } - public int getPriority() { - return LANGUAGE_PRIORITY; + public DisplayPriority getPriority() { + return DisplayPriority.LANGUAGE_SETTINGS; } } diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/DisplayPriority.java b/platform/lang-api/src/com/intellij/psi/codeStyle/DisplayPriority.java new file mode 100644 index 000000000000..feaff97d018b --- /dev/null +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/DisplayPriority.java @@ -0,0 +1,48 @@ +/* + * Copyright 2000-2011 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.psi.codeStyle; + +/** + * Used in settings providers to indicate in which order a settings tab or panel must be shown in Settings UI. + * + * @author Rustam Vishnyakov + */ +public enum DisplayPriority { + /** + * General settings (topmost) + */ + GENERAL_SETTINGS, + /** + * Any generic settings normally used by multiple languages. + */ + COMMON_SETTINGS, + /** + * Code arrangement settings like imports, etc. + */ + CODE_SETTINGS, + /** + * Key IDE language priority (depends on product), for exmaple, Java for IDEA, PHP for PhpStorm etc. + */ + KEY_LANGUAGE_SETTINGS, + /** + * Language-specific settings. + */ + LANGUAGE_SETTINGS, + /** + * Any other settings. + */ + OTHER_SETTINGS +} diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java b/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java index 6e6f980a7a66..216d0fd1f8fa 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java @@ -108,6 +108,10 @@ public abstract class LanguageCodeStyleSettingsProvider { return PredefinedCodeStyle.EMPTY_ARRAY; } + public DisplayPriority getDisplayPriority() { + return DisplayPriority.LANGUAGE_SETTINGS; + } + @NotNull public static Language[] getLanguagesWithCodeStyleSettings() { final ArrayList languages = new ArrayList(); @@ -139,6 +143,7 @@ public abstract class LanguageCodeStyleSettingsProvider { return provider != null ? provider.getRightMargin(settingsType) : -1; } + @Nullable public static Language getLanguage(String langName) { for (LanguageCodeStyleSettingsProvider provider : Extensions.getExtensions(EP_NAME)) { @@ -184,4 +189,11 @@ public abstract class LanguageCodeStyleSettingsProvider { } return null; } + + public static DisplayPriority getDisplayPriority(Language language) { + LanguageCodeStyleSettingsProvider langProvider = forLanguage(language); + if (langProvider == null) return DisplayPriority.LANGUAGE_SETTINGS; + return langProvider.getDisplayPriority(); + } + } diff --git a/platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java b/platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java index 68508cfb90bb..0732604774fd 100644 --- a/platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java +++ b/platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java @@ -28,10 +28,6 @@ import com.intellij.psi.codeStyle.CodeStyleScheme; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsProvider; import com.intellij.psi.impl.source.codeStyle.CodeStyleSchemeImpl; -import com.intellij.ui.ListUtil; -import com.intellij.util.ArrayUtil; -import org.apache.commons.collections.ListUtils; -import org.apache.commons.lang.ArrayUtils; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -213,8 +209,8 @@ public class CodeStyleSchemesConfigurable extends SearchableConfigurable.Parent. Collections.sort(providers, new Comparator() { @Override public int compare(CodeStyleSettingsProvider p1, CodeStyleSettingsProvider p2) { - if (p1.getPriority() != p2.getPriority()) { - return p1.getPriority() - p2.getPriority(); + if (!p1.getPriority().equals(p2.getPriority())) { + return p1.getPriority().compareTo(p2.getPriority()); } String name1 = p1.getConfigurableDisplayName(); if (name1 == null) name1 = ""; diff --git a/platform/lang-impl/src/com/intellij/application/options/GeneralCodeStylePanel.java b/platform/lang-impl/src/com/intellij/application/options/GeneralCodeStylePanel.java index 723f2c56b207..d488988b295b 100644 --- a/platform/lang-impl/src/com/intellij/application/options/GeneralCodeStylePanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/GeneralCodeStylePanel.java @@ -29,7 +29,9 @@ import com.intellij.openapi.fileTypes.LanguageFileType; import com.intellij.openapi.util.Comparing; import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettings; +import com.intellij.psi.codeStyle.DisplayPriority; import com.intellij.psi.codeStyle.FileTypeIndentOptionsProvider; +import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider; import com.intellij.ui.DocumentAdapter; import com.intellij.ui.OptionGroup; import com.intellij.ui.TabbedPaneWrapper; @@ -41,10 +43,8 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; import java.awt.*; -import java.util.ArrayList; -import java.util.LinkedHashMap; +import java.util.*; import java.util.List; -import java.util.Map; public class GeneralCodeStylePanel extends CodeStyleAbstractPanel { private static final Logger LOG = Logger.getInstance("#com.intellij.application.options.GeneralCodeStylePanel"); @@ -74,7 +74,23 @@ public class GeneralCodeStylePanel extends CodeStyleAbstractPanel { public GeneralCodeStylePanel(CodeStyleSettings settings) { super(settings); - final FileTypeIndentOptionsProvider[] indentOptionsProviders = Extensions.getExtensions(FileTypeIndentOptionsProvider.EP_NAME); + final List indentOptionsProviders = + Arrays.asList(Extensions.getExtensions(FileTypeIndentOptionsProvider.EP_NAME)); + Collections.sort(indentOptionsProviders, new Comparator() { + @Override + public int compare(FileTypeIndentOptionsProvider p1, FileTypeIndentOptionsProvider p2) { + Language lang1 = getLanguage(p1.getFileType()); + if (lang1 == null) return -1; + Language lang2 = getLanguage(p2.getFileType()); + if (lang2 == null) return 1; + DisplayPriority priority1 = LanguageCodeStyleSettingsProvider.getDisplayPriority(lang1); + DisplayPriority priority2 = LanguageCodeStyleSettingsProvider.getDisplayPriority(lang2); + if (priority1.equals(priority2)) { + return lang1.getDisplayName().compareTo(lang2.getDisplayName()); + } + return priority1.compareTo(priority2); + } + }); for (FileTypeIndentOptionsProvider indentOptionsProvider : indentOptionsProviders) { myIndentOptionsProviders.add(indentOptionsProvider); if (myAdditionalIndentOptions.containsKey(indentOptionsProvider.getFileType())) { @@ -106,6 +122,12 @@ public class GeneralCodeStylePanel extends CodeStyleAbstractPanel { }); } + @Nullable + private static Language getLanguage(FileType fileType) { + return (fileType instanceof LanguageFileType) ? ((LanguageFileType)fileType).getLanguage() : null; + } + + protected void somethingChanged() { super.somethingChanged(); update(); diff --git a/platform/lang-impl/src/com/intellij/application/options/GeneralCodeStyleSettingsProvider.java b/platform/lang-impl/src/com/intellij/application/options/GeneralCodeStyleSettingsProvider.java index e817dfaa83b7..fc0cbef852f3 100644 --- a/platform/lang-impl/src/com/intellij/application/options/GeneralCodeStyleSettingsProvider.java +++ b/platform/lang-impl/src/com/intellij/application/options/GeneralCodeStyleSettingsProvider.java @@ -21,6 +21,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.application.ApplicationBundle; import com.intellij.openapi.fileTypes.FileTypes; +import com.intellij.psi.codeStyle.DisplayPriority; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -52,7 +53,7 @@ public class GeneralCodeStyleSettingsProvider extends CodeStyleSettingsProvider } @Override - public int getPriority() { - return GENERAL_PRIORITY; + public DisplayPriority getPriority() { + return DisplayPriority.GENERAL_SETTINGS; } } diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/BlankLinesSettingsProvider.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/BlankLinesSettingsProvider.java index 72cc083fd312..3f3665ee36f5 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/BlankLinesSettingsProvider.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/BlankLinesSettingsProvider.java @@ -19,6 +19,7 @@ import com.intellij.openapi.application.ApplicationBundle; import com.intellij.openapi.options.Configurable; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsProvider; +import com.intellij.psi.codeStyle.DisplayPriority; import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider; import com.sun.tools.javah.Gen; import org.jetbrains.annotations.NotNull; @@ -44,7 +45,7 @@ public class BlankLinesSettingsProvider extends CodeStyleSettingsProvider { } @Override - public int getPriority() { - return COMMON_SETTINGS_PRIORITY; + public DisplayPriority getPriority() { + return DisplayPriority.COMMON_SETTINGS; } } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/SpacesSettingsProvider.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/SpacesSettingsProvider.java index 4b3de33bef2f..fffca0212dcd 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/SpacesSettingsProvider.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/SpacesSettingsProvider.java @@ -19,6 +19,7 @@ import com.intellij.openapi.application.ApplicationBundle; import com.intellij.openapi.options.Configurable; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsProvider; +import com.intellij.psi.codeStyle.DisplayPriority; import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider; import com.sun.tools.javah.Gen; import org.jetbrains.annotations.NotNull; @@ -43,7 +44,7 @@ public class SpacesSettingsProvider extends CodeStyleSettingsProvider { } @Override - public int getPriority() { - return COMMON_SETTINGS_PRIORITY; + public DisplayPriority getPriority() { + return DisplayPriority.COMMON_SETTINGS; } } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/WrappingAndBracesSettingsProvider.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/WrappingAndBracesSettingsProvider.java index 50f4cd8f5b04..4a0609c53589 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/WrappingAndBracesSettingsProvider.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/WrappingAndBracesSettingsProvider.java @@ -22,6 +22,7 @@ import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.options.Configurable; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsProvider; +import com.intellij.psi.codeStyle.DisplayPriority; import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider; import org.jetbrains.annotations.NotNull; @@ -56,7 +57,7 @@ public class WrappingAndBracesSettingsProvider extends CodeStyleSettingsProvider } @Override - public int getPriority() { - return COMMON_SETTINGS_PRIORITY; + public DisplayPriority getPriority() { + return DisplayPriority.COMMON_SETTINGS; } } \ No newline at end of file