IDEA-319883 Dispose old models in package dependencies

Since now a model involves an Invoker, it's not a good idea to
keep these models around when they're no longer needed.

GitOrigin-RevId: 3210aa491a6a60e9193ef2938556d9251f67f0f4
This commit is contained in:
Sergei Tachenov
2023-08-30 16:19:26 +00:00
committed by intellij-monorepo-bot
parent b76c8cc36f
commit b9f01f1936
@@ -363,12 +363,20 @@ public final class DependenciesPanel extends JPanel implements Disposable, DataP
}
}
deps.removeAll(scope);
myRightTreeExpansionMonitor.freeze();
myRightTree.setModel(buildTreeModel(deps, myRightTreeMarker));
myRightTreeExpansionMonitor.restore();
replaceModel(myRightTree, buildTreeModel(deps, myRightTreeMarker), myRightTreeExpansionMonitor);
expandFirstLevel(myRightTree);
}
private static void replaceModel(@NotNull MyTree tree, @NotNull AsyncTreeModel model, @NotNull TreeExpansionMonitor<?> monitor) {
monitor.freeze();
var oldModel = tree.getModel();
if (oldModel instanceof Disposable disposable) {
Disposer.dispose(disposable);
}
tree.setModel(model);
monitor.restore();
}
private ActionGroup createTreePopupActions(boolean isRightTree) {
DefaultActionGroup group = new DefaultActionGroup();
final ActionManager actionManager = ActionManager.getInstance();
@@ -398,9 +406,7 @@ public final class DependenciesPanel extends JPanel implements Disposable, DataP
private void updateLeftTreeModel() {
Set<PsiFile> psiFiles = myDependencies.keySet();
myLeftTreeExpansionMonitor.freeze();
myLeftTree.setModel(buildTreeModel(psiFiles, myLeftTreeMarker));
myLeftTreeExpansionMonitor.restore();
replaceModel(myLeftTree, buildTreeModel(psiFiles, myLeftTreeMarker), myLeftTreeExpansionMonitor);
expandFirstLevel(myLeftTree);
}