use valid file view provider for post process reformat

This commit is contained in:
Maxim.Mossienko
2015-02-03 14:29:37 +01:00
parent 89b09bcc75
commit 9e65c25afd
2 changed files with 15 additions and 1 deletions
@@ -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)
@@ -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<PostprocessFormattingTask> postProcessTasks = new TreeSet<PostprocessFormattingTask>();
Collection<Disposable> toDispose = ContainerUtilRt.newArrayList();
try {