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 b2ded58919f7..9604f35e52f9 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java @@ -74,10 +74,14 @@ public abstract class LanguageCodeStyleSettingsProvider { /** * Allows to customize PSI file creation for a language settings preview panel. + *
+ * IMPORTANT: The created file must be a non-physical one with PSI events disabled. For more information see
+ * {@link com.intellij.psi.PsiFileFactory#createFileFromText(String, Language, CharSequence, boolean, boolean)} where
+ * {@code eventSystemEnabled} parameter must be {@code false}
*
* @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
+ * @return a PSI file instance with given text, or null for default implementation using provider's language.
*/
@Nullable
public PsiFile createFileFromText(final Project project, final String text) {
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 616dc34ab789..c59a5221f8e0 100644
--- a/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java
+++ b/platform/lang-impl/src/com/intellij/application/options/CodeStyleAbstractPanel.java
@@ -308,8 +308,16 @@ public abstract class CodeStyleAbstractPanel implements Disposable {
protected PsiFile createFileFromText(Project project, String text) {
Language language = getDefaultLanguage();
if (language != null) {
- final PsiFile file = LanguageCodeStyleSettingsProvider.createFileFromText(language, project, text);
- if (file != null) return file;
+ LanguageCodeStyleSettingsProvider provider = LanguageCodeStyleSettingsProvider.forLanguage(language);
+ if (provider != null) {
+ final PsiFile file = provider.createFileFromText(project, text);
+ if (file != null) {
+ if (file.isPhysical()) {
+ LOG.error(provider.getClass() + " creates a physical file with PSI events enabled");
+ }
+ return file;
+ }
+ }
}
return PsiFileFactory.getInstance(project).createFileFromText(
"a." + getFileExt(), getFileType(), text, LocalTimeCounter.currentTime(), false
diff --git a/platform/platform-tests/testSrc/com/intellij/ide/codeStyleSettings/CodeSamplesCorrectnessTest.java b/platform/platform-tests/testSrc/com/intellij/ide/codeStyleSettings/CodeSamplesCorrectnessTest.java
index 65baedbe0de0..730e4600f173 100644
--- a/platform/platform-tests/testSrc/com/intellij/ide/codeStyleSettings/CodeSamplesCorrectnessTest.java
+++ b/platform/platform-tests/testSrc/com/intellij/ide/codeStyleSettings/CodeSamplesCorrectnessTest.java
@@ -23,7 +23,6 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase;
-import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.junit.Assert;
@@ -45,6 +44,19 @@ public class CodeSamplesCorrectnessTest extends LightPlatformCodeInsightFixtureT
mySettingValues = SettingsType.values();
}
+ public void testNonPhysicalFiles() {
+ LanguageCodeStyleSettingsProvider[] providers = LanguageCodeStyleSettingsProvider.EP_NAME.getExtensions();
+ for (LanguageCodeStyleSettingsProvider provider : providers) {
+ List