From 741f03209c8ae766bde32e6dbf19a81deeb87152 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Fri, 7 Nov 2014 14:16:27 +0100 Subject: [PATCH] get rid of LightVirtualFile by generalizing its processing as files in non local filesystem that can not survive their removal / undo of removal --- ... => DocumentReferenceByNonlocalVirtualFile.java} | 7 +++---- .../command/impl/DocumentReferenceManagerImpl.java | 5 ++--- .../openapi/command/impl/UndoRedoStacksHolder.java | 13 +++++++------ 3 files changed, 12 insertions(+), 13 deletions(-) rename platform/platform-impl/src/com/intellij/openapi/command/impl/{DocumentReferenceByLightVirtualFile.java => DocumentReferenceByNonlocalVirtualFile.java} (84%) diff --git a/platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceByLightVirtualFile.java b/platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceByNonlocalVirtualFile.java similarity index 84% rename from platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceByLightVirtualFile.java rename to platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceByNonlocalVirtualFile.java index d1dde6a49acd..101801ee3440 100644 --- a/platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceByLightVirtualFile.java +++ b/platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceByNonlocalVirtualFile.java @@ -19,14 +19,13 @@ import com.intellij.openapi.command.undo.DocumentReference; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.testFramework.LightVirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -class DocumentReferenceByLightVirtualFile implements DocumentReference { - private LightVirtualFile myFile; +class DocumentReferenceByNonlocalVirtualFile implements DocumentReference { + private final VirtualFile myFile; - DocumentReferenceByLightVirtualFile(@NotNull LightVirtualFile file) { + DocumentReferenceByNonlocalVirtualFile(@NotNull VirtualFile file) { myFile = file; } diff --git a/platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceManagerImpl.java index 020ed90d9ad8..7b98099aebcf 100644 --- a/platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/command/impl/DocumentReferenceManagerImpl.java @@ -28,7 +28,6 @@ import com.intellij.openapi.vfs.VirtualFileEvent; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.vfs.newvfs.NewVirtualFile; import com.intellij.reference.SoftReference; -import com.intellij.testFramework.LightVirtualFile; import com.intellij.util.containers.WeakKeyWeakValueHashMap; import com.intellij.util.containers.WeakValueHashMap; import com.intellij.util.io.fs.FilePath; @@ -134,10 +133,10 @@ public class DocumentReferenceManagerImpl extends DocumentReferenceManager imple public DocumentReference create(@NotNull VirtualFile file) { assertInDispatchThread(); - if (file instanceof LightVirtualFile) { + if (!file.isInLocalFileSystem()) { // we treat local files differently from non local because we can undo their deletion DocumentReference reference = file.getUserData(FILE_TO_STRONG_REF_KEY); if (reference == null) { - file.putUserData(FILE_TO_STRONG_REF_KEY, reference = new DocumentReferenceByLightVirtualFile((LightVirtualFile)file)); + file.putUserData(FILE_TO_STRONG_REF_KEY, reference = new DocumentReferenceByNonlocalVirtualFile(file)); } return reference; } diff --git a/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoRedoStacksHolder.java b/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoRedoStacksHolder.java index 742e3cb9cb23..41f49774bcf5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoRedoStacksHolder.java +++ b/platform/platform-impl/src/com/intellij/openapi/command/impl/UndoRedoStacksHolder.java @@ -21,7 +21,6 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.UserDataHolder; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.testFramework.LightVirtualFile; import com.intellij.util.containers.HashMap; import com.intellij.util.containers.WeakList; import gnu.trove.THashSet; @@ -35,9 +34,11 @@ class UndoRedoStacksHolder { private final boolean myUndo; private final LinkedList myGlobalStack = new LinkedList(); + // strongly reference local files for which we can undo file removal + // document without files and nonlocal files are stored without strong reference private final Map> myDocumentStacks = new HashMap>(); private final WeakList myDocumentsWithStacks = new WeakList(); - private final WeakList myLightVirtualFilesWithStacks = new WeakList(); + private final WeakList myNonlocalVirtualFilesWithStacks = new WeakList(); public UndoRedoStacksHolder(boolean isUndo) { myUndo = isUndo; @@ -53,8 +54,8 @@ class UndoRedoStacksHolder { LinkedList result; VirtualFile file = r.getFile(); - if (file instanceof LightVirtualFile) { - result = addWeaklyTrackedEmptyStack((LightVirtualFile)file, myLightVirtualFilesWithStacks); + if (!file.isInLocalFileSystem()) { + result = addWeaklyTrackedEmptyStack(file, myNonlocalVirtualFilesWithStacks); } else { result = myDocumentStacks.get(r); @@ -178,7 +179,7 @@ class UndoRedoStacksHolder { cleanWeaklyTrackedEmptyStacks(myDocumentsWithStacks); - cleanWeaklyTrackedEmptyStacks(myLightVirtualFilesWithStacks); + cleanWeaklyTrackedEmptyStacks(myNonlocalVirtualFilesWithStacks); } private void cleanWeaklyTrackedEmptyStacks(WeakList stackHolders) { @@ -240,7 +241,7 @@ class UndoRedoStacksHolder { for (Document each : myDocumentsWithStacks) { result.add(documentReferenceManager.create(each)); } - for (LightVirtualFile each : myLightVirtualFilesWithStacks) { + for (VirtualFile each : myNonlocalVirtualFilesWithStacks) { result.add(documentReferenceManager.create(each)); } }