mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-29 09:47:50 +08:00
[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:
parent
5241b5af31
commit
32680b9f5d
@ -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,14 +44,23 @@ 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)) {
|
|
||||||
while (file != null && !file.equals(projectDir)) {
|
try {
|
||||||
imagesFiles.add(file);
|
final Collection<VirtualFile> files = ReadAction.compute(() -> FilenameIndex.getAllFilesByExt(project, ext));
|
||||||
file = file.getParent();
|
|
||||||
|
for (VirtualFile file : files) {
|
||||||
|
while (file != null && !file.equals(projectDir)) {
|
||||||
|
imagesFiles.add(file);
|
||||||
|
file = file.getParent();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} catch (Throwable throwable) {
|
||||||
|
throwable.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user