diff --git a/platform/core-impl/src/com/intellij/psi/impl/file/impl/FileManagerImpl.java b/platform/core-impl/src/com/intellij/psi/impl/file/impl/FileManagerImpl.java index 99412fe4645e..66288e3c2cb0 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/file/impl/FileManagerImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/file/impl/FileManagerImpl.java @@ -187,9 +187,7 @@ public class FileManagerImpl implements FileManager { DebugUtil.startPsiModification("clearViewProviders"); try { for (final FileViewProvider provider : myVFileToViewProviderMap.values()) { - if (provider instanceof SingleRootFileViewProvider) { - ((SingleRootFileViewProvider)provider).markInvalidated(); - } + markInvalidated(provider); } myVFileToViewProviderMap.clear(); } @@ -242,7 +240,7 @@ public class FileManagerImpl implements FileManager { if (prev != null) { DebugUtil.startPsiModification(null); try { - ((SingleRootFileViewProvider)prev).markInvalidated(); + markInvalidated(prev); DebugUtil.onInvalidated(prev); } finally { @@ -253,12 +251,6 @@ public class FileManagerImpl implements FileManager { if (!(virtualFile instanceof VirtualFileWindow)) { if (fileViewProvider == null) { myVFileToViewProviderMap.remove(virtualFile); - - Document document = FileDocumentManager.getInstance().getCachedDocument(virtualFile); - if (document != null) { - ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(myManager.getProject())).associatePsi(document, null); - } - virtualFile.putUserData(myPsiHardRefKey, null); } else { if (virtualFile instanceof LightVirtualFile) { @@ -473,9 +465,7 @@ public class FileManagerImpl implements FileManager { } else { FileViewProvider viewProvider = myVFileToViewProviderMap.remove(file); - if (viewProvider instanceof SingleRootFileViewProvider) { - ((SingleRootFileViewProvider)viewProvider).markInvalidated(); - } + markInvalidated(viewProvider); } return true; } @@ -486,6 +476,18 @@ public class FileManagerImpl implements FileManager { } } + private void markInvalidated(FileViewProvider viewProvider) { + if (viewProvider instanceof SingleRootFileViewProvider) { + ((SingleRootFileViewProvider)viewProvider).markInvalidated(); + } + VirtualFile virtualFile = viewProvider.getVirtualFile(); + Document document = FileDocumentManager.getInstance().getCachedDocument(virtualFile); + if (document != null) { + ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(myManager.getProject())).associatePsi(document, null); + } + virtualFile.putUserData(myPsiHardRefKey, null); + } + @Nullable PsiFile getCachedPsiFileInner(@NotNull VirtualFile file) { FileViewProvider fileViewProvider = myVFileToViewProviderMap.get(file); @@ -586,8 +588,8 @@ public class FileManagerImpl implements FileManager { try { for (Map.Entry entry : originalFileToPsiFileMap.entrySet()) { FileViewProvider viewProvider = entry.getValue(); - if (viewProvider instanceof SingleRootFileViewProvider && myVFileToViewProviderMap.get(entry.getKey()) != viewProvider) { - ((SingleRootFileViewProvider)viewProvider).markInvalidated(); + if (myVFileToViewProviderMap.get(entry.getKey()) != viewProvider) { + markInvalidated(viewProvider); } } }