VirtualFilePointerManager is component again to ensure disposal order

This commit is contained in:
Alexey Kudravtsev
2012-07-11 13:21:27 +04:00
parent 0d0d6535ce
commit 8fa0499ffa
3 changed files with 36 additions and 8 deletions
@@ -17,6 +17,7 @@ package com.intellij.openapi.vfs.impl;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ApplicationComponent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.io.FileUtil;
@@ -27,7 +28,10 @@ import com.intellij.openapi.vfs.ex.VirtualFileManagerEx;
import com.intellij.openapi.vfs.ex.temp.TempFileSystem;
import com.intellij.openapi.vfs.newvfs.BulkFileListener;
import com.intellij.openapi.vfs.newvfs.events.*;
import com.intellij.openapi.vfs.pointers.*;
import com.intellij.openapi.vfs.pointers.VirtualFilePointer;
import com.intellij.openapi.vfs.pointers.VirtualFilePointerContainer;
import com.intellij.openapi.vfs.pointers.VirtualFilePointerListener;
import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.messages.MessageBus;
@@ -41,11 +45,11 @@ import org.jetbrains.annotations.TestOnly;
import java.util.*;
public class VirtualFilePointerManagerImpl extends VirtualFilePointerManager implements ModificationTracker, BulkFileListener {
public class VirtualFilePointerManagerImpl extends VirtualFilePointerManager implements ApplicationComponent, ModificationTracker, BulkFileListener {
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vfs.impl.VirtualFilePointerManagerImpl");
private static final TempFileSystem TEMP_FILE_SYSTEM = TempFileSystem.getInstance();
private static final LocalFileSystem LOCAL_FILE_SYSTEM = LocalFileSystem.getInstance();
private static final JarFileSystem JAR_FILE_SYSTEM = JarFileSystem.getInstance();
private final TempFileSystem TEMP_FILE_SYSTEM;
private final LocalFileSystem LOCAL_FILE_SYSTEM;
private final JarFileSystem JAR_FILE_SYSTEM;
private long myVfsModificationCounter;
// guarded by this
private final Map<VirtualFilePointerListener, FilePointerPartNode> myPointers = new LinkedHashMap<VirtualFilePointerListener, FilePointerPartNode>();
@@ -67,10 +71,17 @@ public class VirtualFilePointerManagerImpl extends VirtualFilePointerManager imp
}
};
VirtualFilePointerManagerImpl(@NotNull VirtualFileManagerEx virtualFileManagerEx, @NotNull MessageBus bus) {
VirtualFilePointerManagerImpl(@NotNull VirtualFileManagerEx virtualFileManagerEx,
@NotNull MessageBus bus,
@NotNull TempFileSystem tempFileSystem,
@NotNull LocalFileSystem localFileSystem,
@NotNull JarFileSystem jarFileSystem) {
myVirtualFileManager = virtualFileManagerEx;
myBus = bus;
bus.connect().subscribe(VirtualFileManager.VFS_CHANGES, this);
TEMP_FILE_SYSTEM = tempFileSystem;
LOCAL_FILE_SYSTEM = localFileSystem;
JAR_FILE_SYSTEM = jarFileSystem;
}
@@ -79,6 +90,20 @@ public class VirtualFilePointerManagerImpl extends VirtualFilePointerManager imp
return myVfsModificationCounter;
}
@Override
public void initComponent() {
}
@Override
public void disposeComponent() {
}
@NotNull
@Override
public String getComponentName() {
return "VirtualFilePointerManager";
}
private static class EventDescriptor {
@NotNull private final VirtualFilePointerListener myListener;
@NotNull private final VirtualFilePointer[] myPointers;
@@ -13,8 +13,6 @@
<applicationService serviceInterface="com.intellij.openapi.vfs.tracker.VirtualFileTracker"
serviceImplementation="com.intellij.openapi.vfs.tracker.VirtualFileTrackerImpl"/>
<applicationService serviceInterface="com.intellij.openapi.vfs.pointers.VirtualFilePointerManager"
serviceImplementation="com.intellij.openapi.vfs.impl.VirtualFilePointerManagerImpl"/>
<applicationService serviceInterface="com.intellij.concurrency.JobScheduler"
serviceImplementation="com.intellij.concurrency.JobSchedulerImpl"/>
@@ -20,6 +20,11 @@
<implementation-class>com.intellij.openapi.vfs.impl.VirtualFileManagerImpl</implementation-class>
</component>
<component>
<interface-class>com.intellij.openapi.vfs.pointers.VirtualFilePointerManager</interface-class>
<implementation-class>com.intellij.openapi.vfs.impl.VirtualFilePointerManagerImpl</implementation-class>
</component>
<component>
<interface-class>com.intellij.openapi.vfs.newvfs.ManagingFS</interface-class>
<implementation-class>com.intellij.openapi.vfs.newvfs.persistent.PersistentFS</implementation-class>