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/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index 0b1b86d..ed8af8a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -974,14 +974,12 @@
 
     public Builder<TYPE> legacyMandatoryProviders(String... ids) {
       return mandatoryProviders(
-          Iterables.transform(Arrays.asList(ids),
-              new Function<String, SkylarkProviderIdentifier>() {
-        @Override
-        public SkylarkProviderIdentifier apply(String s) {
-          Preconditions.checkNotNull(s);
-          return SkylarkProviderIdentifier.forLegacy(s);
-        }
-      }));
+          Iterables.transform(
+              Arrays.asList(ids),
+              s -> {
+                Preconditions.checkNotNull(s);
+                return SkylarkProviderIdentifier.forLegacy(s);
+              }));
     }
 
     public Builder<TYPE> mandatoryProviders(Iterable<SkylarkProviderIdentifier> providers) {
@@ -1014,14 +1012,7 @@
      * dependencies through this attribute.
      */
     public Builder<TYPE> aspect(NativeAspectClass aspect) {
-      Function<Rule, AspectParameters> noParameters =
-          new Function<Rule, AspectParameters>() {
-            @Override
-            public AspectParameters apply(Rule input) {
-              return AspectParameters.EMPTY;
-            }
-          };
-      return this.aspect(aspect, noParameters);
+      return this.aspect(aspect, input -> AspectParameters.EMPTY);
     }
 
     public Builder<TYPE> aspect(
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AttributeContainer.java b/src/main/java/com/google/devtools/build/lib/packages/AttributeContainer.java
index 80889a9..8622cda 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AttributeContainer.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AttributeContainer.java
@@ -226,11 +226,7 @@
     setAttributeLocation(index, location);
   }
 
+  // TODO(laurentlb): Delete field and inline it.
   public static final Function<RuleClass, AttributeContainer> ATTRIBUTE_CONTAINER_FACTORY =
-      new Function<RuleClass, AttributeContainer>() {
-        @Override
-        public AttributeContainer apply(RuleClass ruleClass) {
-          return new AttributeContainer(ruleClass);
-        }
-      };
+      AttributeContainer::new;
 }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/BuildType.java b/src/main/java/com/google/devtools/build/lib/packages/BuildType.java
index 6a32c68..a602515 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/BuildType.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/BuildType.java
@@ -290,9 +290,7 @@
       Map<Label, List<Object>> convertedFrom = new LinkedHashMap<>();
       for (Object original : input.keySet()) {
         Label label = LABEL.convert(original, what, context);
-        if (!convertedFrom.containsKey(label)) {
-          convertedFrom.put(label, new ArrayList<Object>());
-        }
+        convertedFrom.computeIfAbsent(label, k -> new ArrayList<Object>());
         convertedFrom.get(label).add(original);
       }
       StringBuilder errorMessage = new StringBuilder();
diff --git a/src/main/java/com/google/devtools/build/lib/packages/GlobCache.java b/src/main/java/com/google/devtools/build/lib/packages/GlobCache.java
index aecf43f..e46bddf 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/GlobCache.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/GlobCache.java
@@ -109,18 +109,19 @@
     this.maxDirectoriesToEagerlyVisit = maxDirectoriesToEagerlyVisit;
 
     Preconditions.checkNotNull(locator);
-    childDirectoryPredicate = new Predicate<Path>() {
-      @Override
-      public boolean apply(Path directory) {
-        if (directory.equals(packageDirectory)) {
-          return true;
-        }
-        PackageIdentifier subPackageId = PackageIdentifier.create(
-            packageId.getRepository(),
-            packageId.getPackageFragment().getRelative(directory.relativeTo(packageDirectory)));
-        return locator.getBuildFileForPackage(subPackageId) == null;
-      }
-    };
+    childDirectoryPredicate =
+        directory -> {
+          if (directory.equals(packageDirectory)) {
+            return true;
+          }
+          PackageIdentifier subPackageId =
+              PackageIdentifier.create(
+                  packageId.getRepository(),
+                  packageId
+                      .getPackageFragment()
+                      .getRelative(directory.relativeTo(packageDirectory)));
+          return locator.getBuildFileForPackage(subPackageId) == null;
+        };
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
index 9dea0b7..5250554 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
@@ -15,8 +15,8 @@
 
 import static com.google.devtools.build.lib.syntax.SkylarkType.castMap;
 import static java.util.Collections.singleton;
