mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
IJPL-171655 File chooser registers File Watcher lazily
It allows postponing initialization of heavy IjentWslNioFileSystem until the contents of WSL directories is really required. (cherry picked from commit 97cda46adbbfe804115160dd5b7f630ebf81fa17) IJ-CR-149490 GitOrigin-RevId: aeb41904d59d71d4a70f20cff3adf8331d6fe93a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
57f92b38c7
commit
5a58a3f2bf
@@ -28,6 +28,7 @@ import com.intellij.util.ui.tree.AbstractTreeModel;
|
||||
import it.unimi.dsi.fastutil.ints.IntArrayList;
|
||||
import it.unimi.dsi.fastutil.ints.IntList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.TreePath;
|
||||
@@ -95,7 +96,11 @@ public final class FileTreeModel extends AbstractTreeModel implements InvokerSup
|
||||
}
|
||||
else if (object instanceof Node) {
|
||||
Entry<Node> entry = getEntry((Node)object, true);
|
||||
if (entry != null) return entry.getChild(index);
|
||||
if (entry != null) {
|
||||
Node child = entry.getChild(index);
|
||||
child.ensureInitialized();
|
||||
return child;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -394,11 +399,13 @@ public final class FileTreeModel extends AbstractTreeModel implements InvokerSup
|
||||
}
|
||||
|
||||
private static class Node extends FileNode {
|
||||
private final @Nullable FileRefresher myRefresher;
|
||||
private boolean myInitialized;
|
||||
private boolean invalid;
|
||||
|
||||
private Node(State state, VirtualFile file) {
|
||||
super(file);
|
||||
if (state.refresher != null && !state.refresher.isRecursive()) state.refresher.register(file);
|
||||
this.myRefresher = state.refresher;
|
||||
updateContent(state);
|
||||
}
|
||||
|
||||
@@ -427,6 +434,12 @@ public final class FileTreeModel extends AbstractTreeModel implements InvokerSup
|
||||
public String toString() {
|
||||
return getName();
|
||||
}
|
||||
|
||||
void ensureInitialized() {
|
||||
if (myInitialized) return;
|
||||
myInitialized = true;
|
||||
if (myRefresher != null && !myRefresher.isRecursive()) myRefresher.register(getFile());
|
||||
}
|
||||
}
|
||||
|
||||
private static final class Root extends Node {
|
||||
@@ -434,7 +447,6 @@ public final class FileTreeModel extends AbstractTreeModel implements InvokerSup
|
||||
|
||||
private Root(State state, VirtualFile file) {
|
||||
super(state, file);
|
||||
if (state.refresher != null && state.refresher.isRecursive()) state.refresher.register(file);
|
||||
tree = new MapBasedTree<>(false, node -> node.getFile(), state.path);
|
||||
tree.onInsert(node -> markDirtyInternal(node.getFile()));
|
||||
tree.updateRoot(Pair.create(this, state.isLeaf(file)));
|
||||
|
||||
Reference in New Issue
Block a user