use of com.intellij.ide.scopeView.nodes.MethodNode in project intellij-community by JetBrains.
the class ClassesScopeTreeStructureExpander method treeWillExpand.
public void treeWillExpand(TreeExpansionEvent event) throws ExpandVetoException {
if (myProject.isDisposed())
return;
ProjectView projectView = ProjectView.getInstance(myProject);
final TreePath path = event.getPath();
if (path == null)
return;
final DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
if (node instanceof DirectoryNode) {
Set<ClassNode> classNodes = null;
for (int i = node.getChildCount() - 1; i >= 0; i--) {
final TreeNode childNode = node.getChildAt(i);
if (childNode instanceof FileNode) {
final FileNode fileNode = (FileNode) childNode;
final PsiElement file = fileNode.getPsiElement();
if (file instanceof PsiJavaFile) {
final VirtualFile virtualFile = ((PsiJavaFile) file).getVirtualFile();
if (virtualFile == null || (virtualFile.getFileType() != StdFileTypes.JAVA && virtualFile.getFileType() != StdFileTypes.CLASS)) {
return;
}
final PsiClass[] psiClasses = ((PsiJavaFile) file).getClasses();
if (psiClasses.length > 0) {
if (classNodes == null) {
classNodes = new HashSet<>();
}
for (final PsiClass psiClass : psiClasses) {
if (psiClass != null && psiClass.isValid()) {
final ClassNode classNode = new ClassNode(psiClass);
classNodes.add(classNode);
if (projectView.isShowMembers(ScopeViewPane.ID)) {
final List<PsiElement> result = new ArrayList<>();
PsiClassChildrenSource.DEFAULT_CHILDREN.addChildren(psiClass, result);
for (PsiElement psiElement : result) {
psiElement.accept(new JavaElementVisitor() {
@Override
public void visitClass(PsiClass aClass) {
classNode.add(new ClassNode(aClass));
}
@Override
public void visitMethod(PsiMethod method) {
classNode.add(new MethodNode(method));
}
@Override
public void visitField(PsiField field) {
classNode.add(new FieldNode(field));
}
});
}
}
}
}
node.remove(fileNode);
}
}
}
}
if (classNodes != null) {
for (ClassNode classNode : classNodes) {
node.add(classNode);
}
}
TreeUtil.sort(node, getNodeComparator());
final Object source = event.getSource();
if (source instanceof JTree) {
((DefaultTreeModel) ((JTree) source).getModel()).reload(node);
}
}
}
Aggregations