Automated conversion to Java 8

With a few manual fixes for readability.

RELNOTES: None.
PiperOrigin-RevId: 160582556
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionStatusReporter.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionStatusReporter.java
index a15165b..fd3dfd5 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionStatusReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionStatusReporter.java
@@ -13,6 +13,8 @@
 // limitations under the License.
 package com.google.devtools.build.lib.actions;
 
+import static java.util.Comparator.comparing;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.eventbus.EventBus;
 import com.google.common.eventbus.Subscribe;
@@ -137,7 +139,7 @@
     if (actions.isEmpty()) {
       return;
     }
-    Collections.sort(actions, Pair.<Long, ActionExecutionMetadata>compareByFirst());
+    Collections.sort(actions, comparing(arg -> arg.first));
 
     buffer.append("\n      " + status + ":");
 
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java b/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java
index c4567d8..1a19d28 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java
@@ -129,19 +129,11 @@
     return fromPath(path.getPathString());
   }
 
-  private static final Function<String, ActionInput> FROM_PATH =
-      new Function<String, ActionInput>() {
-    @Override
-    public ActionInput apply(String path) {
-      return fromPath(path);
-    }
-  };
-
   /**
    * Creates a sequence of {@link ActionInput}s from a sequence of string paths.
    */
   public static Collection<ActionInput> fromPaths(Collection<String> paths) {
-    return Collections2.transform(paths, FROM_PATH);
+    return Collections2.transform(paths, ActionInputHelper::fromPath);
   }
 
   /**
@@ -178,13 +170,8 @@
       final Artifact parent, Iterable<? extends PathFragment> parentRelativePaths) {
     Preconditions.checkState(parent.isTreeArtifact(),
         "Given parent %s must be a TreeArtifact", parent);
-    return Iterables.transform(parentRelativePaths,
-        new Function<PathFragment, TreeFileArtifact>() {
-          @Override
-          public TreeFileArtifact apply(PathFragment pathFragment) {
-            return treeFileArtifact(parent, pathFragment);
-          }
-        });
+    return Iterables.transform(
+        parentRelativePaths, pathFragment -> treeFileArtifact(parent, pathFragment));
   }
 
   /** Returns a Set of TreeFileArtifacts with the given parent and parent-relative paths. */
@@ -224,12 +211,7 @@
 
   /** Formatter for execPath String output. Public because {@link Artifact} uses it directly. */
   public static final Function<ActionInput, String> EXEC_PATH_STRING_FORMATTER =
