Search in sources :

Example 1 with ClassNode

use of com.intellij.ide.scopeView.nodes.ClassNode 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)

Example 2 with ClassNode

use of com.intellij.ide.scopeView.nodes.ClassNode in project intellij-community by JetBrains.

the class ClassesScopeTreeStructureExpander method treeWillCollapse.

public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException {
    final TreePath path = event.getPath();
    if (path == null)
        return;
    final DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
    if (node instanceof DirectoryNode) {
        Set<FileNode> fileNodes = null;
        for (int i = node.getChildCount() - 1; i >= 0; i--) {
            final TreeNode childNode = node.getChildAt(i);
            if (childNode instanceof ClassNode) {
                final ClassNode classNode = (ClassNode) childNode;
                final PsiFile containingFile = classNode.getContainingFile();
                if (containingFile != null && containingFile.isValid()) {
                    if (fileNodes == null) {
                        fileNodes = new HashSet<>();
                    }
                    fileNodes.add(new FileNode(containingFile.getVirtualFile(), myProject, true));
                }
                node.remove(classNode);
            }
        }
        if (fileNodes != null) {
            for (FileNode fileNode : fileNodes) {
                node.add(fileNode);
            }
        }
        TreeUtil.sort(node, getNodeComparator());
        final Object source = event.getSource();
        if (source instanceof JTree) {
            ((DefaultTreeModel) ((JTree) source).getModel()).reload(node);
        }
    }
}
Also used : ClassNode(com.intellij.ide.scopeView.nodes.ClassNode) DirectoryNode(com.intellij.packageDependencies.ui.DirectoryNode) FileNode(com.intellij.packageDependencies.ui.FileNode)

Aggregations

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