This commit is contained in:
Alexey Kudravtsev
2012-03-22 14:09:59 +04:00
parent 3ec742e0f8
commit 0ccf033358
2 changed files with 13 additions and 12 deletions
@@ -20,7 +20,6 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.openapi.vfs.pointers.VirtualFilePointer;
@@ -220,14 +219,7 @@ public class VirtualFilePointerImpl extends UserDataHolderBase implements Virtua
disposed = true;
final Pair<VirtualFile, String> pair = myFileAndUrl;
VirtualFile file = pair.first;
if (file != null) {
((VirtualFilePointerManagerImpl)VirtualFilePointerManager.getInstance()).clearPointerCaches(file.getUrl(), myListener);
}
String url = pair.second;
if (url != null && (file == null || !FileUtil.pathsEqual(url, file.getUrl()))) {
((VirtualFilePointerManagerImpl)VirtualFilePointerManager.getInstance()).clearPointerCaches(url, myListener);
}
((VirtualFilePointerManagerImpl)VirtualFilePointerManager.getInstance()).clearPointerCaches(pair.first, pair.second, myListener);
}
}
@@ -52,7 +52,7 @@ public class VirtualFilePointerManagerImpl extends VirtualFilePointerManager imp
private final Set<VirtualFilePointerContainerImpl> myContainers = new THashSet<VirtualFilePointerContainerImpl>(TObjectHashingStrategy.IDENTITY);
private final VirtualFileManagerEx myVirtualFileManager;
private final MessageBus myBus;
private static final Comparator<String> COMPARATOR = SystemInfo.isFileSystemCaseSensitive ? new Comparator<String>() {
private static final Comparator<String> URL_COMPARATOR = SystemInfo.isFileSystemCaseSensitive ? new Comparator<String>() {
@Override
public int compare(@NotNull String url1, @NotNull String url2) {
return url1.compareTo(url2);
@@ -70,7 +70,16 @@ public class VirtualFilePointerManagerImpl extends VirtualFilePointerManager imp
bus.connect().subscribe(VirtualFileManager.VFS_CHANGES, new VFSEventsProcessor());
}
synchronized void clearPointerCaches(String url, VirtualFilePointerListener listener) {
synchronized void clearPointerCaches(VirtualFile file, String url, VirtualFilePointerListener listener) {
if (file != null) {
removeFromMap(file.getUrl(), listener);
}
if (url != null && (file == null || URL_COMPARATOR.compare(url, file.getUrl()) != 0)) {
removeFromMap(url, listener);
}
}
private void removeFromMap(String url, VirtualFilePointerListener listener) {
TreeMap<String, VirtualFilePointerImpl> urlToPointer = myUrlToPointerMaps.get(listener);
assert urlToPointer != null : url;
urlToPointer.remove(VfsUtil.urlToPath(url));
@@ -272,7 +281,7 @@ public class VirtualFilePointerManagerImpl extends VirtualFilePointerManager imp
private synchronized VirtualFilePointerImpl getOrCreate(VirtualFile file, @NotNull String url, Disposable parentDisposable, @Nullable VirtualFilePointerListener listener, String path) {
TreeMap<String, VirtualFilePointerImpl> urlToPointer = myUrlToPointerMaps.get(listener);
if (urlToPointer == null) {
urlToPointer = new TreeMap<String, VirtualFilePointerImpl>(COMPARATOR);
urlToPointer = new TreeMap<String, VirtualFilePointerImpl>(URL_COMPARATOR);
myUrlToPointerMaps.put(listener, urlToPointer);
}
VirtualFilePointerImpl pointer = urlToPointer.get(path);