mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
remove document and vfile associations when invalidating a view provider
This commit is contained in:
@@ -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<VirtualFile, FileViewProvider> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user