Search in sources :

Example 1 with AbstractPsModelNode

use of com.android.tools.idea.gradle.structure.configurables.ui.treeview.AbstractPsModelNode in project android by JetBrains.

the class DependencyNodes method createNodesFor.

@NotNull
static List<AbstractPsModelNode<?>> createNodesFor(@NotNull AndroidArtifactNode parent, @NotNull Collection<PsDependency> dependencies) {
    List<AbstractPsModelNode<?>> children = Lists.newArrayList();
    List<PsDependency> declared = new SortedList<>(PsDependencyComparator.INSTANCE);
    Multimap<PsDependency, PsDependency> allTransitive = HashMultimap.create();
    List<PsDependency> mayBeTransitive = Lists.newArrayList();
    for (PsDependency dependency : dependencies) {
        Collection<DependencyModel> parsedModels = dependency.getParsedModels();
        if (parsedModels.isEmpty()) {
            mayBeTransitive.add(dependency);
        } else {
            for (DependencyModel parsedModel : parsedModels) {
                // "main" artifact.
                for (PsAndroidArtifact artifact : parent.getModels()) {
                    if (artifact.contains(parsedModel)) {
                        declared.add(dependency);
                        break;
                    }
                }
            }
            addTransitive(dependency, allTransitive);
        }
    }
    Collection<PsDependency> uniqueTransitives = allTransitive.values();
    declared.addAll(mayBeTransitive.stream().filter(dependency -> !uniqueTransitives.contains(dependency)).collect(Collectors.toList()));
    for (PsDependency dependency : declared) {
        AbstractDependencyNode<?> child = AbstractDependencyNode.createNode(parent, dependency);
        if (child != null) {
            children.add(child);
        }
    }
    return children;
}
Also used : DependencyModel(com.android.tools.idea.gradle.dsl.model.dependencies.DependencyModel) PsAndroidArtifact(com.android.tools.idea.gradle.structure.model.android.PsAndroidArtifact) SortedList(com.intellij.util.containers.SortedList) AbstractPsModelNode(com.android.tools.idea.gradle.structure.configurables.ui.treeview.AbstractPsModelNode) PsDependency(com.android.tools.idea.gradle.structure.model.PsDependency) NotNull(org.jetbrains.annotations.NotNull)

Example 2 with AbstractPsModelNode

use of com.android.tools.idea.gradle.structure.configurables.ui.treeview.AbstractPsModelNode in project android by JetBrains.

the class ResolvedDependenciesPanel method getSelection.

@Override
@Nullable
public PsAndroidDependency getSelection() {
    AbstractPsModelNode selection = getSelectionIfSingle();
    if (selection instanceof AbstractDependencyNode) {
        AbstractDependencyNode node = (AbstractDependencyNode) selection;
        List<?> models = node.getModels();
        if (!models.isEmpty()) {
            return (PsAndroidDependency) models.get(0);
        }
    }
    return null;
}
Also used : PsAndroidDependency(com.android.tools.idea.gradle.structure.model.android.PsAndroidDependency) AbstractPsModelNode(com.android.tools.idea.gradle.structure.configurables.ui.treeview.AbstractPsModelNode) Nullable(org.jetbrains.annotations.Nullable)

Aggregations

AbstractPsModelNode (com.android.tools.idea.gradle.structure.configurables.ui.treeview.AbstractPsModelNode)2 DependencyModel (com.android.tools.idea.gradle.dsl.model.dependencies.DependencyModel)1 PsDependency (com.android.tools.idea.gradle.structure.model.PsDependency)1 PsAndroidArtifact (com.android.tools.idea.gradle.structure.model.android.PsAndroidArtifact)1 PsAndroidDependency (com.android.tools.idea.gradle.structure.model.android.PsAndroidDependency)1 SortedList (com.intellij.util.containers.SortedList)1 NotNull (org.jetbrains.annotations.NotNull)1 Nullable (org.jetbrains.annotations.Nullable)1