Search in sources :

Example 1 with FieldNode

use of com.intellij.ide.scopeView.nodes.FieldNode 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);
        }
    }
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) ArrayList(java.util.ArrayList) DirectoryNode(com.intellij.packageDependencies.ui.DirectoryNode) MethodNode(com.intellij.ide.scopeView.nodes.MethodNode) ProjectView(com.intellij.ide.projectView.ProjectView) ClassNode(com.intellij.ide.scopeView.nodes.ClassNode) FieldNode(com.intellij.ide.scopeView.nodes.FieldNode) FileNode(com.intellij.packageDependencies.ui.FileNode)

Aggregations

ProjectView (com.intellij.ide.projectView.ProjectView)1 ClassNode (com.intellij.ide.scopeView.nodes.ClassNode)1 FieldNode (com.intellij.ide.scopeView.nodes.FieldNode)1 MethodNode (com.intellij.ide.scopeView.nodes.MethodNode)1 VirtualFile (com.intellij.openapi.vfs.VirtualFile)1 DirectoryNode (com.intellij.packageDependencies.ui.DirectoryNode)1 FileNode (com.intellij.packageDependencies.ui.FileNode)1 ArrayList (java.util.ArrayList)1