Search in sources :

Example 1 with ExternalLibrariesNode

use of com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode in project intellij-plugins by JetBrains.

the class DartTreeStructureProvider method modify.

@NotNull
public Collection<AbstractTreeNode> modify(@NotNull final AbstractTreeNode parentNode, @NotNull final Collection<AbstractTreeNode> children, final ViewSettings settings) {
    if (parentNode instanceof ExternalLibrariesNode) {
        return ContainerUtil.map(children, node -> {
            if (node instanceof NamedLibraryElementNode && (DartPackagesLibraryType.DART_PACKAGES_LIBRARY_NAME.equals(node.getName()) || DartSdk.DART_SDK_LIB_NAME.equals(node.getName()))) {
                final boolean isSdkRoot = DartSdk.DART_SDK_LIB_NAME.equals(node.getName());
                return new NamedLibraryElementNode(node.getProject(), ((NamedLibraryElementNode) node).getValue(), settings) {

                    @Override
                    public boolean canNavigate() {
                        return isSdkRoot;
                    }

                    @Override
                    public void navigate(boolean requestFocus) {
                        final Project project = getProject();
                        if (project != null) {
                            DartConfigurable.openDartSettings(project);
                        }
                    }
                };
            }
            return node;
        });
    }
    if (parentNode instanceof NamedLibraryElementNode && (DartPackagesLibraryType.DART_PACKAGES_LIBRARY_NAME.equals(parentNode.getName()) || DartSdk.DART_SDK_LIB_NAME.equals(parentNode.getName()))) {
        final boolean isSdkRoot = DartSdk.DART_SDK_LIB_NAME.equals(parentNode.getName());
        return ContainerUtil.map(children, node -> {
            final VirtualFile dir = node instanceof PsiDirectoryNode ? ((PsiDirectoryNode) node).getVirtualFile() : null;
            if (dir != null && dir.isInLocalFileSystem() && dir.isDirectory() && (isSdkRoot || "lib".equals(dir.getName()))) {
                return new DartSdkOrLibraryRootNode(node.getProject(), ((PsiDirectoryNode) node).getValue(), settings);
            }
            return node;
        });
    }
    // root/packages/ThisProject and root/packages/PathPackage folders are excluded in dart projects (see DartProjectComponent.excludeBuildAndPackagesFolders),
    // this provider adds location string tho these nodes in Project View like "ThisProject (ThisProject/lib)"
    final Project project = parentNode.getProject();
    final VirtualFile packagesDir = parentNode instanceof PsiDirectoryNode && project != null ? ((PsiDirectoryNode) parentNode).getVirtualFile() : null;
    final VirtualFile parentFolder = packagesDir != null && packagesDir.isDirectory() && PACKAGES_FOLDER_NAME.equals(packagesDir.getName()) ? packagesDir.getParent() : null;
    final VirtualFile pubspecYamlFile = parentFolder != null ? parentFolder.findChild(PUBSPEC_YAML) : null;
    if (pubspecYamlFile != null && !pubspecYamlFile.isDirectory()) {
        final ArrayList<AbstractTreeNode> modifiedChildren = new ArrayList<>(children);
        final DartUrlResolver resolver = DartUrlResolver.getInstance(project, pubspecYamlFile);
        resolver.processLivePackages((packageName, packageDir) -> {
            final VirtualFile folder = packagesDir.findChild(packageName);
            if (folder != null) {
                final AbstractTreeNode node = getFolderNode(children, folder);
                if (node == null) {
                    modifiedChildren.add(new SymlinkToLivePackageNode(project, packageName, packageDir));
                } else {
                    node.getPresentation().setLocationString(getPackageLocationString(packageDir));
                }
            }
        });
        return modifiedChildren;
    }
    return children;
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) Project(com.intellij.openapi.project.Project) ExternalLibrariesNode(com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode) ArrayList(java.util.ArrayList) DartUrlResolver(com.jetbrains.lang.dart.util.DartUrlResolver) AbstractTreeNode(com.intellij.ide.util.treeView.AbstractTreeNode) PsiDirectoryNode(com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode) NamedLibraryElementNode(com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode) NotNull(org.jetbrains.annotations.NotNull)

Example 2 with ExternalLibrariesNode

use of com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode in project intellij-plugins by JetBrains.

the class FlexCompositeSdkProjectViewStructureProvider method modify.

