diff options
author | Aurimas Liutikas <aurimas@google.com> | 2021-05-12 22:53:00 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-05-12 22:53:00 +0000 |
commit | 8630738d0a775a2f8e5bc09c437556bd75d8b620 (patch) | |
tree | 6f59a75348d07612173246ac6c4fca04bde0df2c /java/dagger/internal/codegen/binding/BindingGraph.java | |
parent | 0cd6a8551365e02a1687415356215ba2061739cd (diff) | |
parent | 5480a6c05f0c4727b3dd154709f40fdae8d8b4a2 (diff) | |
download | dagger2-8630738d0a775a2f8e5bc09c437556bd75d8b620.tar.gz |
Merge "Revert "Merge commit 'upstream/dagger-2.35.1^'"" am: 5882ce8935 am: 5480a6c05f
Original change: https://android-review.googlesource.com/c/platform/external/dagger2/+/1705751
Change-Id: I2f7a4d61b9f48965273925620a8dc0afc43c9bef
Diffstat (limited to 'java/dagger/internal/codegen/binding/BindingGraph.java')
-rw-r--r-- | java/dagger/internal/codegen/binding/BindingGraph.java | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/java/dagger/internal/codegen/binding/BindingGraph.java b/java/dagger/internal/codegen/binding/BindingGraph.java index 533d113f1..4936a0526 100644 --- a/java/dagger/internal/codegen/binding/BindingGraph.java +++ b/java/dagger/internal/codegen/binding/BindingGraph.java @@ -16,7 +16,6 @@ package dagger.internal.codegen.binding; -import static com.google.common.collect.Iterables.transform; import static dagger.internal.codegen.extension.DaggerCollectors.toOptional; import static dagger.internal.codegen.extension.DaggerStreams.presentValues; import static dagger.internal.codegen.extension.DaggerStreams.stream; @@ -27,12 +26,11 @@ import static dagger.internal.codegen.extension.DaggerStreams.toImmutableSet; import com.google.auto.value.AutoValue; import com.google.auto.value.extension.memoized.Memoized; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSetMultimap; -import com.google.common.collect.Multimaps; import com.google.common.collect.Sets; +import com.google.common.graph.Graphs; import com.google.common.graph.ImmutableNetwork; import com.google.common.graph.Traverser; import dagger.model.BindingGraph.ChildFactoryMethodEdge; @@ -41,9 +39,7 @@ import dagger.model.BindingGraph.Edge; import dagger.model.BindingGraph.Node; import dagger.model.ComponentPath; import dagger.model.Key; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Optional; import javax.lang.model.element.ExecutableElement; @@ -108,15 +104,6 @@ public abstract class BindingGraph { public ImmutableSetMultimap<Class<? extends Node>, ? extends Node> nodesByClass() { return super.nodesByClass(); } - - /** - * Returns an index of each {@link BindingNode} by its {@link ComponentPath}. Accessing this for - * a component and its parent components is faster than doing a graph traversal. - */ - @Memoized - ImmutableListMultimap<ComponentPath, BindingNode> bindingsByComponent() { - return Multimaps.index(transform(bindings(), BindingNode.class::cast), Node::componentPath); - } } static BindingGraph create( @@ -128,12 +115,12 @@ public abstract class BindingGraph { Optional<BindingGraph> parent, ComponentNode componentNode, TopLevelBindingGraph topLevelBindingGraph) { - List<BindingNode> reachableBindingNodes = new ArrayList<>(); - for (ComponentPath path = componentNode.componentPath(); - !path.components().isEmpty(); - path = ComponentPath.create(path.components().subList(0, path.components().size() - 1))) { - reachableBindingNodes.addAll(topLevelBindingGraph.bindingsByComponent().get(path)); - } + ImmutableSet<BindingNode> reachableBindingNodes = + Graphs.reachableNodes(topLevelBindingGraph.network().asGraph(), componentNode).stream() + .filter(node -> isSubpath(componentNode.componentPath(), node.componentPath())) + .filter(node -> node instanceof BindingNode) + .map(node -> (BindingNode) node) + .collect(toImmutableSet()); // Construct the maps of the ContributionBindings and MembersInjectionBindings. Map<Key, BindingNode> contributionBindings = new HashMap<>(); @@ -344,4 +331,17 @@ public abstract class BindingGraph { .addAll(membersInjectionBindings.values()) .build(); } + + // TODO(bcorso): Move this to ComponentPath + private static boolean isSubpath(ComponentPath path, ComponentPath subpath) { + if (path.components().size() < subpath.components().size()) { + return false; + } + for (int i = 0; i < subpath.components().size(); i++) { + if (!path.components().get(i).equals(subpath.components().get(i))) { + return false; + } + } + return true; + } } |