mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Clear dir/id cache on move
This commit is contained in:
+6
-8
@@ -30,6 +30,7 @@ import com.intellij.openapi.vfs.newvfs.impl.FakeVirtualFile;
|
||||
import com.intellij.openapi.vfs.newvfs.impl.VirtualDirectoryImpl;
|
||||
import com.intellij.openapi.vfs.newvfs.impl.VirtualFileSystemEntry;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.containers.ConcurrentIntObjectMap;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.StripedLockIntObjectConcurrentHashMap;
|
||||
import com.intellij.util.io.ReplicatorInputStream;
|
||||
@@ -855,8 +856,7 @@ public class PersistentFSImpl extends PersistentFS implements ApplicationCompone
|
||||
return VfsUtilCore.toVirtualFileArray(roots);
|
||||
}
|
||||
|
||||
//guarded by dirCacheReadLock/dirCacheWriteLock
|
||||
@NotNull private final StripedLockIntObjectConcurrentHashMap<NewVirtualFile> myIdToDirCache = new StripedLockIntObjectConcurrentHashMap<NewVirtualFile>();
|
||||
@NotNull private final ConcurrentIntObjectMap<NewVirtualFile> myIdToDirCache = new StripedLockIntObjectConcurrentHashMap<NewVirtualFile>();
|
||||
|
||||
@Override
|
||||
public void clearIdCache() {
|
||||
@@ -884,7 +884,7 @@ public class PersistentFSImpl extends PersistentFS implements ApplicationCompone
|
||||
NewVirtualFile result = doFindFile(id, cachedOnly);
|
||||
|
||||
if (result != null && result.isDirectory()) {
|
||||
NewVirtualFile old = myIdToDirCache.putIfAbsent(id, result);
|
||||
NewVirtualFile old = myIdToDirCache.put(id, result);
|
||||
if (old != null) result = old;
|
||||
}
|
||||
return result;
|
||||
@@ -902,10 +902,6 @@ public class PersistentFSImpl extends PersistentFS implements ApplicationCompone
|
||||
myRootsLock.readLock().unlock();
|
||||
}
|
||||
}
|
||||
else if (parentId == id) {
|
||||
LOG.error("Corrupted VFS? id=" + id + " name=" + getName(id));
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
NewVirtualFile parentFile = _findFileById(parentId, cachedOnly);
|
||||
if (parentFile == null) {
|
||||
@@ -1129,7 +1125,9 @@ public class PersistentFSImpl extends PersistentFS implements ApplicationCompone
|
||||
executeCreateChild(newParent, copyName);
|
||||
}
|
||||
|
||||
private static void executeMove(@NotNull VirtualFile file, @NotNull VirtualFile newParent) {
|
||||
private void executeMove(@NotNull VirtualFile file, @NotNull VirtualFile newParent) {
|
||||
clearIdCache();
|
||||
|
||||
final int fileId = getFileId(file);
|
||||
final int newParentId = getFileId(newParent);
|
||||
final int oldParentId = getFileId(file.getParent());
|
||||
|
||||
Reference in New Issue
Block a user