From 9e65c25afd4f1db54d634dc0939f9d317cce1bcc Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Tue, 3 Feb 2015 14:29:37 +0100 Subject: [PATCH] use valid file view provider for post process reformat --- .../testSrc/com/intellij/index/IndexTest.groovy | 2 +- .../impl/source/PostprocessReformattingAspect.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/java/java-tests/testSrc/com/intellij/index/IndexTest.groovy b/java/java-tests/testSrc/com/intellij/index/IndexTest.groovy index 68e6fca4b49d..c9a28e7febd2 100644 --- a/java/java-tests/testSrc/com/intellij/index/IndexTest.groovy +++ b/java/java-tests/testSrc/com/intellij/index/IndexTest.groovy @@ -324,7 +324,7 @@ public class IndexTest extends JavaCodeInsightFixtureTestCase { assert JavaPsiFacade.getInstance(project).findClass("pkg.Foo", scope) } - public void "_test language level change"() { + public void "test language level change"() { def psiFile = myFixture.addFileToProject("Foo.java", "class Foo {}") def scope = GlobalSearchScope.allScope(project) diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/PostprocessReformattingAspect.java b/platform/lang-impl/src/com/intellij/psi/impl/source/PostprocessReformattingAspect.java index f99d47201a20..4d4c254f6d46 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/PostprocessReformattingAspect.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/PostprocessReformattingAspect.java @@ -42,7 +42,9 @@ import com.intellij.pom.tree.events.TreeChangeEvent; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; +import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.impl.PsiTreeDebugBuilder; +import com.intellij.psi.impl.file.impl.FileManager; import com.intellij.psi.impl.source.codeStyle.CodeEditUtil; import com.intellij.psi.impl.source.codeStyle.CodeFormatterFacade; import com.intellij.psi.impl.source.codeStyle.IndentHelperImpl; @@ -314,6 +316,18 @@ public class PostprocessReformattingAspect implements PomModelAspect { final VirtualFile virtualFile = key.getVirtualFile(); if (!virtualFile.isValid()) return; + PsiManager manager = key.getManager(); + if (manager instanceof PsiManagerEx) { + FileManager fileManager = ((PsiManagerEx)manager).getFileManager(); + FileViewProvider viewProvider = fileManager.findCachedViewProvider(virtualFile); + if (viewProvider != key) { // viewProvider was invalidated e.g. due to language level change + if (viewProvider == null) viewProvider = fileManager.findViewProvider(virtualFile); + if (viewProvider != null) { + key = viewProvider; + } + } + } + final TreeSet postProcessTasks = new TreeSet(); Collection toDispose = ContainerUtilRt.newArrayList(); try {