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

View File

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