aboutsummaryrefslogtreecommitdiff
path: root/java/dagger/internal/codegen/binding/BindingGraph.java
diff options
context:
space:
mode:
authorAurimas Liutikas <aurimas@google.com>2021-05-12 22:53:00 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-05-12 22:53:00 +0000
commit8630738d0a775a2f8e5bc09c437556bd75d8b620 (patch)
tree6f59a75348d07612173246ac6c4fca04bde0df2c /java/dagger/internal/codegen/binding/BindingGraph.java
parent0cd6a8551365e02a1687415356215ba2061739cd (diff)
parent5480a6c05f0c4727b3dd154709f40fdae8d8b4a2 (diff)
downloaddagger2-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.java40
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;
+ }
}