From 7c5a29b18ba2e8d3afa1e3f43f8cce979c87ba97 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Mon, 3 Sep 2012 17:04:37 +0400 Subject: [PATCH] change p.s.i. for light file on the fly --- .../src/com/intellij/psi/SingleRootFileViewProvider.java | 7 ++++++- .../src/com/intellij/psi/impl/source/PsiFileImpl.java | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) 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();