+import static java.util.stream.Collectors.toCollection;
 
-import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
@@ -319,26 +319,18 @@
     } else if (BuildType.LABEL_LIST == attrType) {
       // Labels are most often used to change the extension,
       // e.g. %.foo -> %.java, so we return the basename w/o extension.
-      return Sets.newLinkedHashSet(
-          Iterables.transform(rule.get(attrName, BuildType.LABEL_LIST),
-              new Function<Label, String>() {
-                @Override
-                public String apply(Label label) {
-                  return FileSystemUtils.removeExtension(label.getName());
-                }
-              }));
+      return rule.get(attrName, BuildType.LABEL_LIST)
+          .stream()
+          .map(label -> FileSystemUtils.removeExtension(label.getName()))
+          .collect(toCollection(LinkedHashSet::new));
     } else if (BuildType.OUTPUT == attrType) {
       Label out = rule.get(attrName, BuildType.OUTPUT);
       return singleton(out.getName());
     } else if (BuildType.OUTPUT_LIST == attrType) {
-      return Sets.newLinkedHashSet(
-          Iterables.transform(rule.get(attrName, BuildType.OUTPUT_LIST),
-              new Function<Label, String>() {
-                @Override
-                public String apply(Label label) {
-                  return label.getName();
-                }
-              }));
+      return rule.get(attrName, BuildType.OUTPUT_LIST)
+          .stream()
+          .map(Label::getName)
+          .collect(toCollection(LinkedHashSet::new));
     }
     throw new IllegalArgumentException(
         "Don't know how to handle " + attrName + " : " + attrType);
