[2020.2 release] IJSDK-869 Port project_view_pane code sample to async tree based on GrailsProjectViewPane.kt. Still shows deprecation warning for BaseProjectTreeBuilder, AbstractTreeUpdater, AbstractTreeBuilder

This commit is contained in:
JohnHake 2020-08-05 17:07:48 -07:00
parent 5241b5af31
commit 32680b9f5d
2 changed files with 29 additions and 12 deletions

View File

@ -6,6 +6,7 @@ import com.intellij.icons.AllIcons;
import com.intellij.ide.projectView.PresentationData; import com.intellij.ide.projectView.PresentationData;
import com.intellij.ide.projectView.ProjectView; import com.intellij.ide.projectView.ProjectView;
import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.ide.util.treeView.AbstractTreeNode;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectUtil; import com.intellij.openapi.project.ProjectUtil;
@ -43,15 +44,24 @@ public class ImagesProjectNode extends AbstractTreeNode<VirtualFile> {
addAllByExt(project, "svg"); addAllByExt(project, "svg");
} }
// Creates a collection of image files asynchronously
private void addAllByExt(Project project, String ext) { private void addAllByExt(Project project, String ext) {
final Set<VirtualFile> imagesFiles = getImagesFiles(project); final Set<VirtualFile> imagesFiles = getImagesFiles(project);
final VirtualFile projectDir = ProjectUtil.guessProjectDir(project); final VirtualFile projectDir = ProjectUtil.guessProjectDir(project);
for (VirtualFile file : FilenameIndex.getAllFilesByExt(project, ext)) {
try {
final Collection<VirtualFile> files = ReadAction.compute(() -> FilenameIndex.getAllFilesByExt(project, ext));
for (VirtualFile file : files) {
while (file != null && !file.equals(projectDir)) { while (file != null && !file.equals(projectDir)) {
imagesFiles.add(file); imagesFiles.add(file);
file = file.getParent(); file = file.getParent();
} }
} }
} catch (Throwable throwable) {
throwable.printStackTrace();
}
} }
@NotNull @NotNull

View File

@ -5,6 +5,7 @@ package org.intellij.sdk.view.pane;
import com.intellij.icons.AllIcons; import com.intellij.icons.AllIcons;
import com.intellij.ide.SelectInTarget; import com.intellij.ide.SelectInTarget;
import com.intellij.ide.impl.ProjectViewSelectInTarget; import com.intellij.ide.impl.ProjectViewSelectInTarget;
import com.intellij.ide.projectView.BaseProjectTreeBuilder;
import com.intellij.ide.projectView.ViewSettings; import com.intellij.ide.projectView.ViewSettings;
import com.intellij.ide.projectView.impl.AbstractProjectViewPSIPane; import com.intellij.ide.projectView.impl.AbstractProjectViewPSIPane;
import com.intellij.ide.projectView.impl.ProjectAbstractTreeStructureBase; import com.intellij.ide.projectView.impl.ProjectAbstractTreeStructureBase;
@ -54,12 +55,12 @@ public class ImagesProjectViewPane extends AbstractProjectViewPSIPane {
@Override @Override
public String toString() { public String toString() {
return "images"; return ID;
} }
@Override @Override
public String getMinorViewId() { public String getMinorViewId() {
return "images"; return ID;
} }
@Override @Override
@ -78,10 +79,10 @@ public class ImagesProjectViewPane extends AbstractProjectViewPSIPane {
return new ImagesProjectNode(project); return new ImagesProjectNode(project);
} }
@NotNull // Children will be searched in async mode
@Override @Override
public Object[] getChildElements(@NotNull Object element) { public boolean isToBuildChildrenInBackground(@NotNull Object element) {
return super.getChildElements(element); return true;
} }
}; };
} }
@ -89,7 +90,7 @@ public class ImagesProjectViewPane extends AbstractProjectViewPSIPane {
@NotNull @NotNull
@Override @Override
protected ProjectViewTree createTree(@NotNull DefaultTreeModel model) { protected ProjectViewTree createTree(@NotNull DefaultTreeModel model) {
return new ProjectViewTree(myProject, model) { return new ProjectViewTree(model) {
@Override @Override
public boolean isRootVisible() { public boolean isRootVisible() {
return true; return true;
@ -97,11 +98,17 @@ public class ImagesProjectViewPane extends AbstractProjectViewPSIPane {
}; };
} }
// Awaiting refactoring of AbstractProjectViewPSIPane#createTreeUpdater // Legacy code, awaiting refactoring of AbstractProjectViewPSIPane#createBuilder
@Override
protected BaseProjectTreeBuilder createBuilder(@NotNull DefaultTreeModel treeModel) {
return null;
}
// Legacy code, awaiting refactoring of AbstractProjectViewPSIPane#createTreeUpdater
@NotNull @NotNull
@Override @Override
protected AbstractTreeUpdater createTreeUpdater(@NotNull AbstractTreeBuilder builder) { protected AbstractTreeUpdater createTreeUpdater(@NotNull AbstractTreeBuilder builder) {
return new AbstractTreeUpdater(builder); throw new IllegalStateException("ImagesProjectViewPane tree is async now");
} }
} }