From b9fb679044fe7f806a3ec63774a2009a203d9429 Mon Sep 17 00:00:00 2001 From: "Rustam.Vishnyakov" Date: Mon, 28 Feb 2011 13:36:30 +0300 Subject: [PATCH] Separate ActionScript code style settings preview (related to IDEA-56387) --- .../LanguageCodeStyleSettingsProvider.java | 44 ++++++++++++++++++- .../options/CodeStyleAbstractPanel.java | 6 ++- .../MultilanguageCodeStyleAbstractPanel.java | 17 ++++++- 3 files changed, 63 insertions(+), 4 deletions(-) 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 d01859164a6b..9701e2a24eae 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java @@ -46,6 +46,26 @@ public abstract class LanguageCodeStyleSettingsProvider { public void customizeSettings(@NotNull CodeStyleSettingsCustomizable consumer, @NotNull SettingsType settingsType) { } + /** + * Override this method if file extension to be used with samples is different from the one returned by associated file type. + * + * @return The file extension for samples (null by default). + */ + @Nullable + public String getFileExt() { + return null; + } + + /** + * Override this method if language name shown in preview tab must be different from the name returned by Language class itself. + * + * @return The language name to show in preview tab (null by default). + */ + @Nullable + public String getLanguageName() { + return null; + } + /** * Creates an instance of CommonCodeStyleSettings and sets initial default values for those * settings which differ from the original. @@ -90,7 +110,9 @@ public abstract class LanguageCodeStyleSettingsProvider { @Nullable public static Language getLanguage(String langName) { for (LanguageCodeStyleSettingsProvider provider : Extensions.getExtensions(EP_NAME)) { - if (langName.equals(provider.getLanguage().getDisplayName())) { + String name = provider.getLanguageName(); + if (name == null) name = provider.getLanguage().getDisplayName(); + if (langName.equals(name)) { return provider.getLanguage(); } } @@ -106,5 +128,25 @@ public abstract class LanguageCodeStyleSettingsProvider { } return null; } + + @Nullable + public static String getFileExt(Language lang) { + for (LanguageCodeStyleSettingsProvider provider : Extensions.getExtensions(EP_NAME)) { + if (provider.getLanguage().equals(lang)) { + return provider.getFileExt(); + } + } + return null; + } + + @Nullable + public static String getLanguageName(Language lang) { + for (LanguageCodeStyleSettingsProvider provider : Extensions.getExtensions(EP_NAME)) { + if (provider.getLanguage().equals(lang)) { + return provider.getLanguageName(); + } + } + return null; + } } 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 8373dd9ac0e3..d36696978ebf 100644 --- a/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java @@ -258,10 +258,14 @@ public abstract class CodeStyleAbstractPanel implements Disposable { protected void prepareForReformat(PsiFile psiFile) { } + + protected String getFileExt() { + return getFileTypeExtension(getFileType()); + } protected PsiFile createFileFromText(Project project, String text) { return PsiFileFactory.getInstance(project).createFileFromText( - "a." + getFileTypeExtension(getFileType()), getFileType(), text, LocalTimeCounter.currentTime(), true + "a." + getFileExt(), getFileType(), text, LocalTimeCounter.currentTime(), true ); } diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/MultilanguageCodeStyleAbstractPanel.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/MultilanguageCodeStyleAbstractPanel.java index 3b9876045572..e7dded62aec4 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/MultilanguageCodeStyleAbstractPanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/MultilanguageCodeStyleAbstractPanel.java @@ -120,6 +120,13 @@ public abstract class MultilanguageCodeStyleAbstractPanel extends CodeStyleAbstr return LanguageCodeStyleSettingsProvider.getRightMargin(myLanguage, getSettingsType()); } + @Override + protected String getFileExt() { + String fileExt = LanguageCodeStyleSettingsProvider.getFileExt(myLanguage); + if (fileExt != null) return fileExt; + return super.getFileExt(); + } + @NotNull @Override protected FileType getFileType() { @@ -190,7 +197,7 @@ public abstract class MultilanguageCodeStyleAbstractPanel extends CodeStyleAbstr Language[] langs = LanguageCodeStyleSettingsProvider.getLanguagesWithCodeStyleSettings(); if (langs.length == 0) return; for (Language lang : langs) { - tabbedPane.addTab(lang.getDisplayName(), createDummy()); + tabbedPane.addTab(getTabName(lang), createDummy()); } tabbedPane.setComponentAt(0, getEditor().getComponent()); myLangSelectionIndex = 0; @@ -229,7 +236,7 @@ public abstract class MultilanguageCodeStyleAbstractPanel extends CodeStyleAbstr private void selectCurrentLanguageTab() { for(int i = 0; i < tabbedPane.getTabCount(); i ++) { - if (myLanguage.getDisplayName().equals(tabbedPane.getTitleAt(i))) { + if (getTabName(myLanguage).equals(tabbedPane.getTitleAt(i))) { tabbedPane.setSelectedIndex(i); return; } @@ -252,4 +259,10 @@ public abstract class MultilanguageCodeStyleAbstractPanel extends CodeStyleAbstr private static JComponent createDummy() { return new JLabel(""); } + + private static String getTabName(Language language) { + String tabName = LanguageCodeStyleSettingsProvider.getLanguageName(language); + if (tabName == null) tabName = language.getDisplayName(); + return tabName; + } }