@NotNull
@Override
public Collection<AbstractTreeNode> modify(@NotNull final AbstractTreeNode parent, @NotNull final Collection<AbstractTreeNode> children, final ViewSettings settings) {
    if (!(parent instanceof ExternalLibrariesNode)) {
        return children;
    }
    Set<Sdk> processedSdks = new HashSet<>();
    Collection<AbstractTreeNode> result = new ArrayList<>();
    for (AbstractTreeNode child : children) {
        Object value = child.getValue();
        if (!(value instanceof NamedLibraryElement)) {
            result.add(child);
            continue;
        }
        NamedLibraryElement libraryElement = (NamedLibraryElement) value;
        OrderEntry orderEntry = libraryElement.getOrderEntry();
        if (!(orderEntry instanceof JdkOrderEntry)) {
            result.add(child);
            continue;
        }
        Sdk sdk = ((JdkOrderEntry) orderEntry).getJdk();
        if (!(sdk instanceof FlexCompositeSdk)) {
            result.add(child);
            continue;
        }
        Sdk[] sdks = ((FlexCompositeSdk) sdk).getSdks();
        for (Sdk individualSdk : sdks) {
            if (processedSdks.add(individualSdk)) {
                IndividualSdkOrderEntry entry = new IndividualSdkOrderEntry(individualSdk, orderEntry.getOwnerModule());
                result.add(new NamedLibraryElementNode(parent.getProject(), new NamedLibraryElement(null, entry), ((ExternalLibrariesNode) parent).getSettings()));
            }
        }
    }
    return result;
}
Also used : FlexCompositeSdk(com.intellij.lang.javascript.flex.projectStructure.FlexCompositeSdk) ExternalLibrariesNode(com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode) ArrayList(java.util.ArrayList) AbstractTreeNode(com.intellij.ide.util.treeView.AbstractTreeNode) NamedLibraryElement(com.intellij.ide.projectView.impl.nodes.NamedLibraryElement) FlexCompositeSdk(com.intellij.lang.javascript.flex.projectStructure.FlexCompositeSdk) Sdk(com.intellij.openapi.projectRoots.Sdk) HashSet(com.intellij.util.containers.hash.HashSet) NamedLibraryElementNode(com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode) NotNull(org.jetbrains.annotations.NotNull)

Example 3 with ExternalLibrariesNode

use of com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode in project intellij by bazelbuild.

the class BlazeTreeStructureProvider method modify.

@Override
public Collection<AbstractTreeNode> modify(AbstractTreeNode parent, Collection<AbstractTreeNode> children, ViewSettings settings) {
    Project project = parent.getProject();
    if (project == null || !Blaze.isBlazeProject(project)) {
        return children;
    }
    if (!(parent instanceof ProjectViewProjectNode)) {
        return children;
    }
    WorkspaceRootNode rootNode = createRootNode(project, settings);
    if (rootNode == null) {
        return children;
    }
    Collection<AbstractTreeNode> result = Lists.newArrayList();
    result.add(rootNode);
    for (AbstractTreeNode treeNode : children) {
        if (treeNode instanceof ExternalLibrariesNode) {
            result.add(treeNode);
        }
    }
    return result;
}
Also used : Project(com.intellij.openapi.project.Project) ProjectViewProjectNode(com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode) ExternalLibrariesNode(com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode) AbstractTreeNode(com.intellij.ide.util.treeView.AbstractTreeNode)

Aggregations

ExternalLibrariesNode (com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode)3 AbstractTreeNode (com.intellij.ide.util.treeView.AbstractTreeNode)3 NamedLibraryElementNode (com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode)2 Project (com.intellij.openapi.project.Project)2 ArrayList (java.util.ArrayList)2 NotNull (org.jetbrains.annotations.NotNull)2 NamedLibraryElement (com.intellij.ide.projectView.impl.nodes.NamedLibraryElement)1 ProjectViewProjectNode (com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode)1 PsiDirectoryNode (com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode)1 FlexCompositeSdk (com.intellij.lang.javascript.flex.projectStructure.FlexCompositeSdk)1 Sdk (com.intellij.openapi.projectRoots.Sdk)1 VirtualFile (com.intellij.openapi.vfs.VirtualFile)1 HashSet (com.intellij.util.containers.hash.HashSet)1 DartUrlResolver (com.jetbrains.lang.dart.util.DartUrlResolver)1