-      new Function<ActionInput, String>() {
-        @Override
-        public String apply(ActionInput input) {
-          return input.getExecPathString();
-        }
-  };
+      ActionInput::getExecPathString;
 
   public static Iterable<String> toExecPaths(Iterable<? extends ActionInput> artifacts) {
     return Iterables.transform(artifacts, EXEC_PATH_STRING_FORMATTER);
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java b/src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java
index 9fdbe1c..6b07fee 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionLookupValue.java
@@ -14,7 +14,6 @@
 package com.google.devtools.build.lib.actions;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.collect.ImmutableList;
@@ -157,14 +156,7 @@
   public static Map<Artifact, ActionAnalysisMetadata> getMapForConsistencyCheck(
       Map<Artifact, Integer> generatingActionIndex,
       final List<? extends ActionAnalysisMetadata> actions) {
-    return Maps.transformValues(
-        generatingActionIndex,
-        new Function<Integer, ActionAnalysisMetadata>() {
-          @Override
-          public ActionAnalysisMetadata apply(Integer index) {
-            return actions.get(index);
-          }
-        });
+    return Maps.transformValues(generatingActionIndex, actions::get);
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
index 4a956db..05d66df 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
@@ -14,6 +14,9 @@
 
 package com.google.devtools.build.lib.actions;
 
+import static com.google.common.collect.ImmutableList.toImmutableList;
+import static java.util.Comparator.comparing;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Function;
 import com.google.common.base.Functions;
@@ -21,7 +24,7 @@
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
-import com.google.common.collect.Ordering;
+import com.google.common.collect.Streams;
 import com.google.devtools.build.lib.actions.ActionAnalysisMetadata.MiddlemanType;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
@@ -104,32 +107,23 @@
 public class Artifact
     implements FileType.HasFilename, ActionInput, SkylarkValue, Comparable<Object> {
 
-  /**
-   * Compares artifact according to their exec paths. Sorts null values first.
-   */
-  public static final Comparator<Artifact> EXEC_PATH_COMPARATOR = new Comparator<Artifact>() {
-    @Override
-    public int compare(Artifact a, Artifact b) {
-      if (a == b) {
-        return 0;
-      } else if (a == null) {
-        return -1;
-      } else if (b == null) {
-        return -1;
-      } else {
-        return a.execPath.compareTo(b.execPath);
-      }
-    }
-  };
+  /** Compares artifact according to their exec paths. Sorts null values first. */
+  public static final Comparator<Artifact> EXEC_PATH_COMPARATOR =
+      (a, b) -> {
+        if (a == b) {
+          return 0;
+        } else if (a == null) {
+          return -1;
+        } else if (b == null) {
+          return -1;
+        } else {
+          return a.execPath.compareTo(b.execPath);
+        }
+      };
 
   /** Compares artifacts according to their root relative paths. */
   public static final Comparator<Artifact> ROOT_RELATIVE_PATH_COMPARATOR =
-      new Comparator<Artifact>() {
-        @Override
-        public int compare(Artifact lhs, Artifact rhs) {
-          return lhs.getRootRelativePath().compareTo(rhs.getRootRelativePath());
-        }
-      };
+      comparing(Artifact::getRootRelativePath);
 
   @Override
   public int compareTo(Object o) {
@@ -154,25 +148,8 @@
 
   public static final ImmutableList<Artifact> NO_ARTIFACTS = ImmutableList.of();
 
-  /**
-   * A Predicate that evaluates to true if the Artifact is not a middleman artifact.
-   */
-  public static final Predicate<Artifact> MIDDLEMAN_FILTER = new Predicate<Artifact>() {
-    @Override
-    public boolean apply(Artifact input) {
-      return !input.isMiddlemanArtifact();
-    }
-  };
-
-  /**
-   * A Predicate that evaluates to true if the Artifact <b>is</b> a tree artifact.
-   */
-  public static final Predicate<Artifact> IS_TREE_ARTIFACT = new Predicate<Artifact>() {
-    @Override
-    public boolean apply(Artifact input) {
-      return input.isTreeArtifact();
-    }
-  };
+  /** A Predicate that evaluates to true if the Artifact is not a middleman artifact. */
+  public static final Predicate<Artifact> MIDDLEMAN_FILTER = input -> !input.isMiddlemanArtifact();
 
   private final int hashCode;
   private final Path path;
@@ -664,35 +641,12 @@
     return result;
   }
 
-  //---------------------------------------------------------------------------
+  // ---------------------------------------------------------------------------
   // Static methods to assist in working with Artifacts
 
-  /**
-   * Formatter for execPath PathFragment output.
-   */
-  private static final Function<Artifact, PathFragment> EXEC_PATH_FORMATTER =
-      new Function<Artifact, PathFragment>() {
-        @Override
-        public PathFragment apply(Artifact input) {
-          return input.getExecPath();
-        }
-      };
-
+  /** Formatter for execPath PathFragment output. */
   public static final Function<Artifact, String> ROOT_RELATIVE_PATH_STRING =
-      new Function<Artifact, String>() {
-        @Override
-        public String apply(Artifact artifact) {
-          return artifact.getRootRelativePath().getPathString();
-        }
-      };
-
-  public static final Function<Artifact, String> ABSOLUTE_PATH_STRING =
-      new Function<Artifact, String>() {
-        @Override
-        public String apply(Artifact artifact) {
-          return artifact.getPath().getPathString();
-        }
-      };
+      artifact -> artifact.getRootRelativePath().getPathString();
 
   /**
    * Converts a collection of artifacts into execution-time path strings, and
@@ -724,7 +678,7 @@
   public static Iterable<String> toAbsolutePaths(Iterable<Artifact> artifacts) {
     return Iterables.transform(
         Iterables.filter(artifacts, MIDDLEMAN_FILTER),
-        ABSOLUTE_PATH_STRING);
+        artifact -> artifact.getPath().getPathString());
   }
 
   /**
@@ -734,7 +688,7 @@
   public static Iterable<String> toRootRelativePaths(Iterable<Artifact> artifacts) {
     return Iterables.transform(
         Iterables.filter(artifacts, MIDDLEMAN_FILTER),
-        ROOT_RELATIVE_PATH_STRING);
+        artifact -> artifact.getRootRelativePath().getPathString());
   }
 
   /**
@@ -800,7 +754,7 @@
    */
   public static void addExpandedExecPaths(Iterable<Artifact> artifacts,
       Collection<PathFragment> output, ArtifactExpander artifactExpander) {
-    addExpandedArtifacts(artifacts, output, EXEC_PATH_FORMATTER, artifactExpander);
+    addExpandedArtifacts(artifacts, output, Artifact::getExecPath, artifactExpander);
   }
 
   /**
@@ -906,15 +860,14 @@
    * Converts artifacts into their exec paths. Returns an immutable list.
    */
   public static List<PathFragment> asPathFragments(Iterable<? extends Artifact> artifacts) {
-    return ImmutableList.copyOf(Iterables.transform(artifacts, EXEC_PATH_FORMATTER));
+    return Streams.stream(artifacts).map(Artifact::getExecPath).collect(toImmutableList());
   }
 
   /**
    * Returns the exec paths of the input artifacts in alphabetical order.
    */
   public static ImmutableList<PathFragment> asSortedPathFragments(Iterable<Artifact> input) {
-    return Ordering.natural().immutableSortedCopy(Iterables.transform(
-        input, EXEC_PATH_FORMATTER));
+    return Streams.stream(input).map(Artifact::getExecPath).sorted().collect(toImmutableList());
   }
 
 
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ExecutionRequirements.java b/src/main/java/com/google/devtools/build/lib/actions/ExecutionRequirements.java
index 74e2eae..46ff4b0 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ExecutionRequirements.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ExecutionRequirements.java
@@ -116,29 +116,26 @@
       ParseableRequirement.create(
           "cpu:<int>",
           Pattern.compile("cpu:(.+)"),
-          new Function<String, String>() {
-            @Override
-            public String apply(String s) {
-              Preconditions.checkNotNull(s);
+          s -> {
+            Preconditions.checkNotNull(s);
 
-              int value;
-              try {
-                value = Integer.parseInt(s);
-              } catch (NumberFormatException e) {
-                return "can't be parsed as an integer";
-              }
-
-              // De-and-reserialize & compare to only allow canonical integer formats.
-              if (!Integer.toString(value).equals(s)) {
-                return "must be in canonical format (e.g. '4' instead of '+04')";
-              }
-
-              if (value < 1) {
-                return "can't be zero or negative";
-              }
-
-              return null;
+            int value;
+            try {
+              value = Integer.parseInt(s);
+            } catch (NumberFormatException e) {
+              return "can't be parsed as an integer";
             }
+
+            // De-and-reserialize & compare to only allow canonical integer formats.
+            if (!Integer.toString(value).equals(s)) {
+              return "must be in canonical format (e.g. '4' instead of '+04')";
+            }
+
+            if (value < 1) {
+              return "can't be zero or negative";
+            }
+
+            return null;
           });
 
   /** If an action supports running in persistent worker mode. */