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 9701e2a24eae..9d17d9faa69b 100644
--- a/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java
+++ b/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java
@@ -18,6 +18,8 @@ package com.intellij.psi.codeStyle;
import com.intellij.lang.Language;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.extensions.Extensions;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -66,11 +68,22 @@ public abstract class LanguageCodeStyleSettingsProvider {
return null;
}
+ /**
+ * Allows to customize PSI file creation for a language settings preview panel.
+ *
+ * @param project current project
+ * @param text code sample to demonstrate formatting settings (see {@link #getCodeSample(LanguageCodeStyleSettingsProvider.SettingsType)}
+ * @return a PSI file instance with given text, or null for use
+ */
+ @Nullable
+ public PsiFile createFileFromText(final Project project, final String text) {
+ return null;
+ }
+
/**
* Creates an instance of CommonCodeStyleSettings and sets initial default values for those
* settings which differ from the original.
*
- * @param settings Main settings containing the common code style settings.
* @return Created instance of CommonCodeStyleSettings or null if associated language doesn't
* use its own language-specific common settings (the settings are shared with other languages).
*/
@@ -81,30 +94,22 @@ public abstract class LanguageCodeStyleSettingsProvider {
@NotNull
public static Language[] getLanguagesWithCodeStyleSettings() {
- ArrayList langs = new ArrayList();
+ final ArrayList languages = new ArrayList();
for (LanguageCodeStyleSettingsProvider provider : Extensions.getExtensions(EP_NAME)) {
- langs.add(provider.getLanguage());
+ languages.add(provider.getLanguage());
}
- return langs.toArray(new Language[langs.size()]);
+ return languages.toArray(new Language[languages.size()]);
}
@Nullable
public static String getCodeSample(Language lang, @NotNull SettingsType settingsType) {
- for (LanguageCodeStyleSettingsProvider provider : Extensions.getExtensions(EP_NAME)) {
- if (provider.getLanguage().equals(lang)) {
- return provider.getCodeSample(settingsType);
- }
- }
- return null;
+ final LanguageCodeStyleSettingsProvider provider = forLanguage(lang);
+ return provider != null ? provider.getCodeSample(settingsType) : null;
}
public static int getRightMargin(Language lang, @NotNull SettingsType settingsType) {
- for (LanguageCodeStyleSettingsProvider provider : Extensions.getExtensions(EP_NAME)) {
- if (provider.getLanguage().equals(lang)) {
- return provider.getRightMargin(settingsType);
- }
- }
- return -1;
+ final LanguageCodeStyleSettingsProvider provider = forLanguage(lang);
+ return provider != null ? provider.getRightMargin(settingsType) : -1;
}
@Nullable
@@ -121,32 +126,35 @@ public abstract class LanguageCodeStyleSettingsProvider {
@Nullable
public static CommonCodeStyleSettings getDefaultCommonSettings(Language lang) {
- for (LanguageCodeStyleSettingsProvider provider : Extensions.getExtensions(EP_NAME)) {
- if (provider.getLanguage().equals(lang)) {
- return provider.getDefaultCommonSettings();
- }
- }
- return null;
+ final LanguageCodeStyleSettingsProvider provider = forLanguage(lang);
+ return provider != null ? provider.getDefaultCommonSettings() : 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;
+ final LanguageCodeStyleSettingsProvider provider = forLanguage(lang);
+ return provider != null ? provider.getFileExt() : null;
}
@Nullable
public static String getLanguageName(Language lang) {
+ final LanguageCodeStyleSettingsProvider provider = forLanguage(lang);
+ return provider != null ? provider.getLanguageName() : null;
+ }
+
+ @Nullable
+ public static PsiFile createFileFromText(final Language language, final Project project, final String text) {
+ final LanguageCodeStyleSettingsProvider provider = forLanguage(language);
+ return provider != null ? provider.createFileFromText(project, text) : null;
+ }
+
+ @Nullable
+ public static LanguageCodeStyleSettingsProvider forLanguage(final Language language) {
for (LanguageCodeStyleSettingsProvider provider : Extensions.getExtensions(EP_NAME)) {
- if (provider.getLanguage().equals(lang)) {
- return provider.getLanguageName();
+ if (provider.getLanguage().equals(language)) {
+ return provider;
}
}
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 d36696978ebf..47b014ae8f78 100644
--- a/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java
+++ b/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java
@@ -88,14 +88,6 @@ public abstract class CodeStyleAbstractPanel implements Disposable {
private boolean myShowsPreviewHighlighters;
private boolean mySkipPreviewHighlighting;
- private synchronized void setSomethingChanged(final boolean b) {
- mySomethingChanged = b;
- }
-
- private synchronized boolean isSomethingChanged() {
- return mySomethingChanged;
- }
-
protected CodeStyleAbstractPanel(CodeStyleSettings settings) {
mySettings = settings;
myEditor = createEditor();
@@ -110,6 +102,14 @@ public abstract class CodeStyleAbstractPanel implements Disposable {
updatePreview();
}
+ private synchronized void setSomethingChanged(final boolean b) {
+ mySomethingChanged = b;
+ }
+
+ private synchronized boolean isSomethingChanged() {
+ return mySomethingChanged;
+ }
+
public void setModel(final CodeStyleSchemesModel model) {
myModel = model;
}
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 e7dded62aec4..d3ef4ffcb46e 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
@@ -16,9 +16,7 @@
package com.intellij.application.options.codeStyle;
import com.intellij.application.options.CodeStyleAbstractPanel;
-import com.intellij.ide.DataManager;
import com.intellij.lang.Language;
-import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.diagnostic.Logger;
@@ -30,7 +28,6 @@ import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.project.ProjectManager;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.codeStyle.CodeStyleManager;
@@ -114,6 +111,12 @@ public abstract class MultilanguageCodeStyleAbstractPanel extends CodeStyleAbstr
return sample;
}
+ @Override
+ protected PsiFile createFileFromText(final Project project, final String text) {
+ final PsiFile file = LanguageCodeStyleSettingsProvider.createFileFromText(myLanguage, project, text);
+ return file != null ? file : super.createFileFromText(project, text);
+ }
+
@Override
protected int getRightMargin() {
if (myLanguage == null) return -1;