diff --git a/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java b/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java index fcf4d50b5813..4e1c381f498e 100644 --- a/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java +++ b/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java @@ -41,6 +41,7 @@ import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.impl.PsiManagerImpl; import com.intellij.psi.impl.file.PsiBinaryFileImpl; import com.intellij.psi.impl.file.PsiLargeFileImpl; +import com.intellij.psi.impl.file.impl.FileManager; import com.intellij.psi.impl.source.PsiFileImpl; import com.intellij.psi.impl.source.PsiPlainTextFileImpl; import com.intellij.psi.impl.source.tree.FileElement; @@ -134,7 +135,11 @@ public class SingleRootFileViewProvider extends UserDataHolderBase implements Fi @Nullable public final PsiFile getPsi(@NotNull Language target) { if (!isPhysical()) { - ((PsiManagerEx)myManager).getFileManager().setViewProvider(getVirtualFile(), this); + FileManager fileManager = ((PsiManagerEx)myManager).getFileManager(); + VirtualFile virtualFile = getVirtualFile(); + if (fileManager.findCachedViewProvider(virtualFile) == null) { + fileManager.setViewProvider(virtualFile, this); + } } return getPsiInner(target); } diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java b/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java index cb36c54839b0..cac35f6cea31 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java @@ -174,7 +174,7 @@ public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiF FileViewProvider provider = getViewProvider(); final VirtualFile vFile = provider.getVirtualFile(); if (!vFile.isValid()) return false; - if (!provider.isPhysical()) return true; // "dummy" file + if (!provider.isEventSystemEnabled()) return true; // "dummy" file if (myManager.getProject().isDisposed()) return false; return isPsiUpToDate(vFile); } @@ -182,7 +182,7 @@ public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiF protected boolean isPsiUpToDate(@NotNull VirtualFile vFile) { final FileViewProvider provider = myManager.findViewProvider(vFile); Language language = getLanguage(); - if (provider.getPsi(language) == this) { + if (provider == null || provider.getPsi(language) == this) { // provider == null in tests return true; } Language baseLanguage = provider.getBaseLanguage();