diff --git a/src/main/java/com/google/devtools/build/lib/packages/MakeEnvironment.java b/src/main/java/com/google/devtools/build/lib/packages/MakeEnvironment.java
index becb14c..a208e11 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/MakeEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/MakeEnvironment.java
@@ -18,12 +18,10 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-
 import javax.annotation.Nullable;
 
 /**
@@ -132,11 +130,7 @@
       if (varname == null || value == null || platformSetRegexp == null) {
         throw new NullPointerException();
       }
-      LinkedList<Binding> bindings = env.get(varname);
-      if (bindings == null) {
-        bindings = new LinkedList<>();
-        env.put(varname, bindings);
-      }
+      LinkedList<Binding> bindings = env.computeIfAbsent(varname, k -> new LinkedList<>());
       // push new bindings onto head of list (=> most recent binding is
       // definitive):
       bindings.addFirst(new Binding(value, platformSetRegexp));
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index 91cc477..e5a5598 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -15,7 +15,6 @@
 package com.google.devtools.build.lib.packages;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
@@ -483,14 +482,7 @@
   /** Returns all rules in the package that match the given rule class. */
   public Iterable<Rule> getRulesMatchingRuleClass(final String ruleClass) {
     Iterable<Rule> targets = getTargets(Rule.class);
-    return Iterables.filter(
-        targets,
-        new Predicate<Rule>() {
-          @Override
-          public boolean apply(@Nullable Rule rule) {
-            return rule.getRuleClass().equals(ruleClass);
-          }
-        });
+    return Iterables.filter(targets, rule -> rule.getRuleClass().equals(ruleClass));
   }
 
   /**
@@ -1264,9 +1256,7 @@
         PathFragment outputFileFragment = PathFragment.create(outputFile.getName());
         for (int i = 1; i < outputFileFragment.segmentCount(); i++) {
           String prefix = outputFileFragment.subFragment(0, i).toString();
-          if (!outputFilePrefixes.containsKey(prefix)) {
-            outputFilePrefixes.put(prefix, outputFile);
-          }
+          outputFilePrefixes.putIfAbsent(prefix, outputFile);
         }
       }
       targets.put(rule.getName(), rule);
@@ -1460,9 +1450,7 @@
             throw conflictingOutputFile(outputFile, (OutputFile) targets.get(prefix));
           }
 
-          if (!outputFilePrefixes.containsKey(prefix)) {
-            outputFilePrefixes.put(prefix, outputFile);
-          }
+          outputFilePrefixes.putIfAbsent(prefix, outputFile);
         }
       }
 
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java b/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java
index 24719c6..586b105 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java
@@ -115,15 +115,9 @@
         return true;
       }
       return satisfies(
-          new Predicate<Class<?>>() {
-            @Override
-            public boolean apply(Class<?> aClass) {
-              return advertisedProviderSet.getNativeProviders().contains(aClass);
-            }
-          },
+          aClass -> advertisedProviderSet.getNativeProviders().contains(aClass),
           Predicates.in(advertisedProviderSet.getSkylarkProviders()),
-          requiredProviders
-      );
+          requiredProviders);
     }
 
     /**
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkAspect.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkAspect.java
index 895afba..26fcd30 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkAspect.java
@@ -27,7 +27,6 @@
 import com.google.devtools.build.lib.util.Preconditions;
 import java.util.Arrays;
 import java.util.List;
-import javax.annotation.Nullable;
 
 /** A Skylark value that is a result of an 'aspect(..)' function call. */
 @SkylarkModule(
@@ -167,37 +166,33 @@
   }
 
   public Function<Rule, AspectParameters> getDefaultParametersExtractor() {
-    return new Function<Rule, AspectParameters>() {
-      @Nullable
-      @Override
-      public AspectParameters apply(Rule rule) {
-        AttributeMap ruleAttrs = RawAttributeMapper.of(rule);
-        AspectParameters.Builder builder = new AspectParameters.Builder();
-        for (Attribute aspectAttr : attributes) {
-          if (!Attribute.isImplicit(aspectAttr.getName())) {
-            String param = aspectAttr.getName();
-            Attribute ruleAttr = ruleAttrs.getAttributeDefinition(param);
-            if (paramAttributes.contains(aspectAttr.getName())) {
-              // These are preconditions because if they are false, RuleFunction.call() should
-              // already have generated an error.
-              Preconditions.checkArgument(ruleAttr != null,
-                  String.format("Cannot apply aspect %s to %s that does not define attribute '%s'.",
-                                getName(),
-                                rule.getTargetKind(),
-                                param));
-              Preconditions.checkArgument(ruleAttr.getType() == Type.STRING,
-                  String.format("Cannot apply aspect %s to %s with non-string attribute '%s'.",
-                                getName(),
-                                rule.getTargetKind(),
-                                param));
-            }
-            if (ruleAttr != null && ruleAttr.getType() == aspectAttr.getType()) {
-              builder.addAttribute(param, (String) ruleAttrs.get(param, ruleAttr.getType()));
-            }
+    return rule -> {
+      AttributeMap ruleAttrs = RawAttributeMapper.of(rule);
+      AspectParameters.Builder builder = new AspectParameters.Builder();
+      for (Attribute aspectAttr : attributes) {
+        if (!Attribute.isImplicit(aspectAttr.getName())) {
+          String param = aspectAttr.getName();
+          Attribute ruleAttr = ruleAttrs.getAttributeDefinition(param);
+          if (paramAttributes.contains(aspectAttr.getName())) {
+            // These are preconditions because if they are false, RuleFunction.call() should
+            // already have generated an error.
+            Preconditions.checkArgument(
+                ruleAttr != null,
+                String.format(
+                    "Cannot apply aspect %s to %s that does not define attribute '%s'.",
+                    getName(), rule.getTargetKind(), param));
+            Preconditions.checkArgument(
+                ruleAttr.getType() == Type.STRING,
+                String.format(
+                    "Cannot apply aspect %s to %s with non-string attribute '%s'.",
+                    getName(), rule.getTargetKind(), param));
+          }
+          if (ruleAttr != null && ruleAttr.getType() == aspectAttr.getType()) {
+            builder.addAttribute(param, (String) ruleAttrs.get(param, ruleAttr.getType()));
           }
         }
-        return builder.build();
       }
+      return builder.build();
     };
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java b/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java
index 4f3598e..a2babbc 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/TargetUtils.java
@@ -209,22 +209,19 @@
         TestTargetUtils.sortTagsBySense(tagFilterList);
     final Collection<String> requiredTags = tagLists.first;
     final Collection<String> excludedTags = tagLists.second;
-    return new Predicate<Target>() {
-      @Override
-      public boolean apply(Target input) {
-        if (requiredTags.isEmpty() && excludedTags.isEmpty()) {
-          return true;
-        }
-
-        if (!(input instanceof Rule)) {
-          return false;
-        }
-        // Note that test_tags are those originating from the XX_test rule,
-        // whereas the requiredTags and excludedTags originate from the command
-        // line or test_suite rule.
-        return TestTargetUtils.testMatchesFilters(((Rule) input).getRuleTags(),
-            requiredTags, excludedTags, false);
+    return input -> {
+      if (requiredTags.isEmpty() && excludedTags.isEmpty()) {
+        return true;
       }
+
+      if (!(input instanceof Rule)) {
+        return false;
+      }
+      // Note that test_tags are those originating from the XX_test rule,
+      // whereas the requiredTags and excludedTags originate from the command
+      // line or test_suite rule.
+      return TestTargetUtils.testMatchesFilters(
+          ((Rule) input).getRuleTags(), requiredTags, excludedTags, false);
     };
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/packages/TestTargetUtils.java b/src/main/java/com/google/devtools/build/lib/packages/TestTargetUtils.java
index 1ab2511..b512850 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/TestTargetUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/TestTargetUtils.java
@@ -43,14 +43,11 @@
    * given size.
    */
   public static Predicate<Target> testSizeFilter(final Set<TestSize> allowedSizes) {
-    return new Predicate<Target>() {
-      @Override
-      public boolean apply(Target target) {
-        if (!(target instanceof Rule)) {
-          return false;
-        }
-        return allowedSizes.contains(TestSize.getTestSize((Rule) target));
+    return target -> {
+      if (!(target instanceof Rule)) {
+        return false;
       }
+      return allowedSizes.contains(TestSize.getTestSize((Rule) target));
     };
   }
 
@@ -59,14 +56,11 @@
    * the given timeout.
    **/
   public static Predicate<Target> testTimeoutFilter(final Set<TestTimeout> allowedTimeouts) {
-    return new Predicate<Target>() {
-      @Override
-        public boolean apply(Target target) {
-        if (!(target instanceof Rule)) {
-          return false;
-        }
-        return allowedTimeouts.contains(TestTimeout.getTestTimeout((Rule) target));
+    return target -> {
+      if (!(target instanceof Rule)) {
+        return false;
       }
+      return allowedTimeouts.contains(TestTimeout.getTestTimeout((Rule) target));
     };
   }
 
@@ -93,13 +87,10 @@
       }
     }
 
-    return new Predicate<Target>() {
-      @Override
-      public boolean apply(Target rule) {
-        String ruleLang = TargetUtils.getRuleLanguage(rule);
-        return (requiredLangs.isEmpty() || requiredLangs.contains(ruleLang))
-            && !excludedLangs.contains(ruleLang);
-      }
+    return rule -> {
+      String ruleLang = TargetUtils.getRuleLanguage(rule);
+      return (requiredLangs.isEmpty() || requiredLangs.contains(ruleLang))
+          && !excludedLangs.contains(ruleLang);
     };
   }