on VFS change, reuse PSI if any of the view provider roots is present

This commit is contained in:
peter
2018-03-13 08:36:15 +01:00
parent 141af55683
commit 7af2a4efa4
2 changed files with 7 additions and 7 deletions
@@ -549,11 +549,11 @@ public class FileManagerImpl implements FileManager {
fileDocumentManager.reloadFromDisk(document);
}
else {
reloadPsiAfterTextChange(file, vFile);
reloadPsiAfterTextChange(file.getViewProvider(), vFile);
}
}
void reloadPsiAfterTextChange(@NotNull PsiFile file, @NotNull VirtualFile vFile) {
void reloadPsiAfterTextChange(@NotNull FileViewProvider viewProvider, @NotNull VirtualFile vFile) {
FileViewProvider latestProvider = createFileViewProvider(vFile, false);
PsiFile psi = latestProvider.getPsi(latestProvider.getBaseLanguage());
if (psi instanceof PsiLargeFile || psi instanceof PsiBinaryFile) {
@@ -561,6 +561,6 @@ public class FileManagerImpl implements FileManager {
return;
}
((AbstractFileViewProvider)file.getViewProvider()).onContentReload();
((AbstractFileViewProvider)viewProvider).onContentReload();
}
}
@@ -617,15 +617,15 @@ public class PsiVFSListener implements VirtualFileListener, BulkFileListener {
private class MyFileDocumentManagerAdapter extends FileDocumentManagerAdapter {
@Override
public void fileWithNoDocumentChanged(@NotNull final VirtualFile file) {
final PsiFile psiFile = myFileManager.getCachedPsiFileInner(file);
if (psiFile != null) {
FileViewProvider viewProvider = myFileManager.findCachedViewProvider(file);
if (viewProvider != null) {
ApplicationManager.getApplication().runWriteAction(
(ExternalChangeAction)() -> {
if (FileDocumentManagerImpl.recomputeFileTypeIfNecessary(file)) {
myFileManager.forceReload(file);
}
else {
myFileManager.reloadPsiAfterTextChange(psiFile, file);
myFileManager.reloadPsiAfterTextChange(viewProvider, file);
}
}
);
@@ -636,7 +636,7 @@ public class PsiVFSListener implements VirtualFileListener, BulkFileListener {
@Override
public void fileContentReloaded(@NotNull VirtualFile file, @NotNull Document document) {
PsiFile psiFile = myFileManager.getCachedPsiFileInner(file);
FileViewProvider psiFile = myFileManager.findCachedViewProvider(file);
if (!file.isValid() || psiFile == null || !FileUtilRt.isTooLarge(file.getLength()) || psiFile instanceof PsiLargeFile) return;
ApplicationManager.getApplication().runWriteAction((ExternalChangeAction)() -> myFileManager.reloadPsiAfterTextChange(psiFile, file));
}