Polishing
- Use Java 8 idioms more consistently.
- Use newer Guava idioms more consistently.
- Apply some IntelliJ IDEA refactoring suggestions.
- Other changes made for readability and/or brevity.
Closes #3462.
PiperOrigin-RevId: 164700946
diff --git a/src/main/java/com/google/devtools/build/lib/graph/DFS.java b/src/main/java/com/google/devtools/build/lib/graph/DFS.java
index 9cf947e..1428060 100644
--- a/src/main/java/com/google/devtools/build/lib/graph/DFS.java
+++ b/src/main/java/com/google/devtools/build/lib/graph/DFS.java
@@ -15,8 +15,9 @@
package com.google.devtools.build.lib.graph;
import static java.util.Comparator.comparing;
+import static java.util.stream.Collectors.toCollection;
-import com.google.common.collect.Ordering;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
@@ -68,11 +69,7 @@
this.order = order;
this.transpose = transpose;
- if (edgeOrder == null) {
- this.edgeOrder = null;
- } else {
- this.edgeOrder = comparing(Node::getLabel, edgeOrder::compare);
- }
+ this.edgeOrder = (edgeOrder == null) ? null : comparing(Node::getLabel, edgeOrder::compare);
}
public DFS(Order order, boolean transpose) {
@@ -98,7 +95,8 @@
Collection<Node<T>> edgeTargets = transpose
? node.getPredecessors() : node.getSuccessors();
if (edgeOrder != null) {
- List<Node<T>> mutableNodeList = Ordering.from(edgeOrder).sortedCopy(edgeTargets);
+ List<Node<T>> mutableNodeList =
+ edgeTargets.stream().sorted(edgeOrder).collect(toCollection(ArrayList::new));
edgeTargets = mutableNodeList;
}
diff --git a/src/main/java/com/google/devtools/build/lib/graph/Digraph.java b/src/main/java/com/google/devtools/build/lib/graph/Digraph.java
index 3384263..2cb3287 100644
--- a/src/main/java/com/google/devtools/build/lib/graph/Digraph.java
+++ b/src/main/java/com/google/devtools/build/lib/graph/Digraph.java
@@ -17,9 +17,9 @@
import static java.util.Comparator.comparing;
import static java.util.Comparator.comparingLong;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
-import com.google.common.collect.Ordering;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -266,17 +266,9 @@
return that;
}
- /**
- * Returns a deterministic immutable view of the nodes of this graph.
- */
+ /** Returns a deterministic immutable copy of the nodes of this graph. */
public Collection<Node<T>> getNodes(final Comparator<? super T> comparator) {
- Ordering<Node<T>> ordering = new Ordering<Node<T>>() {
- @Override
- public int compare(Node<T> o1, Node<T> o2) {
- return comparator.compare(o1.getLabel(), o2.getLabel());
- }
- };
- return ordering.immutableSortedCopy(nodes.values());
+ return ImmutableList.sortedCopyOf(comparing(Node::getLabel, comparator), nodes.values());
}
/**
@@ -385,8 +377,7 @@
if (label == null) {
throw new NullPointerException();
}
- Node<T> n = nodes.computeIfAbsent(label, k -> new Node<T>(k, nextHashCode++));
- return n;
+ return nodes.computeIfAbsent(label, k -> new Node<>(k, nextHashCode++));
}
/******************************************************************
@@ -463,13 +454,8 @@
*/
public Collection<Set<Node<T>>> getStronglyConnectedComponents() {
final List<Set<Node<T>>> sccs = new ArrayList<>();
- NodeSetReceiver<T> r = new NodeSetReceiver<T>() {
- @Override
- public void accept(Set<Node<T>> scc) {
- sccs.add(scc);
- }
- };
- SccVisitor<T> v = new SccVisitor<T>();
+ NodeSetReceiver<T> r = sccs::add;
+ SccVisitor<T> v = new SccVisitor<>();
for (Node<T> node : nodes.values()) {
v.visit(r, node);
}
@@ -598,7 +584,7 @@
* list.
*/
public static <X> List<X> getPathToTreeNode(Map<X, X> tree, X node) {
- List<X> path = new ArrayList<X>();
+ List<X> path = new ArrayList<>();
while (node != null) {
path.add(node);
node = tree.get(node); // get parent
@@ -641,8 +627,8 @@
* @return The nodes of the graph, in a topological order
*/
public List<Node<T>> getTopologicalOrder(Comparator<? super T> edgeOrder) {
- CollectingVisitor<T> visitor = new CollectingVisitor<T>();
- DFS<T> visitation = new DFS<T>(DFS.Order.POSTORDER, edgeOrder, false);
+ CollectingVisitor<T> visitor = new CollectingVisitor<>();
+ DFS<T> visitation = new DFS<>(DFS.Order.POSTORDER, edgeOrder, false);
visitor.beginVisit();
for (Node<T> node : getNodes(edgeOrder)) {
visitation.visit(node, visitor);
@@ -658,7 +644,7 @@
* Returns the nodes of an acyclic graph in post-order.
*/
public List<Node<T>> getPostorder() {
- CollectingVisitor<T> collectingVisitor = new CollectingVisitor<T>();
+ CollectingVisitor<T> collectingVisitor = new CollectingVisitor<>();
visitPostorder(collectingVisitor);
return collectingVisitor.getVisitedNodes();
}
@@ -679,7 +665,7 @@
// This method is intentionally not static, to permit future expansion.
DFS<T> dfs = new DFS<T>(DFS.Order.PREORDER, false);
for (Node<T> n : startNodes) {
- dfs.visit(n, new AbstractGraphVisitor<T>());
+ dfs.visit(n, new AbstractGraphVisitor<>());
}
return dfs.getMarked();
}
@@ -700,7 +686,7 @@
// This method is intentionally not static, to permit future expansion.
DFS<T> dfs = new DFS<T>(DFS.Order.PREORDER, true);
for (Node<T> n : startNodes) {
- dfs.visit(n, new AbstractGraphVisitor<T>());
+ dfs.visit(n, new AbstractGraphVisitor<>());
}
return dfs.getMarked();
}
@@ -873,6 +859,7 @@
}
}
+ @FunctionalInterface
private interface NodeSetReceiver<T> {
void accept(Set<Node<T>> nodes);
}
@@ -1025,7 +1012,7 @@
DFS.Order order,
boolean transpose,
Iterable<Node<T>> startNodes) {
- DFS<T> visitation = new DFS<T>(order, transpose);
+ DFS<T> visitation = new DFS<>(order, transpose);
visitor.beginVisit();
for (Node<T> node: startNodes) {
visitation.visit(node, visitor);
@@ -1045,12 +1032,9 @@
*/
private static <T> Collection<Node<T>> maybeOrderCollection(
Collection<Node<T>> unordered, @Nullable final Comparator<? super T> comparator) {
- if (comparator == null) {
- return unordered;
- }
- List<Node<T>> result = new ArrayList<>(unordered);
- Collections.sort(result, makeNodeComparator(comparator));
- return result;
+ return comparator == null
+ ? unordered
+ : ImmutableList.sortedCopyOf(makeNodeComparator(comparator), unordered);
}
private void visitNodesBeforeEdges(
diff --git a/src/main/java/com/google/devtools/build/lib/graph/LabelSerializer.java b/src/main/java/com/google/devtools/build/lib/graph/LabelSerializer.java
index b64360b..6554560 100644
--- a/src/main/java/com/google/devtools/build/lib/graph/LabelSerializer.java
+++ b/src/main/java/com/google/devtools/build/lib/graph/LabelSerializer.java
@@ -15,10 +15,8 @@
package com.google.devtools.build.lib.graph;
-/**
- * <p> An interface for specifying a user-defined serialization of graph node
- * labels as strings. </p>
- */
+/** An interface for specifying a user-defined serialization of graph node labels as strings. */
+@FunctionalInterface
public interface LabelSerializer<T> {
/**
diff --git a/src/main/java/com/google/devtools/build/lib/graph/Node.java b/src/main/java/com/google/devtools/build/lib/graph/Node.java
index 87f05d7..5079ed4 100644
--- a/src/main/java/com/google/devtools/build/lib/graph/Node.java
+++ b/src/main/java/com/google/devtools/build/lib/graph/Node.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.lib.graph;
import com.google.common.collect.Sets;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -86,11 +85,7 @@
* Returns a duplicate-free collection of the nodes that this node links to.
*/
public Collection<Node<T>> getSuccessors() {
- if (succs == null) {
- return Collections.emptyList();
- } else {
- return Collections.unmodifiableCollection(succs);
- }
+ return succs == null ? Collections.emptyList() : Collections.unmodifiableCollection(succs);
}
/**
@@ -122,11 +117,7 @@
* this node.
*/
public Collection<Node<T>> getPredecessors() {
- if (preds == null) {
- return Collections.emptyList();
- } else {
- return Collections.unmodifiableCollection(preds);
- }
+ return preds == null ? Collections.emptyList() : Collections.unmodifiableCollection(preds);
}
/**