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. */
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java index 7a5d06d..73664f7 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformProviderUtils.java
@@ -14,7 +14,6 @@ package com.google.devtools.build.lib.analysis.platform; -import com.google.common.base.Function; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.analysis.SkylarkProviderCollection; import com.google.devtools.build.lib.util.Preconditions; @@ -35,14 +34,7 @@ /** Retrieves and casts {@link PlatformInfo} providers from the given targets. */ public static Iterable<PlatformInfo> platforms( Iterable<? extends SkylarkProviderCollection> targets) { - return Iterables.transform( - targets, - new Function<SkylarkProviderCollection, PlatformInfo>() { - @Override - public PlatformInfo apply(SkylarkProviderCollection target) { - return platform(target); - } - }); + return Iterables.transform(targets, PlatformProviderUtils::platform); } /** Retrieves and casts the {@link ConstraintSettingInfo} provider from the given target. */ @@ -58,14 +50,7 @@ /** Retrieves and casts {@link ConstraintSettingInfo} providers from the given targets. */ public static Iterable<ConstraintSettingInfo> constraintSettings( Iterable<? extends SkylarkProviderCollection> targets) { - return Iterables.transform( - targets, - new Function<SkylarkProviderCollection, ConstraintSettingInfo>() { - @Override - public ConstraintSettingInfo apply(SkylarkProviderCollection target) { - return constraintSetting(target); - } - }); + return Iterables.transform(targets, PlatformProviderUtils::constraintSetting); } /** Retrieves and casts the {@link ConstraintValueInfo} provider from the given target. */ @@ -81,13 +66,6 @@ /** Retrieves and casts {@link ConstraintValueInfo} providers from the given targets. */ public static Iterable<ConstraintValueInfo> constraintValues( Iterable<? extends SkylarkProviderCollection> targets) { - return Iterables.transform( - targets, - new Function<SkylarkProviderCollection, ConstraintValueInfo>() { - @Override - public ConstraintValueInfo apply(SkylarkProviderCollection target) { - return constraintValue(target); - } - }); + return Iterables.transform(targets, PlatformProviderUtils::constraintValue); } }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java index 80618a7..bb77abc 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
@@ -15,13 +15,11 @@ import static com.google.common.base.StandardSystemProperty.USER_NAME; import static java.nio.charset.StandardCharsets.UTF_8; +import static java.util.stream.Collectors.joining; -import com.google.common.base.Function; -import com.google.common.base.Joiner; import com.google.common.base.Supplier; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Iterables; import com.google.common.eventbus.Subscribe; import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionExecutionException; @@ -59,11 +57,9 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Map; -import java.util.Map.Entry; import java.util.Objects; import java.util.TreeMap; import java.util.UUID; -import javax.annotation.Nullable; /** * Provides information about the workspace (e.g. source control context, current machine, current @@ -164,16 +160,10 @@ private static byte[] printStatusMap(Map<String, String> map) { String s = - Joiner.on("\n") - .join( - Iterables.transform( - map.entrySet(), - new Function<Map.Entry<String, String>, String>() { - @Override - public String apply(@Nullable Entry<String, String> entry) { - return entry.getKey() + " " + entry.getValue(); - } - })); + map.entrySet() + .stream() + .map(entry -> entry.getKey() + " " + entry.getValue()) + .collect(joining("\n")); s += "\n"; return s.getBytes(StandardCharsets.UTF_8); }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/downloader/HttpConnectorMultiplexer.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/downloader/HttpConnectorMultiplexer.java index 374c83e..48960e1 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/downloader/HttpConnectorMultiplexer.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/downloader/HttpConnectorMultiplexer.java
@@ -14,10 +14,10 @@ package com.google.devtools.build.lib.bazel.repository.downloader; -import com.google.common.base.Function; +import static com.google.common.collect.ImmutableSortedSet.toImmutableSortedSet; + import com.google.common.base.Preconditions; import com.google.common.base.Predicates; -import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Ordering; import com.google.devtools.build.lib.analysis.BlazeVersionInfo; @@ -319,19 +319,11 @@ } private static String describeErrors(Collection<Throwable> errors) { - return - FluentIterable - .from(errors) - .transform( - new Function<Throwable, String>() { - @Nullable - @Override - public String apply(Throwable workerError) { - return workerError.getMessage(); - } - }) - .filter(Predicates.notNull()) - .toSortedSet(Ordering.natural()) - .toString(); + return errors + .stream() + .map(Throwable::getMessage) + .filter(Predicates.notNull()) + .collect(toImmutableSortedSet(Ordering.natural())) + .toString(); } }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryRule.java index 14ea5a8d..1c29539 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryRule.java
@@ -30,7 +30,6 @@ import com.google.devtools.build.lib.rules.repository.WorkspaceBaseRule; import com.google.devtools.build.lib.rules.repository.WorkspaceConfiguredTargetFactory; import java.util.Map; -import javax.annotation.Nullable; /** * Definition of the {@code android_ndk_repository} rule. @@ -39,20 +38,15 @@ public static final String NAME = "android_ndk_repository"; private static final Function<? super Rule, Map<String, Label>> BINDINGS_FUNCTION = - new Function< Rule, Map<String, Label>>() { - @Nullable - @Override - public Map<String, Label> apply(Rule rule) { + rule -> { + String defaultToolchainName = + AndroidNdkRepositoryFunction.createToolchainName(StlImpls.DEFAULT_STL_NAME); - String defaultToolchainName = - AndroidNdkRepositoryFunction.createToolchainName(StlImpls.DEFAULT_STL_NAME); - - return ImmutableMap.of( - "android/crosstool", - Label.parseAbsoluteUnchecked("@" + rule.getName() + "//:" + defaultToolchainName), - "android_ndk_for_testing", - Label.parseAbsoluteUnchecked("@" + rule.getName() + "//:files")); - } + return ImmutableMap.of( + "android/crosstool", + Label.parseAbsoluteUnchecked("@" + rule.getName() + "//:" + defaultToolchainName), + "android_ndk_for_testing", + Label.parseAbsoluteUnchecked("@" + rule.getName() + "//:files")); }; @Override
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java index 8b3c32b..0334c44 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
@@ -13,16 +13,15 @@ // limitations under the License. package com.google.devtools.build.lib.bazel.rules.android; +import static com.google.common.collect.ImmutableMap.toImmutableMap; + import com.android.repository.Revision; -import com.google.common.base.Function; -import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Maps.EntryTransformer; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.packages.Rule; @@ -51,7 +50,6 @@ import java.io.IOException; import java.util.Map; import java.util.Properties; -import javax.annotation.Nullable; /** * Implementation of the {@code android_sdk_repository} rule. @@ -228,22 +226,10 @@ // All local maven repositories that are shipped in the Android SDK. // TODO(ajmichael): Create SkyKeys so that if the SDK changes, this function will get rerun. Iterable<Path> localMavenRepositories = - Lists.transform( - LOCAL_MAVEN_REPOSITORIES, - new Function<String, Path>() { - @Override - public Path apply(String pathFragment) { - return outputDirectory.getRelative(pathFragment); - } - }); + Lists.transform(LOCAL_MAVEN_REPOSITORIES, outputDirectory::getRelative); try { SdkMavenRepository sdkExtrasRepository = - SdkMavenRepository.create(Iterables.filter(localMavenRepositories, new Predicate<Path>() { - @Override - public boolean apply(@Nullable Path path) { - return path.isDirectory(); - } - })); + SdkMavenRepository.create(Iterables.filter(localMavenRepositories, Path::isDirectory)); sdkExtrasRepository.writeBuildFiles(outputDirectory); buildFile = buildFile.replace( "%exported_files%", sdkExtrasRepository.getExportsFiles(outputDirectory)); @@ -412,29 +398,15 @@ final Path root, final PathFragment path, DirectoryListingValue directory, Environment env) throws RepositoryFunctionException, InterruptedException { Map<PathFragment, SkyKey> skyKeysForSubdirectoryLookups = - Maps.transformEntries( - Maps.uniqueIndex( - Iterables.filter( - directory.getDirents(), - new Predicate<Dirent>() { - @Override - public boolean apply(Dirent dirent) { - return dirent.getType().equals(Dirent.Type.DIRECTORY); - } - }), - new Function<Dirent, PathFragment>() { - @Override - public PathFragment apply(Dirent input) { - return path.getRelative(input.getName()); - } - }), - new EntryTransformer<PathFragment, Dirent, SkyKey>() { - @Override - public SkyKey transformEntry(PathFragment key, Dirent value) { - return DirectoryListingValue.key( - RootedPath.toRootedPath(root, root.getRelative(key))); - } - }); + Streams.stream(directory.getDirents()) + .filter(dirent -> dirent.getType().equals(Dirent.Type.DIRECTORY)) + .collect( + toImmutableMap( + input -> path.getRelative(input.getName()), + input -> + DirectoryListingValue.key( + RootedPath.toRootedPath( + root, root.getRelative(path).getRelative(input.getName()))))); Map<SkyKey, ValueOrException<InconsistentFilesystemException>> values = env.getValuesOrThrow(
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java index ba0f237..ae27949 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java
@@ -29,7 +29,6 @@ import com.google.devtools.build.lib.rules.repository.WorkspaceBaseRule; import com.google.devtools.build.lib.rules.repository.WorkspaceConfiguredTargetFactory; import java.util.Map; -import javax.annotation.Nullable; /** * Definition of the {@code android_sdk_repository} rule. @@ -38,21 +37,17 @@ public static final String NAME = "android_sdk_repository"; private static final Function<? super Rule, Map<String, Label>> BINDINGS_FUNCTION = - new Function<Rule, Map<String, Label>>() { - @Nullable - @Override - public Map<String, Label> apply(Rule rule) { - String prefix = "@" + rule.getName() + "//:"; - ImmutableMap.Builder<String, Label> builder = ImmutableMap.builder(); - builder.put("android/sdk", Label.parseAbsoluteUnchecked(prefix + "sdk")); - builder.put( - "android/dx_jar_import", Label.parseAbsoluteUnchecked(prefix + "dx_jar_import")); - builder.put("android_sdk_for_testing", Label.parseAbsoluteUnchecked(prefix + "files")); - builder.put( - "has_androidsdk", - Label.parseAbsoluteUnchecked("@bazel_tools//tools/android:always_true")); - return builder.build(); - } + rule -> { + String prefix = "@" + rule.getName() + "//:"; + ImmutableMap.Builder<String, Label> builder = ImmutableMap.builder(); + builder.put("android/sdk", Label.parseAbsoluteUnchecked(prefix + "sdk")); + builder.put( + "android/dx_jar_import", Label.parseAbsoluteUnchecked(prefix + "dx_jar_import")); + builder.put("android_sdk_for_testing", Label.parseAbsoluteUnchecked(prefix + "files")); + builder.put( + "has_androidsdk", + Label.parseAbsoluteUnchecked("@bazel_tools//tools/android:always_true")); + return builder.build(); }; @Override
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepository.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepository.java index 136da18..1efca1e 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepository.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepository.java
@@ -14,7 +14,6 @@ package com.google.devtools.build.lib.bazel.rules.android; import com.google.auto.value.AutoValue; -import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSet; @@ -25,7 +24,6 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; -import javax.annotation.Nullable; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; @@ -124,12 +122,8 @@ static SdkMavenRepository create(Iterable<Path> mavenRepositories) throws IOException { Collection<Path> pomPaths = new ArrayList<>(); for (Path mavenRepository : mavenRepositories) { - pomPaths.addAll(FileSystemUtils.traverseTree(mavenRepository, new Predicate<Path>() { - @Override - public boolean apply(@Nullable Path path) { - return path.toString().endsWith(".pom"); - } - })); + pomPaths.addAll( + FileSystemUtils.traverseTree(mavenRepository, path -> path.toString().endsWith(".pom"))); } ImmutableSortedSet.Builder<Pom> poms =
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java index c59be82..45b62de 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java
@@ -14,7 +14,6 @@ package com.google.devtools.build.lib.bazel.rules.android.ndkcrosstools; -import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; @@ -150,18 +149,14 @@ + "/lib/gcc/%targetPlatform%/%gccVersion%/%includeFolderName%"; return Lists.transform( ImmutableList.of("include", "include-fixed"), - new Function<String, String>() { - @Override - public String apply(String includeFolderName) { - return toolchainIncludePathTemplate + includeFolderName -> + toolchainIncludePathTemplate .replace("%repositoryName%", repositoryName) .replace("%toolchainName%", toolchainName) .replace("%hostPlatform%", hostPlatform) .replace("%targetPlatform%", targetPlatform) .replace("%gccVersion%", gccVersion) - .replace("%includeFolderName%", includeFolderName); - } - }); + .replace("%includeFolderName%", includeFolderName)); } public String createBuiltinSysroot(String targetCpu) {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java index 293091f..43307fb 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
@@ -16,7 +16,6 @@ import static com.google.common.base.Strings.isNullOrEmpty; -import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; @@ -354,15 +353,6 @@ */ private static class ComputedRelativeClasspathsSubstitution extends ComputedSubstitution { private final JavaCommon javaCommon; - private static final Function<Artifact, String> PATHS_FROM_ARTIFACTS = - new Function<Artifact, String>() { - @Nullable - @Override - public String apply(@Nullable Artifact artifact) { - return artifact == null ? null : artifact.getRunfilesPathString(); - } - }; - public ComputedRelativeClasspathsSubstitution(JavaCommon javaCommon) { super(RELATIVE_CLASSPATHS_PLACEHOLDER); this.javaCommon = javaCommon; @@ -372,7 +362,9 @@ public String getValue() { // TODO(kush): Get this to work when runfilesEnabled=false, like in windows. Iterable<String> paths = - Iterables.transform(javaCommon.getRuntimeClasspath(), PATHS_FROM_ARTIFACTS); + Iterables.transform( + javaCommon.getRuntimeClasspath(), + artifact -> artifact == null ? null : artifact.getRunfilesPathString()); return Joiner.on(File.pathSeparatorChar).skipNulls().join(paths); } }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java index 5969c7a..46f5a25 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java
@@ -36,22 +36,10 @@ import com.google.devtools.build.lib.rules.java.JavaConfiguration; import com.google.devtools.build.lib.rules.java.proto.JavaLiteProtoLibrary; import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainProvider; -import javax.annotation.Nullable; /** Declaration of the {@code java_lite_proto_library} rule. */ public class BazelJavaLiteProtoLibraryRule implements RuleDefinition { - private static final Function<Rule, AspectParameters> ASPECT_PARAMETERS = - new Function<Rule, AspectParameters>() { - @Nullable - @Override - public AspectParameters apply(@Nullable Rule rule) { - return new AspectParameters.Builder() - .addAttribute(INJECTING_RULE_KIND_PARAMETER_KEY, "java_lite_proto_library") - .build(); - } - }; - private final BazelJavaLiteProtoAspect javaProtoAspect; public BazelJavaLiteProtoLibraryRule(BazelJavaLiteProtoAspect javaProtoAspect) { @@ -60,6 +48,12 @@ @Override public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment) { + Function<Rule, AspectParameters> aspectParameters = + rule -> + new AspectParameters.Builder() + .addAttribute(INJECTING_RULE_KIND_PARAMETER_KEY, "java_lite_proto_library") + .build(); + return builder .requiresConfigurationFragments(JavaConfiguration.class) /* <!-- #BLAZE_RULE(java_lite_proto_library).ATTRIBUTE(deps) --> @@ -70,7 +64,7 @@ attr("deps", LABEL_LIST) .allowedRuleClasses("proto_library") .allowedFileTypes() - .aspect(javaProtoAspect, ASPECT_PARAMETERS)) + .aspect(javaProtoAspect, aspectParameters)) .add(attr("strict_deps", BOOLEAN).value(true).undocumented("for migration")) .add( attr(PROTO_TOOLCHAIN_ATTR, LABEL)
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoLibraryRule.java index 8c4ed4b..62e70cd 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaProtoLibraryRule.java
@@ -29,22 +29,10 @@ import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaConfiguration; import com.google.devtools.build.lib.rules.java.proto.JavaProtoLibrary; -import javax.annotation.Nullable; /** Declaration of the {@code java_proto_library} rule. */ public class BazelJavaProtoLibraryRule implements RuleDefinition { - private static final Function<Rule, AspectParameters> ASPECT_PARAMETERS = - new Function<Rule, AspectParameters>() { - @Nullable - @Override - public AspectParameters apply(@Nullable Rule rule) { - return new AspectParameters.Builder() - .addAttribute(INJECTING_RULE_KIND_PARAMETER_KEY, "java_proto_library") - .build(); - } - }; - private final BazelJavaProtoAspect javaProtoAspect; public BazelJavaProtoLibraryRule(BazelJavaProtoAspect javaProtoAspect) { @@ -53,6 +41,12 @@ @Override public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment) { + Function<Rule, AspectParameters> aspectParameters = + rule -> + new AspectParameters.Builder() + .addAttribute(INJECTING_RULE_KIND_PARAMETER_KEY, "java_proto_library") + .build(); + return builder .requiresConfigurationFragments(JavaConfiguration.class) /* <!-- #BLAZE_RULE(java_proto_library).ATTRIBUTE(deps) --> @@ -63,7 +57,7 @@ attr("deps", LABEL_LIST) .allowedRuleClasses("proto_library") .allowedFileTypes() - .aspect(javaProtoAspect, ASPECT_PARAMETERS)) + .aspect(javaProtoAspect, aspectParameters)) .add(attr("strict_deps", BOOLEAN).value(true).undocumented("for migration")) .advertiseProvider(JavaCompilationArgsProvider.class) .build();
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java index 467ee8b..0cf67ba 100644 --- a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java +++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceTransport.java
@@ -176,50 +176,47 @@ shutdownFuture = SettableFuture.create(); uploaderExecutorService.execute( - new Runnable() { - @Override - public void run() { - try { - sendOrderedBuildEvent(besProtoUtil.streamFinished()); + () -> { + try { + sendOrderedBuildEvent(besProtoUtil.streamFinished()); - if (errorsReported) { - // If we encountered errors before and have already reported them, then we should - // not report them a second time. - return; - } - - if (bestEffortUpload) { - // TODO(buchgr): The code structure currently doesn't allow to enforce a timeout for - // best effort upload. - if (!uploadComplete.isDone()) { - report(INFO, "Asynchronous Build Event Protocol upload."); - } else { - Throwable uploadError = fromFuture(uploadComplete); - - if (uploadError != null) { - report(WARNING, UPLOAD_FAILED_MESSAGE, uploadError.getMessage()); - } else { - report(INFO, UPLOAD_SUCCEEDED_MESSAGE); - } - } - } else { - report(INFO, "Waiting for Build Event Protocol upload to finish."); - try { - if (Duration.ZERO.equals(uploadTimeout)) { - uploadComplete.get(); - } else { - uploadComplete.get(uploadTimeout.getMillis(), MILLISECONDS); - } - report(INFO, UPLOAD_SUCCEEDED_MESSAGE); - } catch (Exception e) { - uploadComplete.cancel(true); - reportErrorAndFailBuild(e); - } - } - } finally { - shutdownFuture.set(null); - uploaderExecutorService.shutdown(); + if (errorsReported) { + // If we encountered errors before and have already reported them, then we should + // not report them a second time. + return; } + + if (bestEffortUpload) { + // TODO(buchgr): The code structure currently doesn't allow to enforce a timeout for + // best effort upload. + if (!uploadComplete.isDone()) { + report(INFO, "Asynchronous Build Event Protocol upload."); + } else { + Throwable uploadError = fromFuture(uploadComplete); + + if (uploadError != null) { + report(WARNING, UPLOAD_FAILED_MESSAGE, uploadError.getMessage()); + } else { + report(INFO, UPLOAD_SUCCEEDED_MESSAGE); + } + } + } else { + report(INFO, "Waiting for Build Event Protocol upload to finish."); + try { + if (Duration.ZERO.equals(uploadTimeout)) { + uploadComplete.get(); + } else { + uploadComplete.get(uploadTimeout.getMillis(), MILLISECONDS); + } + report(INFO, UPLOAD_SUCCEEDED_MESSAGE); + } catch (Exception e) { + uploadComplete.cancel(true); + reportErrorAndFailBuild(e); + } + } + } finally { + shutdownFuture.set(null); + uploaderExecutorService.shutdown(); } }); @@ -347,53 +344,43 @@ } private void publishBuildEnqueuedEvent() throws Exception { - retryOnException(new Callable<Void>() { - @Override - public Void call() throws Exception { - publishLifecycleEvent(besProtoUtil.buildEnqueued()); - return null; - } - }); + retryOnException( + () -> { + publishLifecycleEvent(besProtoUtil.buildEnqueued()); + return null; + }); } private void publishInvocationStartedEvent() throws Exception { - retryOnException(new Callable<Void>() { - @Override - public Void call() throws Exception { - publishLifecycleEvent(besProtoUtil.invocationStarted()); - return null; - } - }); + retryOnException( + () -> { + publishLifecycleEvent(besProtoUtil.invocationStarted()); + return null; + }); } private void publishEventStream0() throws Exception { - retryOnException(new Callable<Void>() { - @Override - public Void call() throws Exception { - publishEventStream(); - return null; - } - }); + retryOnException( + () -> { + publishEventStream(); + return null; + }); } private void publishInvocationFinishedEvent(final Result result) throws Exception { - retryOnException(new Callable<Void>() { - @Override - public Void call() throws Exception { - publishLifecycleEvent(besProtoUtil.invocationFinished(result)); - return null; - } - }); + retryOnException( + () -> { + publishLifecycleEvent(besProtoUtil.invocationFinished(result)); + return null; + }); } private void publishBuildFinishedEvent(final Result result) throws Exception { - retryOnException(new Callable<Void>() { - @Override - public Void call() throws Exception { - publishLifecycleEvent(besProtoUtil.buildFinished(result)); - return null; - } - }); + retryOnException( + () -> { + publishLifecycleEvent(besProtoUtil.buildFinished(result)); + return null; + }); } } @@ -452,20 +439,17 @@ private static Function<PublishBuildToolEventStreamResponse, Void> ackCallback( final Deque<OrderedBuildEvent> pendingAck, final BuildEventServiceClient besClient) { - return new Function<PublishBuildToolEventStreamResponse, Void>() { - @Override - public Void apply(PublishBuildToolEventStreamResponse ack) { - long pendingSeq = - pendingAck.isEmpty() ? -1 : pendingAck.peekFirst().getSequenceNumber(); - long ackSeq = ack.getSequenceNumber(); - if (pendingSeq != ackSeq) { - besClient.abortStream(Status.INTERNAL - .augmentDescription(format("Expected ack %s but was %s.", pendingSeq, ackSeq))); - } else { - pendingAck.removeFirst(); - } - return null; + return ack -> { + long pendingSeq = pendingAck.isEmpty() ? -1 : pendingAck.peekFirst().getSequenceNumber(); + long ackSeq = ack.getSequenceNumber(); + if (pendingSeq != ackSeq) { + besClient.abortStream( + Status.INTERNAL.augmentDescription( + format("Expected ack %s but was %s.", pendingSeq, ackSeq))); + } else { + pendingAck.removeFirst(); } + return null; }; }
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java b/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java index 3f9ac66..bcea3d8 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
@@ -26,7 +26,6 @@ import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; - import java.io.IOException; import java.util.Map; import java.util.Set; @@ -123,11 +122,7 @@ continue; } PackageIdentifier dir = createInRepo(pkgId, pkgId.getPackageFragment().subFragment(0, i)); - Set<Path> roots = dirRootsMap.get(dir); - if (roots == null) { - roots = Sets.newHashSet(); - dirRootsMap.put(dir, roots); - } + Set<Path> roots = dirRootsMap.computeIfAbsent(dir, k -> Sets.newHashSet()); roots.add(pkgRoot); } }
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java index 3767ed7..b689f6d 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.cmdline; -import com.google.common.base.Function; import com.google.common.collect.ComparisonChain; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Interner; @@ -153,15 +152,6 @@ return parseAbsoluteUnchecked(absName, true); } - /** A long way to say '(String) s -> parseAbsoluteUnchecked(s)'. */ - public static final Function<String, Label> PARSE_ABSOLUTE_UNCHECKED = - new Function<String, Label>() { - @Override - public Label apply(@Nullable String s) { - return s == null ? null : parseAbsoluteUnchecked(s); - } - }; - /** * Factory for Labels from separate components. *
diff --git a/src/main/java/com/google/devtools/build/lib/collect/CollectionUtils.java b/src/main/java/com/google/devtools/build/lib/collect/CollectionUtils.java index 192a411..341e750 100644 --- a/src/main/java/com/google/devtools/build/lib/collect/CollectionUtils.java +++ b/src/main/java/com/google/devtools/build/lib/collect/CollectionUtils.java
@@ -20,7 +20,6 @@ import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.util.Preconditions; - import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; @@ -82,12 +81,7 @@ */ public static <T> Collection<Set<T>> partition(Collection<T> elements, final EquivalenceRelation<T> equivalenceRelation) { - return partition(elements, new Comparator<T>() { - @Override - public int compare(T o1, T o2) { - return equivalenceRelation.compare(o1, o2); - } - }); + return partition(elements, (Comparator<T>) equivalenceRelation::compare); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java index ab24d0a..74e01ee 100644 --- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java +++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java
@@ -13,11 +13,11 @@ // limitations under the License. package com.google.devtools.build.lib.collect.nestedset; +import static java.util.stream.Collectors.joining; + import com.google.common.base.Function; -import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; import com.google.devtools.build.lib.collect.CompactHashSet; import java.util.AbstractCollection; import java.util.Arrays; @@ -26,6 +26,7 @@ import java.util.List; import java.util.Objects; import java.util.Set; +import java.util.stream.Stream; import javax.annotation.Nullable; /** @@ -245,8 +246,9 @@ // TODO: this leaves LINK_ORDER backwards private static String childrenToString(Object children) { if (children instanceof Object[]) { - return "{" + Joiner.on(", ").join(Iterables.transform( - Arrays.asList((Object[]) children), Stringer.INSTANCE)) + "}"; + return "{" + + Stream.of((Object[]) children).map(Stringer.INSTANCE).collect(joining(", ")) + + "}"; } else { return children.toString(); }
diff --git a/src/main/java/com/google/devtools/build/lib/concurrent/AbstractQueueVisitor.java b/src/main/java/com/google/devtools/build/lib/concurrent/AbstractQueueVisitor.java index 7c0809d..3eeb937 100644 --- a/src/main/java/com/google/devtools/build/lib/concurrent/AbstractQueueVisitor.java +++ b/src/main/java/com/google/devtools/build/lib/concurrent/AbstractQueueVisitor.java
@@ -44,19 +44,14 @@ * ThreadPoolExecutor}. */ public static final Function<ExecutorParams, ThreadPoolExecutor> EXECUTOR_FACTORY = - new Function<ExecutorParams, ThreadPoolExecutor>() { - @Override - public ThreadPoolExecutor apply(ExecutorParams p) { - return new ThreadPoolExecutor( + p -> + new ThreadPoolExecutor( /*corePoolSize=*/ p.getParallelism(), /*maximumPoolSize=*/ p.getParallelism(), p.getKeepAliveTime(), p.getUnits(), p.getWorkQueue(), new ThreadFactoryBuilder().setNameFormat(p.getPoolName() + " %d").build()); - } - }; - /** * The most severe unhandled exception thrown by a worker thread, according to * {@link #errorClassifier}. This exception gets propagated to the calling thread of
diff --git a/src/main/java/com/google/devtools/build/lib/concurrent/Sharder.java b/src/main/java/com/google/devtools/build/lib/concurrent/Sharder.java index d43c0ff..008b9c7 100644 --- a/src/main/java/com/google/devtools/build/lib/concurrent/Sharder.java +++ b/src/main/java/com/google/devtools/build/lib/concurrent/Sharder.java
@@ -13,11 +13,9 @@ // limitations under the License. package com.google.devtools.build.lib.concurrent; -import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.devtools.build.lib.util.Preconditions; - import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -61,11 +59,6 @@ @Override public Iterator<List<T>> iterator() { - return Iterables.filter(shards, new Predicate<List<T>>() { - @Override - public boolean apply(List<T> list) { - return !list.isEmpty(); - } - }).iterator(); + return Iterables.filter(shards, list -> !list.isEmpty()).iterator(); } }
diff --git a/src/main/java/com/google/devtools/build/lib/concurrent/ThrowableRecordingRunnableWrapper.java b/src/main/java/com/google/devtools/build/lib/concurrent/ThrowableRecordingRunnableWrapper.java index 870d92b..f66e230 100644 --- a/src/main/java/com/google/devtools/build/lib/concurrent/ThrowableRecordingRunnableWrapper.java +++ b/src/main/java/com/google/devtools/build/lib/concurrent/ThrowableRecordingRunnableWrapper.java
@@ -14,11 +14,9 @@ package com.google.devtools.build.lib.concurrent; import com.google.devtools.build.lib.util.Preconditions; - import java.util.concurrent.atomic.AtomicReference; import java.util.logging.Level; import java.util.logging.Logger; - import javax.annotation.Nullable; /** @@ -43,15 +41,12 @@ } public Runnable wrap(final Runnable runnable) { - return new Runnable() { - @Override - public void run() { - try { - runnable.run(); - } catch (Throwable error) { - errorRef.compareAndSet(null, error); - LOG.log(Level.SEVERE, "Error thrown by runnable in " + name, error); - } + return () -> { + try { + runnable.run(); + } catch (Throwable error) { + errorRef.compareAndSet(null, error); + LOG.log(Level.SEVERE, "Error thrown by runnable in " + name, error); } }; }
diff --git a/src/main/java/com/google/devtools/build/lib/events/EventCollector.java b/src/main/java/com/google/devtools/build/lib/events/EventCollector.java index 0d30943..46bf3ad 100644 --- a/src/main/java/com/google/devtools/build/lib/events/EventCollector.java +++ b/src/main/java/com/google/devtools/build/lib/events/EventCollector.java
@@ -13,10 +13,8 @@ // limitations under the License. package com.google.devtools.build.lib.events; -import com.google.common.base.Predicate; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; - import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -84,12 +82,7 @@ * scenario where there may still be concurrent modifications to the collector. */ public Iterable<Event> filtered(final EventKind eventKind) { - return Iterables.filter(collected, new Predicate<Event>() { - @Override - public boolean apply(Event event) { - return event.getKind() == eventKind; - } - }); + return Iterables.filter(collected, event -> event.getKind() == eventKind); } /**
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 5682baa..9cf947e 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
@@ -14,8 +14,9 @@ package com.google.devtools.build.lib.graph; -import com.google.common.collect.Ordering; +import static java.util.Comparator.comparing; +import com.google.common.collect.Ordering; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -70,12 +71,7 @@ if (edgeOrder == null) { this.edgeOrder = null; } else { - this.edgeOrder = new Comparator<Node<T>>() { - @Override - public int compare(Node<T> o1, Node<T> o2) { - return edgeOrder.compare(o1.getLabel(), o2.getLabel()); - } - }; + this.edgeOrder = comparing(Node::getLabel, edgeOrder::compare); } }
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 c2e7d0d..b6d913f 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
@@ -14,10 +14,12 @@ package com.google.devtools.build.lib.graph; +import static java.util.Comparator.comparing; +import static java.util.Comparator.comparingLong; + 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; @@ -29,7 +31,6 @@ import java.util.Map; import java.util.PriorityQueue; import java.util.Set; - import javax.annotation.Nullable; /** @@ -384,10 +385,7 @@ if (label == null) { throw new NullPointerException(); } - Node<T> n = nodes.get(label); - if (n == null) { - nodes.put(label, n = new Node<T>(label, nextHashCode++)); - } + Node<T> n = nodes.computeIfAbsent(label, k -> new Node<T>(k, nextHashCode++)); return n; } @@ -827,14 +825,10 @@ // number of paths of high-order nodes making the time consumption explode. // For perfect results we should reorder the set each time we add a new edge but this would // be too expensive, so this is a good enough approximation. - final PriorityQueue<Node<T>> reachables = new PriorityQueue<>(toRemove.size(), - new Comparator<Node<T>>() { - @Override - public int compare(Node<T> o1, Node<T> o2) { - return Long.compare((long) o1.numPredecessors() * (long) o1.numSuccessors(), - (long) o2.numPredecessors() * (long) o2.numSuccessors()); - } - }); + final PriorityQueue<Node<T>> reachables = + new PriorityQueue<>( + toRemove.size(), + comparingLong(arg -> (long) arg.numPredecessors() * (long) arg.numSuccessors())); // Construct the reachables queue with the list of successors and predecessors of keep in // toRemove. @@ -1041,12 +1035,7 @@ private static <T> Comparator<Node<T>> makeNodeComparator( final Comparator<? super T> comparator) { - return new Comparator<Node<T>>() { - @Override - public int compare(Node<T> o1, Node<T> o2) { - return comparator.compare(o1.getLabel(), o2.getLabel()); - } - }; + return comparing(Node::getLabel, comparator::compare); } /**
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); }; }
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/CompileOneDependencyTransformer.java b/src/main/java/com/google/devtools/build/lib/pkgcache/CompileOneDependencyTransformer.java index b23b62c..47cbaad 100644 --- a/src/main/java/com/google/devtools/build/lib/pkgcache/CompileOneDependencyTransformer.java +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/CompileOneDependencyTransformer.java
@@ -13,6 +13,8 @@ // limitations under the License. package com.google.devtools.build.lib.pkgcache; +import static java.util.Comparator.comparingInt; + import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.devtools.build.lib.cmdline.Label; @@ -30,7 +32,6 @@ import com.google.devtools.build.lib.packages.Target; import java.util.Collection; import java.util.Collections; -import java.util.Comparator; import java.util.List; import java.util.Set; import java.util.TreeSet; @@ -73,14 +74,7 @@ orderedList.add(rule); } - Collections.sort(orderedList, new Comparator<Rule>() { - @Override - public int compare(Rule o1, Rule o2) { - return Integer.compare( - o1.getLocation().getStartOffset(), - o2.getLocation().getStartOffset()); - } - }); + Collections.sort(orderedList, comparingInt(arg -> arg.getLocation().getStartOffset())); return orderedList; }
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseCompleteEvent.java index 315d243..4cfc4fa 100644 --- a/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseCompleteEvent.java +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseCompleteEvent.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.pkgcache; -import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; @@ -65,7 +64,7 @@ * targets we attempted to load. */ public Iterable<Label> getLabels() { - return Iterables.transform(targets, TO_LABEL); + return Iterables.transform(targets, Target::getLabel); } public long getTimeInMs() { @@ -78,11 +77,4 @@ public PackageManager.PackageManagerStatistics getPkgManagerStats() { return pkgManagerStats; } - - private static final Function<Target, Label> TO_LABEL = new Function<Target, Label>() { - @Override - public Label apply(Target input) { - return input.getLabel(); - } - }; }
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java index 704a316..2a0763b 100644 --- a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java
@@ -14,7 +14,6 @@ package com.google.devtools.build.lib.pkgcache; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; @@ -78,12 +77,7 @@ } public Iterable<Label> getLabels() { - return Iterables.transform(targets, new Function<Target, Label>() { - @Override - public Label apply(Target input) { - return input.getLabel(); - } - }); + return Iterables.transform(targets, Target::getLabel); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/MetricData.java b/src/main/java/com/google/devtools/build/lib/profiler/MetricData.java index db46b0d..419318c 100644 --- a/src/main/java/com/google/devtools/build/lib/profiler/MetricData.java +++ b/src/main/java/com/google/devtools/build/lib/profiler/MetricData.java
@@ -13,12 +13,10 @@ // limitations under the License. package com.google.devtools.build.lib.profiler; -import com.google.common.base.Joiner; -import com.google.common.base.Predicate; -import com.google.common.collect.Collections2; +import static java.util.stream.Collectors.joining; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Range; - import java.text.DecimalFormat; /** @@ -33,14 +31,6 @@ private final double avg; private final double stdDev; private final int max; - private static final Predicate<HistogramElement> NON_EMPTY_HISTOGRAM_ELEMENT = - new Predicate<HistogramElement>() { - @Override - public boolean apply(HistogramElement element) { - return element.count > 0; - } - }; - public MetricData(Object description, ImmutableList<HistogramElement> histogram, int count, double avg, double stdDev, int max) { this.description = description; @@ -81,13 +71,23 @@ return "'" + description + "'. Zero data recorded"; } DecimalFormat fmt = new DecimalFormat("0.###"); - return "'" + description + "'. " - + " Count: " + count - + " Avg: " + fmt.format(avg) - + " StdDev: " + fmt.format(stdDev) - + " Max: " + max + return "'" + + description + + "'. " + + " Count: " + + count + + " Avg: " + + fmt.format(avg) + + " StdDev: " + + fmt.format(stdDev) + + " Max: " + + max + " Histogram:\n " - + Joiner.on("\n ").join(Collections2.filter(histogram, NON_EMPTY_HISTOGRAM_ELEMENT)); + + histogram + .stream() + .filter(element -> element.count > 0) + .map(Object::toString) + .collect(joining("\n ")); } /** An histogram element that contains the range that applies to and the number of elements. */
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/ProfileInfo.java b/src/main/java/com/google/devtools/build/lib/profiler/ProfileInfo.java index 4c1309a..242bdb2 100644 --- a/src/main/java/com/google/devtools/build/lib/profiler/ProfileInfo.java +++ b/src/main/java/com/google/devtools/build/lib/profiler/ProfileInfo.java
@@ -13,11 +13,11 @@ // limitations under the License. package com.google.devtools.build.lib.profiler; +import static com.google.common.collect.ImmutableList.toImmutableList; import static com.google.devtools.build.lib.profiler.ProfilerTask.CRITICAL_PATH; import static com.google.devtools.build.lib.profiler.ProfilerTask.TASK_COUNT; import com.google.common.base.Joiner; -import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; @@ -29,7 +29,6 @@ import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.util.VarInt; import com.google.devtools.build.lib.vfs.Path; - import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.IOException; @@ -49,6 +48,7 @@ import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; +import java.util.stream.Stream; import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; @@ -320,17 +320,10 @@ out.print(" ["); ImmutableList<Task> sortedSubTasks = - TASK_DURATION_ORDERING - .reverse() - .immutableSortedCopy( - Iterables.filter( - Arrays.asList(subtasks), - new Predicate<Task>() { - @Override - public boolean apply(Task task) { - return task.durationNanos >= durationThresholdNanos; - } - })); + Stream.of(subtasks) + .filter(task -> task.durationNanos >= durationThresholdNanos) + .sorted(TASK_DURATION_ORDERING.reverse()) + .collect(toImmutableList()); String sep = ""; for (Task task : sortedSubTasks) { out.print(sep); @@ -953,13 +946,7 @@ */ public Iterable<Task> findTasksByDescription(final Pattern description) { return Iterables.filter( - allTasksById, - new Predicate<Task>() { - @Override - public boolean apply(Task task) { - return description.matcher(task.getDescription()).find(); - } - }); + allTasksById, task -> description.matcher(task.getDescription()).find()); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/chart/Chart.java b/src/main/java/com/google/devtools/build/lib/profiler/chart/Chart.java index 79ec2fc..9fddfd9 100644 --- a/src/main/java/com/google/devtools/build/lib/profiler/chart/Chart.java +++ b/src/main/java/com/google/devtools/build/lib/profiler/chart/Chart.java
@@ -143,11 +143,7 @@ * otherwise */ private ChartRow addSlotIfAbsent(long id) { - ChartRow slot = rows.get(id); - if (slot == null) { - slot = new ChartRow(Long.toString(id), rowIndex++); - rows.put(id, slot); - } + ChartRow slot = rows.computeIfAbsent(id, k -> new ChartRow(Long.toString(k), rowIndex++)); return slot; }
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/statistics/CriticalPathStatistics.java b/src/main/java/com/google/devtools/build/lib/profiler/statistics/CriticalPathStatistics.java index 8631016..ec18dc5 100644 --- a/src/main/java/com/google/devtools/build/lib/profiler/statistics/CriticalPathStatistics.java +++ b/src/main/java/com/google/devtools/build/lib/profiler/statistics/CriticalPathStatistics.java
@@ -13,21 +13,18 @@ // limitations under the License. package com.google.devtools.build.lib.profiler.statistics; -import com.google.common.base.Predicate; import com.google.devtools.build.lib.actions.MiddlemanAction; import com.google.devtools.build.lib.profiler.ProfileInfo; import com.google.devtools.build.lib.profiler.ProfileInfo.CriticalPathEntry; import com.google.devtools.build.lib.profiler.ProfileInfo.Task; import com.google.devtools.build.lib.profiler.ProfilerTask; import com.google.devtools.build.lib.util.Pair; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.EnumSet; import java.util.Iterator; import java.util.List; - import javax.annotation.Nullable; /** @@ -50,12 +47,7 @@ Pair.of( "the VFS calls", ProfilerTask.allSatisfying( - new Predicate<ProfilerTask>() { - @Override - public boolean apply(ProfilerTask task) { - return DEFAULT_FILTER.contains(task) || task.name().startsWith("VFS_"); - } - })), + task -> DEFAULT_FILTER.contains(task) || task.name().startsWith("VFS_"))), typeFilter("the dependency checking", ProfilerTask.ACTION_CHECK), typeFilter("the execution setup", ProfilerTask.ACTION_EXECUTE), typeFilter("local execution", ProfilerTask.SPAWN, ProfilerTask.LOCAL_EXECUTION),
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/statistics/PhaseStatistics.java b/src/main/java/com/google/devtools/build/lib/profiler/statistics/PhaseStatistics.java index b8e303b..290eb72 100644 --- a/src/main/java/com/google/devtools/build/lib/profiler/statistics/PhaseStatistics.java +++ b/src/main/java/com/google/devtools/build/lib/profiler/statistics/PhaseStatistics.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.profiler.statistics; -import com.google.common.base.Predicate; import com.google.common.collect.Iterators; import com.google.devtools.build.lib.profiler.ProfileInfo; import com.google.devtools.build.lib.profiler.ProfileInfo.AggregateAttr; @@ -21,11 +20,9 @@ import com.google.devtools.build.lib.profiler.ProfilePhase; import com.google.devtools.build.lib.profiler.ProfilerTask; import com.google.devtools.build.lib.util.Preconditions; - import java.util.EnumMap; import java.util.Iterator; import java.util.List; - import javax.annotation.Nullable; /** @@ -207,12 +204,7 @@ public Iterator<ProfilerTask> iterator() { return Iterators.filter( taskCounts.keySet().iterator(), - new Predicate<ProfilerTask>() { - @Override - public boolean apply(ProfilerTask taskType) { - return getTotalDurationNanos(taskType) > 0 && wasExecuted(taskType); - } - }); + taskType -> getTotalDurationNanos(taskType) > 0 && wasExecuted(taskType)); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/statistics/PhaseVfsStatistics.java b/src/main/java/com/google/devtools/build/lib/profiler/statistics/PhaseVfsStatistics.java index 58d454f..cdc794c 100644 --- a/src/main/java/com/google/devtools/build/lib/profiler/statistics/PhaseVfsStatistics.java +++ b/src/main/java/com/google/devtools/build/lib/profiler/statistics/PhaseVfsStatistics.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.profiler.statistics; -import com.google.common.base.Supplier; import com.google.common.collect.ComparisonChain; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Table; @@ -23,7 +22,6 @@ import com.google.devtools.build.lib.profiler.ProfileInfo.Task; import com.google.devtools.build.lib.profiler.ProfilePhase; import com.google.devtools.build.lib.profiler.ProfilerTask; - import java.util.Arrays; import java.util.EnumMap; import java.util.HashMap; @@ -108,13 +106,7 @@ this.phase = phase; this.statistics = Tables.newCustomTable( - new EnumMap<ProfilerTask, Map<String, Stat>>(ProfilerTask.class), - new Supplier<Map<String, Stat>>() { - @Override - public Map<String, Stat> get() { - return new HashMap<>(); - } - }); + new EnumMap<ProfilerTask, Map<String, Stat>>(ProfilerTask.class), HashMap::new); } public PhaseVfsStatistics(final String workSpaceName, ProfilePhase phase, ProfileInfo info) {
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/statistics/SkylarkStatistics.java b/src/main/java/com/google/devtools/build/lib/profiler/statistics/SkylarkStatistics.java index 50a4e32..3254466 100644 --- a/src/main/java/com/google/devtools/build/lib/profiler/statistics/SkylarkStatistics.java +++ b/src/main/java/com/google/devtools/build/lib/profiler/statistics/SkylarkStatistics.java
@@ -14,12 +14,10 @@ package com.google.devtools.build.lib.profiler.statistics; import com.google.common.collect.Maps; -import com.google.common.collect.Maps.EntryTransformer; import com.google.common.collect.Multimap; import com.google.devtools.build.lib.profiler.ProfileInfo; import com.google.devtools.build.lib.profiler.ProfileInfo.Task; import com.google.devtools.build.lib.util.LongArrayList; - import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -251,13 +249,6 @@ */ private static Map<String, TasksStatistics> buildTasksStatistics( final Map<String, LongArrayList> durationsMap) { - return Maps.transformEntries( - durationsMap, - new EntryTransformer<String, LongArrayList, TasksStatistics>() { - @Override - public TasksStatistics transformEntry(String function, LongArrayList durations) { - return TasksStatistics.create(function, durations); - } - }); + return Maps.transformEntries(durationsMap, TasksStatistics::create); } }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java index 7fa0051..601ae5c 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
@@ -13,11 +13,10 @@ // limitations under the License. package com.google.devtools.build.lib.query2; -import com.google.common.base.Function; +import static com.google.common.collect.ImmutableSet.toImmutableSet; + import com.google.common.base.Predicate; -import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; @@ -68,13 +67,6 @@ * The environment of a Blaze query. Not thread-safe. */ public class BlazeQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> { - private static final Function<Target, Label> TO_LABEL = new Function<Target, Label>() { - @Override - public Label apply(Target input) { - return input.getLabel(); - } - }; - private static final int MAX_DEPTH_FULL_SCAN_LIMIT = 20; private final Map<String, Set<Target>> resolvedTargetPatterns = new HashMap<>(); private final TargetPatternEvaluator targetPatternEvaluator; @@ -323,7 +315,7 @@ if (maxDepth >= MAX_DEPTH_FULL_SCAN_LIMIT && transitivePackageLoader != null) { // Only do the full visitation if "maxDepth" is large enough. Otherwise, the benefits of // preloading will be outweighed by the cost of doing more work than necessary. - Set<Label> labels = ImmutableSet.copyOf(Collections2.transform(targets, TO_LABEL)); + Set<Label> labels = targets.stream().map(Target::getLabel).collect(toImmutableSet()); transitivePackageLoader.sync(eventHandler, labels, keepGoing, loadingPhaseThreads); } } @@ -421,15 +413,6 @@ } return dependentFiles; } - - private static final Function<ResolvedTargets<Target>, Set<Target>> RESOLVED_TARGETS_TO_TARGETS = - new Function<ResolvedTargets<Target>, Set<Target>>() { - @Override - public Set<Target> apply(ResolvedTargets<Target> resolvedTargets) { - return resolvedTargets.getTargets(); - } - }; - @Override protected void preloadOrThrow(QueryExpression caller, Collection<String> patterns) throws TargetParsingException, InterruptedException { @@ -439,7 +422,7 @@ resolvedTargetPatterns.putAll( Maps.transformValues( targetPatternEvaluator.preloadTargetPatterns(eventHandler, patterns, keepGoing), - RESOLVED_TARGETS_TO_TARGETS)); + ResolvedTargets::getTargets)); } }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java b/src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java index d3b2c14..86bf39f 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java +++ b/src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java
@@ -317,18 +317,15 @@ private Runnable newVisitRunnable(final Target from, final Attribute attr, final Label label, final int depth, final int count) { - return new Runnable() { - @Override - public void run() { + return () -> { + try { try { - try { - visit(from, attr, targetProvider.getTarget(eventHandler, label), depth + 1, count); - } catch (NoSuchThingException e) { - observeError(from, label, e); - } - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); + visit(from, attr, targetProvider.getTarget(eventHandler, label), depth + 1, count); + } catch (NoSuchThingException e) { + observeError(from, label, e); } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); } }; }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java b/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java index 28cdede..87f8e7d 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java +++ b/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java
@@ -13,17 +13,17 @@ // limitations under the License. package com.google.devtools.build.lib.query2; +import static com.google.common.collect.ImmutableSet.toImmutableSet; + import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.collect.CompactHashSet; @@ -134,10 +134,9 @@ Iterable<SkyKey> keysToUseForResult, Callback<Target> callback) throws QueryException, InterruptedException { Set<PackageIdentifier> pkgIdsNeededForResult = - ImmutableSet.copyOf( - Iterables.transform( - keysToUseForResult, - SkyQueryEnvironment.PACKAGE_SKYKEY_TO_PACKAGE_IDENTIFIER)); + Streams.stream(keysToUseForResult) + .map(SkyQueryEnvironment.PACKAGE_SKYKEY_TO_PACKAGE_IDENTIFIER) + .collect(toImmutableSet()); packageSemaphore.acquireAll(pkgIdsNeededForResult); try { callback.process(SkyQueryEnvironment.getBuildFilesForPackageValues( @@ -222,9 +221,7 @@ continue; } - if (!reverseDepsMap.containsKey(reverseDepPair.first)) { - reverseDepsMap.put(reverseDepPair.first, new LinkedList<SkyKey>()); - } + reverseDepsMap.computeIfAbsent(reverseDepPair.first, k -> new LinkedList<SkyKey>()); reverseDepsMap.get(reverseDepPair.first).add(reverseDepPair.second); } @@ -232,10 +229,11 @@ Multimap<SkyKey, SkyKey> packageKeyToTargetKeyMap = env.makePackageKeyToTargetKeyMap(Iterables.concat(reverseDepsMap.values())); Set<PackageIdentifier> pkgIdsNeededForTargetification = - ImmutableSet.copyOf( - Iterables.transform( - packageKeyToTargetKeyMap.keySet(), - SkyQueryEnvironment.PACKAGE_SKYKEY_TO_PACKAGE_IDENTIFIER)); + packageKeyToTargetKeyMap + .keySet() + .stream() + .map(SkyQueryEnvironment.PACKAGE_SKYKEY_TO_PACKAGE_IDENTIFIER) + .collect(toImmutableSet()); packageSemaphore.acquireAll(pkgIdsNeededForTargetification); try { @@ -245,8 +243,10 @@ Collection<Target> filteredTargets = env.filterRawReverseDepsOfTransitiveTraversalKeys( reverseDepsMap, packageKeyToTargetKeyMap); - filteredKeys.addAll( - Collections2.transform(filteredTargets, SkyQueryEnvironment.TARGET_TO_SKY_KEY)); + filteredTargets + .stream() + .map(SkyQueryEnvironment.TARGET_TO_SKY_KEY) + .forEachOrdered(filteredKeys::add); } } finally { packageSemaphore.releaseAll(pkgIdsNeededForTargetification); @@ -276,10 +276,11 @@ Multimap<SkyKey, SkyKey> packageKeyToTargetKeyMap = env.makePackageKeyToTargetKeyMap(keysToUseForResult); Set<PackageIdentifier> pkgIdsNeededForResult = - ImmutableSet.copyOf( - Iterables.transform( - packageKeyToTargetKeyMap.keySet(), - SkyQueryEnvironment.PACKAGE_SKYKEY_TO_PACKAGE_IDENTIFIER)); + packageKeyToTargetKeyMap + .keySet() + .stream() + .map(SkyQueryEnvironment.PACKAGE_SKYKEY_TO_PACKAGE_IDENTIFIER) + .collect(toImmutableSet()); packageSemaphore.acquireAll(pkgIdsNeededForResult); try { callback.process( @@ -291,16 +292,7 @@ @Override protected Iterable<Pair<SkyKey, SkyKey>> preprocessInitialVisit(Iterable<SkyKey> keys) { - return Iterables.transform( - keys, - new Function<SkyKey, Pair<SkyKey, SkyKey>>() { - @Override - public Pair<SkyKey, SkyKey> apply(SkyKey key) { - // Set parent of first-level nodes to null. They are handled specially in - // AllRdepsUnboundedVisitor#getVisitResult and will not be filtered later. - return Pair.of(null, key); - } - }); + return Iterables.transform(keys, key -> Pair.of(null, key)); } @Override
diff --git a/src/main/java/com/google/devtools/build/lib/query2/ParallelVisitor.java b/src/main/java/com/google/devtools/build/lib/query2/ParallelVisitor.java index e98a6af..820bdfc 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/ParallelVisitor.java +++ b/src/main/java/com/google/devtools/build/lib/query2/ParallelVisitor.java
@@ -15,6 +15,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.common.collect.Streams; import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.devtools.build.lib.concurrent.AbstractQueueVisitor; import com.google.devtools.build.lib.concurrent.BlockingStack; @@ -140,7 +141,7 @@ void visitAndWaitForCompletion(Iterable<SkyKey> keys) throws QueryException, InterruptedException { - processingQueue.addAll(ImmutableList.copyOf(preprocessInitialVisit(keys))); + Streams.stream(preprocessInitialVisit(keys)).forEachOrdered(processingQueue::add); executor.visitAndWaitForCompletion(); } @@ -205,7 +206,7 @@ executor.execute(new GetAndProcessResultsTask(keysToUseForResultBatch)); } - processingQueue.addAll(ImmutableList.copyOf(visit.keysToVisit)); + Streams.stream(visit.keysToVisit).forEachOrdered(processingQueue::add); } }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesFunction.java b/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesFunction.java index 23a9560..dc3a338 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesFunction.java +++ b/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesFunction.java
@@ -13,8 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.query2; -import com.google.common.base.Function; -import com.google.common.collect.Collections2; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.query2.engine.Callback; @@ -28,6 +26,7 @@ import com.google.devtools.build.lib.query2.engine.VariableContext; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.List; +import java.util.stream.Collectors; /** * An "rbuildfiles" query expression, which computes the set of packages (as represented by their @@ -57,14 +56,6 @@ return Iterables.cycle(ArgumentType.WORD); } - private static final Function<Argument, PathFragment> ARGUMENT_TO_PATH_FRAGMENT = - new Function<Argument, PathFragment>() { - @Override - public PathFragment apply(Argument argument) { - return PathFragment.create(argument.getWord()); - } - }; - @Override @SuppressWarnings("unchecked") // Cast from <Target> to <T>. This will only be used with <Target>. public <T> QueryTaskFuture<Void> eval( @@ -79,7 +70,9 @@ } SkyQueryEnvironment skyEnv = ((SkyQueryEnvironment) env); return skyEnv.getRBuildFilesParallel( - Collections2.transform(args, ARGUMENT_TO_PATH_FRAGMENT), + args.stream() + .map(argument -> PathFragment.create(argument.getWord())) + .collect(Collectors.toList()), (Callback<Target>) callback); } }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java index 6bf3cea..db78d71 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -126,7 +126,6 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; -import javax.annotation.Nullable; /** * {@link AbstractBlazeQueryEnvironment} that introspects the Skyframe graph to find forward and @@ -610,12 +609,8 @@ final Callback<Target> callback) { // TODO(bazel-team): As in here, use concurrency for the async #eval of other QueryEnvironment // implementations. - Callable<QueryTaskFutureImpl<Void>> task = new Callable<QueryTaskFutureImpl<Void>>() { - @Override - public QueryTaskFutureImpl<Void> call() { - return (QueryTaskFutureImpl<Void>) expr.eval(SkyQueryEnvironment.this, context, callback); - } - }; + Callable<QueryTaskFutureImpl<Void>> task = + () -> (QueryTaskFutureImpl<Void>) expr.eval(SkyQueryEnvironment.this, context, callback); ListenableFuture<QueryTaskFutureImpl<Void>> futureFuture = safeSubmit(task); return QueryTaskFutureImpl.ofDelegate(Futures.dereference(futureFuture)); } @@ -632,12 +627,7 @@ return QueryTaskFutureImpl.ofDelegate( Futures.transformAsync( (QueryTaskFutureImpl<T1>) future, - new AsyncFunction<T1, T2>() { - @Override - public ListenableFuture<T2> apply(T1 input) { - return (QueryTaskFutureImpl<T2>) function.apply(input); - } - }, + input -> (QueryTaskFutureImpl<T2>) function.apply(input), executor)); } @@ -721,13 +711,10 @@ ImmutableSet<PathFragment> subdirectoriesToExclude = patternToEvalAndSubdirectoriesToExclude.getSecond(); AsyncFunction<TargetParsingException, Void> reportBuildFileErrorAsyncFunction = - new AsyncFunction<TargetParsingException, Void>() { - @Override - public ListenableFuture<Void> apply(TargetParsingException exn) throws QueryException { - reportBuildFileError(owner, exn.getMessage()); - return Futures.immediateFuture(null); - } - }; + exn -> { + reportBuildFileError(owner, exn.getMessage()); + return Futures.immediateFuture(null); + }; ListenableFuture<Void> evalFuture = patternToEval.evalAsync( resolver, subdirectoriesToExclude, @@ -910,26 +897,17 @@ } static final Function<SkyKey, Label> SKYKEY_TO_LABEL = - new Function<SkyKey, Label>() { - @Nullable - @Override - public Label apply(SkyKey skyKey) { - SkyFunctionName functionName = skyKey.functionName(); - if (!functionName.equals(Label.TRANSITIVE_TRAVERSAL)) { - // Skip non-targets. - return null; - } - return (Label) skyKey.argument(); + skyKey -> { + SkyFunctionName functionName = skyKey.functionName(); + if (!functionName.equals(Label.TRANSITIVE_TRAVERSAL)) { + // Skip non-targets. + return null; } + return (Label) skyKey.argument(); }; static final Function<SkyKey, PackageIdentifier> PACKAGE_SKYKEY_TO_PACKAGE_IDENTIFIER = - new Function<SkyKey, PackageIdentifier>() { - @Override - public PackageIdentifier apply(SkyKey skyKey) { - return (PackageIdentifier) skyKey.argument(); - } - }; + skyKey -> (PackageIdentifier) skyKey.argument(); @ThreadSafe Multimap<SkyKey, SkyKey> makePackageKeyToTargetKeyMap(Iterable<SkyKey> keys) { @@ -975,12 +953,7 @@ } static final Function<Target, SkyKey> TARGET_TO_SKY_KEY = - new Function<Target, SkyKey>() { - @Override - public SkyKey apply(Target target) { - return TransitiveTraversalValue.key(target.getLabel()); - } - }; + target -> TransitiveTraversalValue.key(target.getLabel()); /** A strict (i.e. non-lazy) variant of {@link #makeTransitiveTraversalKeys}. */ public static Iterable<SkyKey> makeTransitiveTraversalKeysStrict(Iterable<Target> targets) { @@ -1080,49 +1053,26 @@ } return result; } - - private static final Function<SkyValue, Package> EXTRACT_PACKAGE = - new Function<SkyValue, Package>() { - @Override - public Package apply(SkyValue skyValue) { - return ((PackageValue) skyValue).getPackage(); - } - }; - - private static final Predicate<Package> ERROR_FREE_PACKAGE = - new Predicate<Package>() { - @Override - public boolean apply(Package pkg) { - return !pkg.containsErrors(); - } - }; - - private static final Function<Package, Target> GET_BUILD_FILE = - new Function<Package, Target>() { - @Override - public Target apply(Package pkg) { - return pkg.getBuildFile(); - } - }; - static Iterable<Target> getBuildFilesForPackageValues(Iterable<SkyValue> packageValues) { + // TODO(laurentlb): Use streams? return Iterables.transform( - Iterables.filter(Iterables.transform(packageValues, EXTRACT_PACKAGE), ERROR_FREE_PACKAGE), - GET_BUILD_FILE); + Iterables.filter( + Iterables.transform(packageValues, skyValue -> ((PackageValue) skyValue).getPackage()), + pkg -> !pkg.containsErrors()), + Package::getBuildFile); } @ThreadSafe QueryTaskFuture<Void> getRBuildFilesParallel( final Collection<PathFragment> fileIdentifiers, final Callback<Target> callback) { - return QueryTaskFutureImpl.ofDelegate(safeSubmit(new Callable<Void>() { - @Override - public Void call() throws QueryException, InterruptedException { - ParallelSkyQueryUtils.getRBuildFilesParallel( - SkyQueryEnvironment.this, fileIdentifiers, callback, packageSemaphore); - return null; - } - })); + return QueryTaskFutureImpl.ofDelegate( + safeSubmit( + () -> { + ParallelSkyQueryUtils.getRBuildFilesParallel( + SkyQueryEnvironment.this, fileIdentifiers, callback, packageSemaphore); + return null; + })); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/AbstractQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/engine/AbstractQueryEnvironment.java index c9e9a0a..818813c 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/engine/AbstractQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/engine/AbstractQueryEnvironment.java
@@ -19,7 +19,6 @@ import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; -import com.google.common.util.concurrent.AsyncFunction; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.util.concurrent.CancellationException; @@ -186,24 +185,12 @@ return QueryTaskFutureImpl.ofDelegate( Futures.transformAsync( (QueryTaskFutureImpl<T1>) future, - new AsyncFunction<T1, T2>() { - @Override - public ListenableFuture<T2> apply(T1 input) throws Exception { - return (QueryTaskFutureImpl<T2>) function.apply(input); - } - }, + input -> (QueryTaskFutureImpl<T2>) function.apply(input), directExecutor())); } protected static Iterable<QueryTaskFutureImpl<?>> cast( Iterable<? extends QueryTaskFuture<?>> futures) { - return Iterables.transform( - futures, - new Function<QueryTaskFuture<?>, QueryTaskFutureImpl<?>>() { - @Override - public QueryTaskFutureImpl<?> apply(QueryTaskFuture<?> future) { - return (QueryTaskFutureImpl<?>) future; - } - }); + return Iterables.transform(futures, future -> (QueryTaskFutureImpl<?>) future); } }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/BinaryOperatorExpression.java b/src/main/java/com/google/devtools/build/lib/query2/engine/BinaryOperatorExpression.java index cd042ea..31fa785 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/engine/BinaryOperatorExpression.java +++ b/src/main/java/com/google/devtools/build/lib/query2/engine/BinaryOperatorExpression.java
@@ -103,31 +103,29 @@ QueryTaskFuture<ThreadSafeMutableSet<T>> lhsValueFuture = QueryUtil.evalAll(env, context, operands.get(0)); Function<ThreadSafeMutableSet<T>, QueryTaskFuture<Void>> subtractAsyncFunction = - new Function<ThreadSafeMutableSet<T>, QueryTaskFuture<Void>>() { - @Override - public QueryTaskFuture<Void> apply(ThreadSafeMutableSet<T> lhsValue) { - final Set<T> threadSafeLhsValue = lhsValue; - Callback<T> subtractionCallback = new Callback<T>() { - @Override - public void process(Iterable<T> partialResult) { - for (T target : partialResult) { - threadSafeLhsValue.remove(target); - } - } + lhsValue -> { + final Set<T> threadSafeLhsValue = lhsValue; + Callback<T> subtractionCallback = + new Callback<T>() { + @Override + public void process(Iterable<T> partialResult) { + for (T target : partialResult) { + threadSafeLhsValue.remove(target); + } + } + }; + QueryTaskFuture<Void> rhsEvaluatedFuture = + evalPlus(operands.subList(1, operands.size()), env, context, subtractionCallback); + return env.whenSucceedsCall( + rhsEvaluatedFuture, + new QueryTaskCallable<Void>() { + @Override + public Void call() throws QueryException, InterruptedException { + callback.process(threadSafeLhsValue); + return null; + } + }); }; - QueryTaskFuture<Void> rhsEvaluatedFuture = evalPlus( - operands.subList(1, operands.size()), env, context, subtractionCallback); - return env.whenSucceedsCall( - rhsEvaluatedFuture, - new QueryTaskCallable<Void>() { - @Override - public Void call() throws QueryException, InterruptedException { - callback.process(threadSafeLhsValue); - return null; - } - }); - } - }; return env.transformAsync(lhsValueFuture, subtractAsyncFunction); } @@ -148,24 +146,20 @@ final int index = i; Function<ThreadSafeMutableSet<T>, QueryTaskFuture<ThreadSafeMutableSet<T>>> evalOperandAndIntersectAsyncFunction = - new Function<ThreadSafeMutableSet<T>, QueryTaskFuture<ThreadSafeMutableSet<T>>>() { - @Override - public QueryTaskFuture<ThreadSafeMutableSet<T>> apply( - final ThreadSafeMutableSet<T> rollingResult) { - final QueryTaskFuture<ThreadSafeMutableSet<T>> rhsOperandValueFuture = - QueryUtil.evalAll(env, context, operands.get(index)); - return env.whenSucceedsCall( - rhsOperandValueFuture, - new QueryTaskCallable<ThreadSafeMutableSet<T>>() { - @Override - public ThreadSafeMutableSet<T> call() - throws QueryException, InterruptedException { - rollingResult.retainAll(rhsOperandValueFuture.getIfSuccessful()); - return rollingResult; - } - }); - } - }; + rollingResult -> { + final QueryTaskFuture<ThreadSafeMutableSet<T>> rhsOperandValueFuture = + QueryUtil.evalAll(env, context, operands.get(index)); + return env.whenSucceedsCall( + rhsOperandValueFuture, + new QueryTaskCallable<ThreadSafeMutableSet<T>>() { + @Override + public ThreadSafeMutableSet<T> call() + throws QueryException, InterruptedException { + rollingResult.retainAll(rhsOperandValueFuture.getIfSuccessful()); + return rollingResult; + } + }); + }; rollingResultFuture = env.transformAsync(rollingResultFuture, evalOperandAndIntersectAsyncFunction); }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/FunctionExpression.java b/src/main/java/com/google/devtools/build/lib/query2/engine/FunctionExpression.java index 85cfe9f..a8c21d6 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/engine/FunctionExpression.java +++ b/src/main/java/com/google/devtools/build/lib/query2/engine/FunctionExpression.java
@@ -13,10 +13,10 @@ // limitations under the License. package com.google.devtools.build.lib.query2.engine; +import static java.util.stream.Collectors.joining; + import com.google.common.base.Functions; -import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Argument; import com.google.devtools.build.lib.query2.engine.QueryEnvironment.ArgumentType; import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction; @@ -66,7 +66,9 @@ @Override public String toString() { - return function.getName() + - "(" + Joiner.on(", ").join(Iterables.transform(args, Functions.toStringFunction())) + ")"; + return function.getName() + + "(" + + args.stream().map(Functions.toStringFunction()).collect(joining(", ")) + + ")"; } }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/LetExpression.java b/src/main/java/com/google/devtools/build/lib/query2/engine/LetExpression.java index 05021e6..fd10135 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/engine/LetExpression.java +++ b/src/main/java/com/google/devtools/build/lib/query2/engine/LetExpression.java
@@ -77,13 +77,10 @@ QueryTaskFuture<ThreadSafeMutableSet<T>> varValueFuture = QueryUtil.evalAll(env, context, varExpr); Function<ThreadSafeMutableSet<T>, QueryTaskFuture<Void>> evalBodyAsyncFunction = - new Function<ThreadSafeMutableSet<T>, QueryTaskFuture<Void>>() { - @Override - public QueryTaskFuture<Void> apply(ThreadSafeMutableSet<T> varValue) { - VariableContext<T> bodyContext = VariableContext.with(context, varName, varValue); - return env.eval(bodyExpr, bodyContext, callback); - } - }; + varValue -> { + VariableContext<T> bodyContext = VariableContext.with(context, varName, varValue); + return env.eval(bodyExpr, bodyContext, callback); + }; return env.transformAsync(varValueFuture, evalBodyAsyncFunction); }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/RdepsFunction.java b/src/main/java/com/google/devtools/build/lib/query2/engine/RdepsFunction.java index 81c0cfc..ebd4d7d 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/engine/RdepsFunction.java +++ b/src/main/java/com/google/devtools/build/lib/query2/engine/RdepsFunction.java
@@ -65,21 +65,18 @@ QueryTaskFuture<ThreadSafeMutableSet<T>> universeValueFuture = QueryUtil.evalAll(env, context, args.get(0).getExpression()); Function<ThreadSafeMutableSet<T>, QueryTaskFuture<Void>> evalInUniverseAsyncFunction = - new Function<ThreadSafeMutableSet<T>, QueryTaskFuture<Void>>() { - @Override - public QueryTaskFuture<Void> apply(ThreadSafeMutableSet<T> universeValue) { - Predicate<T> universe; - try { - env.buildTransitiveClosure(expression, universeValue, Integer.MAX_VALUE); - universe = Predicates.in(env.getTransitiveClosure(universeValue)); - } catch (InterruptedException e) { - return env.immediateCancelledFuture(); - } catch (QueryException e) { - return env.immediateFailedFuture(e); - } - return RdepsFunction.this.eval( - env, context, args.subList(1, args.size()), callback, Optional.of(universe)); + universeValue -> { + Predicate<T> universe; + try { + env.buildTransitiveClosure(expression, universeValue, Integer.MAX_VALUE); + universe = Predicates.in(env.getTransitiveClosure(universeValue)); + } catch (InterruptedException e) { + return env.immediateCancelledFuture(); + } catch (QueryException e) { + return env.immediateFailedFuture(e); } + return RdepsFunction.this.eval( + env, context, args.subList(1, args.size()), callback, Optional.of(universe)); }; return env.transformAsync(universeValueFuture, evalInUniverseAsyncFunction); }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/RegexFilterExpression.java b/src/main/java/com/google/devtools/build/lib/query2/engine/RegexFilterExpression.java index 6b182ee..136e0a6 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/engine/RegexFilterExpression.java +++ b/src/main/java/com/google/devtools/build/lib/query2/engine/RegexFilterExpression.java
@@ -54,17 +54,15 @@ // Note that Patttern#matcher is thread-safe and so this Predicate can safely be used // concurrently. - final Predicate<T> matchFilter = new Predicate<T>() { - @Override - public boolean apply(T target) { - for (String str : getFilterStrings(env, args, target)) { - if ((str != null) && compiledPattern.matcher(str).find()) { - return true; + final Predicate<T> matchFilter = + target -> { + for (String str : getFilterStrings(env, args, target)) { + if ((str != null) && compiledPattern.matcher(str).find()) { + return true; + } } - } - return false; - } - }; + return false; + }; return env.eval( Iterables.getLast(args).getExpression(),
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/VisibleFunction.java b/src/main/java/com/google/devtools/build/lib/query2/engine/VisibleFunction.java index 7a364b8..0720133 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/engine/VisibleFunction.java +++ b/src/main/java/com/google/devtools/build/lib/query2/engine/VisibleFunction.java
@@ -63,22 +63,17 @@ final QueryTaskFuture<ThreadSafeMutableSet<T>> toSetFuture = QueryUtil.evalAll(env, context, args.get(0).getExpression()); Function<ThreadSafeMutableSet<T>, QueryTaskFuture<Void>> computeVisibleNodesAsyncFunction = - new Function<ThreadSafeMutableSet<T>, QueryTaskFuture<Void>>() { - @Override - public QueryTaskFuture<Void> apply(final ThreadSafeMutableSet<T> toSet) { - return env.eval(args.get(1).getExpression(), context, new Callback<T>() { - @Override - public void process(Iterable<T> partialResult) - throws QueryException, InterruptedException { - for (T t : partialResult) { - if (visibleToAll(env, toSet, t)) { - callback.process(ImmutableList.of(t)); + toSet -> + env.eval( + args.get(1).getExpression(), + context, + partialResult -> { + for (T t : partialResult) { + if (visibleToAll(env, toSet, t)) { + callback.process(ImmutableList.of(t)); + } } - } - } - }); - } - }; + }); return env.transformAsync(toSetFuture, computeVisibleNodesAsyncFunction); }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java index 4b732e1..75f0b80 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java +++ b/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java
@@ -13,13 +13,16 @@ // limitations under the License. package com.google.devtools.build.lib.query2.output; +import static java.util.Comparator.comparingInt; +import static java.util.stream.Collectors.joining; + import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; -import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.CompactHashSet; import com.google.devtools.build.lib.events.Location; @@ -99,13 +102,7 @@ DEFAULT // Rule class default } - public static final Function<Node<Target>, Target> EXTRACT_NODE_LABEL = - new Function<Node<Target>, Target>() { - @Override - public Target apply(Node<Target> input) { - return input.getLabel(); - } - }; + public static final Function<Node<Target>, Target> EXTRACT_NODE_LABEL = Node::getLabel; /** * Converter from strings to OutputFormatter.OutputType. @@ -129,13 +126,7 @@ } public static String formatterNames(Iterable<OutputFormatter> formatters) { - return Joiner.on(", ").join(Iterables.transform(formatters, - new Function<OutputFormatter, String>() { - @Override - public String apply(OutputFormatter input) { - return input.getName(); - } - })); + return Streams.stream(formatters).map(OutputFormatter::getName).collect(joining(", ")); } /** @@ -730,14 +721,7 @@ // Use the natural order for RankAndLabels, which breaks ties alphabetically. Collections.sort(output); } else { - Collections.sort( - output, - new Comparator<RankAndLabel>() { - @Override - public int compare(RankAndLabel o1, RankAndLabel o2) { - return o1.rank - o2.rank; - } - }); + Collections.sort(output, comparingInt(arg -> arg.rank)); } final String lineTerm = options.getLineTerminator(); PrintStream printStream = new PrintStream(out);
diff --git a/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java b/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java index dba3a14c..18d61ed 100644 --- a/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java +++ b/src/main/java/com/google/devtools/build/lib/remote/TreeNodeRepository.java
@@ -14,7 +14,6 @@ package com.google.devtools.build.lib.remote; -import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableList; @@ -202,14 +201,7 @@ @Override public Iterable<TreeNode> children(TreeNode node) { - return Iterables.transform( - node.getChildEntries(), - new Function<TreeNode.ChildEntry, TreeNode>() { - @Override - public TreeNode apply(TreeNode.ChildEntry entry) { - return entry.getChild(); - } - }); + return Iterables.transform(node.getChildEntries(), TreeNode.ChildEntry::getChild); } /** Traverse the directory structure in order (pre-order tree traversal). */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAaptActionHelper.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAaptActionHelper.java index e9f149c..b94f2de 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAaptActionHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAaptActionHelper.java
@@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.android; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; @@ -66,13 +65,10 @@ if (inputs.isEmpty()) { inputs.add(AndroidSdkProvider.fromRuleContext(ruleContext).getAndroidJar()); inputs.add(manifest); - Iterables.addAll(inputs, Iterables.concat(Iterables.transform(resourceContainers, - new Function<ResourceContainer, Iterable<Artifact>>() { - @Override - public Iterable<Artifact> apply(ResourceContainer container) { - return container.getArtifacts(); - } - }))); + Iterables.addAll( + inputs, + Iterables.concat( + Iterables.transform(resourceContainers, ResourceContainer::getArtifacts))); } return inputs; }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index 28d635d..438748c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -16,7 +16,7 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Predicates.in; import static com.google.common.base.Predicates.not; -import static com.google.common.collect.Iterables.filter; +import static com.google.common.collect.ImmutableList.toImmutableList; import static com.google.devtools.build.lib.analysis.OutputGroupProvider.INTERNAL_SUFFIX; import com.google.common.base.Function; @@ -29,6 +29,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Multimap; import com.google.common.collect.MultimapBuilder; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.FailAction; import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; @@ -980,8 +981,10 @@ } NestedSet<Artifact> libraryResourceJars = libraryResourceJarsBuilder.build(); - Iterable<Artifact> filteredJars = ImmutableList.copyOf( - filter(jars, not(in(libraryResourceJars.toSet())))); + Iterable<Artifact> filteredJars = + Streams.stream(jars) + .filter(not(in(libraryResourceJars.toSet()))) + .collect(toImmutableList()); AndroidSdkProvider sdk = AndroidSdkProvider.fromRuleContext(ruleContext);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java index c19034b..0e21694 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
@@ -32,13 +32,9 @@ public abstract CcLinkParamsStore getLinkParams(); public static final Function<TransitiveInfoCollection, CcLinkParamsStore> TO_LINK_PARAMS = - new Function<TransitiveInfoCollection, CcLinkParamsStore>() { - @Override - public CcLinkParamsStore apply(TransitiveInfoCollection input) { - AndroidCcLinkParamsProvider provider = input.getProvider( - AndroidCcLinkParamsProvider.class); - return provider == null ? null : provider.getLinkParams(); - } + (TransitiveInfoCollection input) -> { + AndroidCcLinkParamsProvider provider = input.getProvider(AndroidCcLinkParamsProvider.class); + return provider == null ? null : provider.getLinkParams(); }; AndroidCcLinkParamsProvider() {}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java index a126da1..9858bdd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDevice.java
@@ -13,14 +13,16 @@ // limitations under the License. package com.google.devtools.build.lib.rules.android; -import com.google.common.base.Function; -import com.google.common.base.Joiner; +import static com.google.common.collect.MoreCollectors.onlyElement; +import static java.util.stream.Collectors.joining; + import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ResourceSet; import com.google.devtools.build.lib.analysis.ConfiguredTarget; @@ -70,38 +72,11 @@ // this is a much lower pixels-per-inch then even some of the oldest phones. private static final int MIN_LCD_DENSITY = 30; - private static final Predicate<Artifact> SOURCE_ARTIFACT_SELECTOR = new Predicate<Artifact>() { - @Override - public boolean apply(Artifact artifact) { - return artifact.isSourceArtifact(); - } - }; - - private static final Predicate<Artifact> GOOGLETEST_SH_SELECTOR = new Predicate<Artifact>() { - @Override - public boolean apply(Artifact artifact) { - return "googletest.sh".equals(artifact.getPath().getBaseName()); - } - }; - - private static final Predicate<Artifact> SOURCE_PROPERTIES_SELECTOR = new Predicate<Artifact>() { - @Override - public boolean apply(Artifact artifact) { - return "source.properties".equals(artifact.getPath().getBaseName()); - } - }; + private static final Predicate<Artifact> SOURCE_PROPERTIES_SELECTOR = + (Artifact artifact) -> "source.properties".equals(artifact.getPath().getBaseName()); private static final Predicate<Artifact> SOURCE_PROPERTIES_FILTER = Predicates.not( SOURCE_PROPERTIES_SELECTOR); - - private static final Function<Artifact, String> RUNFILES_PATH_STRING = - new Function<Artifact, String>() { - @Override - public String apply(Artifact input) { - return input.getRunfilesPathString(); - } - }; - @Override public ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException, RuleErrorException { @@ -214,10 +189,14 @@ androidRuntestDeps = ruleContext.getPrerequisiteArtifacts("$android_runtest", Mode.HOST).list(); androidRuntest = - Iterables.getOnlyElement(Iterables.filter(androidRuntestDeps, SOURCE_ARTIFACT_SELECTOR)); + androidRuntestDeps.stream().filter(Artifact::isSourceArtifact).collect(onlyElement()); testingShbaseDeps = ruleContext.getPrerequisiteArtifacts("$testing_shbase", Mode.HOST).list(); testingShbase = - Iterables.getOnlyElement(Iterables.filter(testingShbaseDeps, GOOGLETEST_SH_SELECTOR)); + testingShbaseDeps + .stream() + .filter( + (Artifact artifact) -> "googletest.sh".equals(artifact.getPath().getBaseName())) + .collect(onlyElement()); // may be empty platformApks = ruleContext.getPrerequisiteArtifacts("platform_apks", Mode.TARGET).list(); @@ -282,10 +261,16 @@ arguments.add(Substitution.of("%emulator_arm%", emulatorArm.getRunfilesPathString())); arguments.add(Substitution.of("%mksdcard%", mksdcard.getRunfilesPathString())); arguments.add(Substitution.of("%empty_snapshot_fs%", snapshotFs.getRunfilesPathString())); - arguments.add(Substitution.of("%system_images%", - Joiner.on(" ").join(Iterables.transform(systemImages, RUNFILES_PATH_STRING)))); - arguments.add(Substitution.of("%bios_files%", - Joiner.on(" ").join(Iterables.transform(emulatorX86Bios, RUNFILES_PATH_STRING)))); + arguments.add( + Substitution.of( + "%system_images%", + Streams.stream(systemImages) + .map(Artifact::getRunfilesPathString) + .collect(joining(" ")))); + arguments.add( + Substitution.of( + "%bios_files%", + emulatorX86Bios.stream().map(Artifact::getRunfilesPathString).collect(joining(" ")))); arguments.add(Substitution.of("%source_properties_file%", sourcePropertiesFile.getRunfilesPathString())); arguments.add(Substitution.of("%image_input_file%", images.getRunfilesPathString()));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java index 0e5c717..20066b3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java
@@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FilesToRunProvider; @@ -37,7 +38,6 @@ import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.ResourceFileLoader; import java.io.IOException; -import java.util.stream.StreamSupport; import javax.annotation.Nullable; /** An implementation of the {@code android_instrumentation} rule. */ @@ -170,7 +170,7 @@ private static Substitution artifactListSubstitution(String key, Iterable<Artifact> artifacts) { return Substitution.ofSpaceSeparatedList( key, - StreamSupport.stream(artifacts.spliterator(), false) + Streams.stream(artifacts) .map(Artifact::getRunfilesPathString) .collect(ImmutableList.toImmutableList())); }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java index 3b58190..ad05fa7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
@@ -16,12 +16,12 @@ import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST; import static com.google.devtools.build.lib.rules.java.DeployArchiveBuilder.Compression.COMPRESSED; import static com.google.devtools.build.lib.vfs.FileSystemUtils.replaceExtension; +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; -import com.google.common.collect.Sets; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FileProvider; @@ -61,7 +61,9 @@ import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.ArrayList; +import java.util.LinkedHashSet; import java.util.List; +import java.util.stream.Stream; /** * An base implementation for the "android_local_test" rule. @@ -214,12 +216,14 @@ NestedSet<Artifact> filesToBuild = filesToBuildBuilder.build(); Iterable<AndroidLibraryAarProvider> androidAarProviders = - Sets.newLinkedHashSet( - Iterables.concat( - ruleContext.getPrerequisites( - "runtime_deps", Mode.TARGET, AndroidLibraryAarProvider.class), - ruleContext.getPrerequisites( - "deps", Mode.TARGET, AndroidLibraryAarProvider.class))); + Stream.concat( + Streams.stream( + ruleContext.getPrerequisites( + "runtime_deps", Mode.TARGET, AndroidLibraryAarProvider.class)), + Streams.stream( + ruleContext.getPrerequisites( + "deps", Mode.TARGET, AndroidLibraryAarProvider.class))) + .collect(toCollection(LinkedHashSet::new)); NestedSetBuilder<Aar> transitiveAarsBuilder = NestedSetBuilder.naiveLinkOrder(); NestedSetBuilder<Aar> strictAarsBuilder = NestedSetBuilder.naiveLinkOrder(); @@ -241,27 +245,11 @@ CustomCommandLine.Builder cmdLineArgs = CustomCommandLine.builder(); if (!transitiveAars.isEmpty()) { cmdLineArgs.addJoinValues( - "--android_libraries", - ",", - transitiveAars, - new Function<Aar, String>() { - @Override - public String apply(Aar aar) { - return aarCmdLineArg(aar); - } - }); + "--android_libraries", ",", transitiveAars, AndroidLocalTestBase::aarCmdLineArg); } if (!strictAars.isEmpty()) { cmdLineArgs.addJoinValues( - "--strict_libraries", - ",", - strictAars, - new Function<Aar, String>() { - @Override - public String apply(Aar aar) { - return aarCmdLineArg(aar); - } - }); + "--strict_libraries", ",", strictAars, AndroidLocalTestBase::aarCmdLineArg); } RunfilesSupport runfilesSupport = RunfilesSupport.withExecutable(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java index 8a49985..3861856 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceParsingActionBuilder.java
@@ -13,13 +13,13 @@ // limitations under the License. package com.google.devtools.build.lib.rules.android; +import static java.util.stream.Collectors.joining; + import com.google.common.base.Function; -import com.google.common.base.Functions; -import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; @@ -122,7 +122,7 @@ } private static String convertRoots(Iterable<PathFragment> roots) { - return Joiner.on("#").join(Iterables.transform(roots, Functions.toStringFunction())); + return Streams.stream(roots).map(Object::toString).collect(joining("#")); } public ResourceContainer build(ActionConstructionContext context) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java index ee77eaa..f8169a1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceValidatorActionBuilder.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.rules.android; -import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.base.Strings; @@ -28,7 +27,6 @@ import com.google.devtools.build.lib.analysis.actions.SpawnAction; import java.util.ArrayList; import java.util.List; -import javax.annotation.Nullable; /** * Builder for creating $android_resource_validator action. This action validates merged resources @@ -57,13 +55,6 @@ private ResourceDependencies resourceDeps; private Artifact aapt2SourceJarOut; private Artifact aapt2RTxtOut; - private static final Function<ResourceContainer, Artifact> TO_STATIC_LIBRARY_ARTIFACT = - new Function<ResourceContainer, Artifact>() { - @Override - public Artifact apply(@Nullable ResourceContainer resourceContainer) { - return resourceContainer.getStaticLibrary(); - } - }; private Artifact compiledSymbols; /** @param ruleContext The RuleContext that was used to create the SpawnAction.Builder. */ @@ -161,7 +152,8 @@ builder.addExecPath("--aapt2", sdk.getAapt2().getExecutable()); FluentIterable<Artifact> libraries = - FluentIterable.from(resourceDeps.getResources()).transform(TO_STATIC_LIBRARY_ARTIFACT); + FluentIterable.from(resourceDeps.getResources()) + .transform(ResourceContainer::getStaticLibrary); builder .add("--libraries")
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuntimeJarProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuntimeJarProvider.java index 85e5fa9..1c94985 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuntimeJarProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuntimeJarProvider.java
@@ -24,7 +24,6 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import java.util.HashMap; -import javax.annotation.Nullable; /** * Provider of Jar files transitively to be included into the runtime classpath of an Android app. @@ -90,13 +89,9 @@ for (ImmutableMap<Artifact, Artifact> partialMapping : runtimeJars) { collapsed.putAll(partialMapping); } - return new Function<Artifact, Artifact>() { - @Override - @Nullable - public Artifact apply(@Nullable Artifact jar) { - Artifact result = collapsed.get(jar); - return result != null ? result : jar; // return null iff input == null - } + return jar -> { + Artifact result = collapsed.get(jar); + return result != null ? result : jar; // return null iff input == null }; } }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java index afad113..edf6f2a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.rules.android; -import com.google.common.base.Function; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -187,12 +186,8 @@ Iterables.concat( Iterables.transform( provider.getDirectAndroidResources(), - new Function<ResourceContainer, Iterable<Artifact>>() { - @Override - public Iterable<Artifact> apply(ResourceContainer resourceContainer) { - return resourceContainer.getArtifacts(resources); - } - }))); + (ResourceContainer resourceContainer) -> + resourceContainer.getArtifacts(resources)))); } /** Helper class to provide information about IDLs related to this rule. */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java index 8f7042a..05ed23d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
@@ -19,6 +19,7 @@ import static com.google.devtools.build.lib.packages.BuildType.TRISTATE; import static com.google.devtools.build.lib.rules.android.AndroidCommon.getAndroidConfig; import static java.nio.charset.StandardCharsets.ISO_8859_1; +import static java.util.stream.Collectors.toCollection; import com.google.common.base.Function; import com.google.common.base.Functions; @@ -29,6 +30,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ExecutionRequirements; import com.google.devtools.build.lib.actions.ParameterFile; @@ -65,6 +67,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeSet; /** * Aspect to {@link DexArchiveProvider build .dex Archives} from Jars. @@ -76,15 +79,12 @@ * aspect. Must be provided when attaching this aspect to a target. */ public static final Function<Rule, AspectParameters> PARAM_EXTRACTOR = - new Function<Rule, AspectParameters>() { - @Override - public AspectParameters apply(Rule rule) { - AttributeMap attributes = NonconfigurableAttributeMapper.of(rule); - AspectParameters.Builder result = new AspectParameters.Builder(); - TriState incrementalAttr = attributes.get("incremental_dexing", TRISTATE); - result.addAttribute("incremental_dexing", incrementalAttr.name()); - return result.build(); - } + (Rule rule) -> { + AttributeMap attributes = NonconfigurableAttributeMapper.of(rule); + AspectParameters.Builder result = new AspectParameters.Builder(); + TriState incrementalAttr = attributes.get("incremental_dexing", TRISTATE); + result.addAttribute("incremental_dexing", incrementalAttr.name()); + return result.build(); }; /** * Function that limits this aspect to Java 8 desugaring (disabling incremental dexing) when @@ -92,15 +92,10 @@ * for {@code blaze mobile-install}. */ static final Function<Rule, AspectParameters> ONLY_DESUGAR_JAVA8 = - new Function<Rule, AspectParameters>() { - @Override - public AspectParameters apply(Rule rule) { - return new AspectParameters.Builder() + (Rule rule) -> + new AspectParameters.Builder() .addAttribute("incremental_dexing", TriState.NO.name()) .build(); - } - }; - /** Aspect-only label for dexbuidler executable, to avoid name clashes with labels on rules. */ private static final String ASPECT_DEXBUILDER_PREREQ = "$dex_archive_dexbuilder"; /** Aspect-only label for desugaring executable, to avoid name clashes with labels on rules. */ @@ -513,7 +508,10 @@ // we generate one dex archive per set of flag in create() method, regardless of how those flags // are listed in all the top-level targets being built. return ImmutableSet.copyOf( - Sets.newTreeSet(Iterables.transform(tokenizedDexopts, FlagConverter.DX_TO_DEXBUILDER))); + Streams.stream(tokenizedDexopts) + .map(FlagConverter.DX_TO_DEXBUILDER) + .collect(toCollection(TreeSet::new)) + .iterator()); } private static class FlagMatcher implements Predicate<String> {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java index 361a70a..e4baef1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java
@@ -30,19 +30,9 @@ /** Builder for the action that generates the R class for libraries. */ public class LibraryRGeneratorActionBuilder { static final Function<ResourceContainer, Artifact> TO_SYMBOL_ARTIFACT = - new Function<ResourceContainer, Artifact>() { - @Override - public Artifact apply(ResourceContainer input) { - return input.getSymbols(); - } - }; + ResourceContainer::getSymbols; static final Function<ResourceContainer, String> TO_SYMBOL_PATH = - new Function<ResourceContainer, String>() { - @Override - public String apply(ResourceContainer container) { - return container.getSymbols().getExecPathString(); - } - }; + (ResourceContainer container) -> container.getSymbols().getExecPathString(); private String javaPackage; private Iterable<ResourceContainer> deps = ImmutableList.<ResourceContainer>of();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java index c84e3fd..00c1a86 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ManifestMergerActionBuilder.java
@@ -102,14 +102,11 @@ inputs.add(manifest); if (mergeeManifests != null && !mergeeManifests.isEmpty()) { - builder.add("--mergeeManifests") - .add(mapToDictionaryString(mergeeManifests, - new Function<Artifact, String>() { - @Override public String apply(Artifact input) { - return input.getExecPathString(); - } - }, - null /* valueConverter */)); + builder + .add("--mergeeManifests") + .add( + mapToDictionaryString( + mergeeManifests, Artifact::getExecPathString, null /* valueConverter */)); inputs.addAll(mergeeManifests.keySet()); } @@ -145,11 +142,8 @@ .build(context)); } - private static final Function<String, String> ESCAPER = new Function<String, String>() { - @Override public String apply(String value) { - return value.replace(":", "\\:").replace(",", "\\,"); - } - }; + private static final Function<String, String> ESCAPER = + (String value) -> value.replace(":", "\\:").replace(",", "\\,"); private <K, V> String mapToDictionaryString(Map<K, V> map) { return mapToDictionaryString(map, Functions.toStringFunction(), Functions.toStringFunction());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java index a783440..edca5d9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java
@@ -107,12 +107,7 @@ // arguments in a list of arguments. Those characters require escaping if used in a label // (part of the set of allowed characters in a label). if (includeLabel) { - escaper = new Function<String, String>() { - @Override - public String apply(String input) { - return input.replace(":", "\\:").replace(",", "\\,"); - } - }; + escaper = (String input) -> input.replace(":", "\\:").replace(",", "\\,"); } break; case SEMICOLON_AMPERSAND:
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java index 0b816c1..a454719 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java
@@ -20,17 +20,14 @@ import static com.google.devtools.build.lib.syntax.Type.STRING_DICT; import static com.google.devtools.build.lib.syntax.Type.STRING_LIST; -import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.analysis.BaseRuleClasses; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper; -import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.syntax.Type; -import java.util.Set; /** * Definitions for rule classes that specify or manipulate configuration settings. @@ -111,16 +108,6 @@ /** The name of the attribute that declares user-defined flag bindings. */ public static final String FLAG_SETTINGS_ATTRIBUTE = "flag_values"; - private static final Function<Rule, Set<String>> CONFIG_SETTING_OPTION_REFERENCE = - new Function<Rule, Set<String>>() { - @Override - public Set<String> apply(Rule rule) { - return NonconfigurableAttributeMapper.of(rule) - .get(SETTINGS_ATTRIBUTE, Type.STRING_DICT) - .keySet(); - } - }; - @Override public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) { return builder @@ -169,7 +156,11 @@ ImmutableList.of(ConfigFeatureFlagProvider.SKYLARK_IDENTIFIER)) .nonconfigurable(NONCONFIGURABLE_ATTRIBUTE_REASON)) .setIsConfigMatcherForConfigSettingOnly() - .setOptionReferenceFunctionForConfigSettingOnly(CONFIG_SETTING_OPTION_REFERENCE) + .setOptionReferenceFunctionForConfigSettingOnly( + rule -> + NonconfigurableAttributeMapper.of(rule) + .get(SETTINGS_ATTRIBUTE, Type.STRING_DICT) + .keySet()) .build(); }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java index ae98678..82bc85c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java
@@ -142,11 +142,8 @@ continue; } - OptionsParser parser = parserCache.get(optionClass); - if (parser == null) { - parser = OptionsParser.newOptionsParser(optionClass); - parserCache.put(optionClass, parser); - } + OptionsParser parser = + parserCache.computeIfAbsent(optionClass, OptionsParser::newOptionsParser); try { parser.parse("--" + optionName + "=" + expectedRawValue);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java index 86f3184..7b7906a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
@@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.cpp; -import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; @@ -236,15 +235,14 @@ helper.addStaticLibraries(alwayslinkLibrariesFromSrcs); helper.addPicStaticLibraries(picStaticLibrariesFromSrcs); helper.addPicStaticLibraries(picAlwayslinkLibrariesFromSrcs); - helper.addDynamicLibraries(Iterables.transform(precompiledFiles.getSharedLibraries(), - new Function<Artifact, LibraryToLink>() { - @Override - public LibraryToLink apply(Artifact library) { - return LinkerInputs.solibLibraryToLink( - common.getDynamicLibrarySymlink(library, true), library, - CcLinkingOutputs.libraryIdentifierOf(library)); - } - })); + helper.addDynamicLibraries( + Iterables.transform( + precompiledFiles.getSharedLibraries(), + library -> + LinkerInputs.solibLibraryToLink( + common.getDynamicLibrarySymlink(library, true), + library, + CcLinkingOutputs.libraryIdentifierOf(library)))); CcLibraryHelper.Info info = helper.build(); /*
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java index ffdacd3..3c7aa42 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java
@@ -14,8 +14,10 @@ package com.google.devtools.build.lib.rules.cpp; +import static java.util.stream.Collectors.joining; +import static java.util.stream.Collectors.toCollection; + import com.google.common.base.Function; -import com.google.common.base.Joiner; import com.google.common.base.Optional; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; @@ -24,6 +26,7 @@ import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.AnalysisUtils; import com.google.devtools.build.lib.analysis.FileProvider; @@ -52,7 +55,6 @@ import com.google.devtools.build.lib.rules.cpp.Link.Staticness; import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink; import com.google.devtools.build.lib.syntax.Type; -import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.util.FileTypeSet; import com.google.devtools.build.lib.util.Pair; import com.google.devtools.build.lib.util.Preconditions; @@ -171,14 +173,10 @@ /** Function for extracting module maps from CppCompilationDependencies. */ public static final Function<TransitiveInfoCollection, CppModuleMap> CPP_DEPS_TO_MODULES = - new Function<TransitiveInfoCollection, CppModuleMap>() { - @Override - @Nullable - public CppModuleMap apply(TransitiveInfoCollection dep) { + dep -> { CppCompilationContext context = dep.getProvider(CppCompilationContext.class); return context == null ? null : context.getCppModuleMap(); - } - }; + }; /** * Contains the providers as well as the compilation and linking outputs, and the compilation @@ -1004,15 +1002,17 @@ LinkerInputs.toNonSolibArtifacts(linkedLibraryMap.get(matchingIdentifier)); ruleContext.ruleError( "Can't put " - + Joiner.on(", ") - .join(Iterables.transform(matchingInputLibs, FileType.TO_FILENAME)) + + Streams.stream(matchingInputLibs) + .map(Artifact::getFilename) + .collect(joining(", ")) + " into the srcs of a " + ruleContext.getRuleClassNameForLogging() + " with the same name (" + ruleContext.getRule().getName() + ") which also contains other code or objects to link; it shares a name with " - + Joiner.on(", ") - .join(Iterables.transform(matchingOutputLibs, FileType.TO_FILENAME)) + + Streams.stream(matchingOutputLibs) + .map(Artifact::getFilename) + .collect(joining(", ")) + " (output compiled and linked from the non-library sources of this rule), " + "which could cause confusion"); } @@ -1463,8 +1463,8 @@ private Iterable<CppModuleMap> collectModuleMaps() { // Cpp module maps may be null for some rules. We filter the nulls out at the end. - List<CppModuleMap> result = new ArrayList<>(); - Iterables.addAll(result, Iterables.transform(deps, CPP_DEPS_TO_MODULES)); + List<CppModuleMap> result = + deps.stream().map(CPP_DEPS_TO_MODULES).collect(toCollection(ArrayList::new)); if (ruleContext.getRule().getAttributeDefinition(":stl") != null) { CppCompilationContext stl = ruleContext.getPrerequisite(":stl", Mode.TARGET, CppCompilationContext.class);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java index 9469a30..4b9fcd7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParams.java
@@ -27,7 +27,6 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.rules.cpp.LinkerInputs.LibraryToLink; import com.google.devtools.build.lib.util.Preconditions; - import java.util.Collection; import java.util.List; import java.util.Objects; @@ -90,13 +89,7 @@ } public ImmutableList<String> flattenedLinkopts() { - return ImmutableList.copyOf(Iterables.concat(Iterables.transform(linkOpts, - new Function<LinkOptions, ImmutableList<String>>() { - @Override - public ImmutableList<String> apply(LinkOptions linkOptions) { - return linkOptions.get(); - } - }))); + return ImmutableList.copyOf(Iterables.concat(Iterables.transform(linkOpts, LinkOptions::get))); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsProvider.java index 0f103b7..76a6c76 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsProvider.java
@@ -31,23 +31,20 @@ public static final ClassObjectConstructor CC_LINK_PARAMS = new NativeClassObjectConstructor("link_params") { }; public static final Function<TransitiveInfoCollection, CcLinkParamsStore> TO_LINK_PARAMS = - new Function<TransitiveInfoCollection, CcLinkParamsStore>() { - @Override - public CcLinkParamsStore apply(TransitiveInfoCollection input) { + input -> { - // Try native first... - CcLinkParamsProvider provider = input.getProvider(CcLinkParamsProvider.class); - if (provider != null) { - return provider.getCcLinkParamsStore(); - } - - // ... then try Skylark. - provider = (CcLinkParamsProvider) input.get(CC_LINK_PARAMS.getKey()); - if (provider != null) { - return provider.getCcLinkParamsStore(); - } - return null; + // Try native first... + CcLinkParamsProvider provider = input.getProvider(CcLinkParamsProvider.class); + if (provider != null) { + return provider.getCcLinkParamsStore(); } + + // ... then try Skylark. + provider = (CcLinkParamsProvider) input.get(CC_LINK_PARAMS.getKey()); + if (provider != null) { + return provider.getCcLinkParamsStore(); + } + return null; }; private final CcLinkParamsStoreImpl store;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSpecificLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSpecificLinkParamsProvider.java index e43154f..6afb548 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSpecificLinkParamsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSpecificLinkParamsProvider.java
@@ -37,12 +37,9 @@ } public static final Function<TransitiveInfoCollection, CcLinkParamsStore> TO_LINK_PARAMS = - new Function<TransitiveInfoCollection, CcLinkParamsStore>() { - @Override - public CcLinkParamsStore apply(TransitiveInfoCollection input) { - CcSpecificLinkParamsProvider provider = input.getProvider( - CcSpecificLinkParamsProvider.class); - return provider == null ? null : provider.getLinkParams(); - } + input -> { + CcSpecificLinkParamsProvider provider = + input.getProvider(CcSpecificLinkParamsProvider.class); + return provider == null ? null : provider.getLinkParams(); }; }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java index 6722658..1eee080 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
@@ -18,7 +18,6 @@ import com.google.common.base.Joiner; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.base.Predicate; import com.google.common.base.Strings; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; @@ -762,14 +761,9 @@ Optional<CToolchain.Tool> tool = Iterables.tryFind( tools, - new Predicate<CToolchain.Tool>() { - // We select the first listed tool for which all specified features are activated - // in this configuration - @Override - public boolean apply(CToolchain.Tool input) { - Collection<String> featureNamesForTool = input.getWithFeature().getFeatureList(); - return enabledFeatureNames.containsAll(featureNamesForTool); - } + input -> { + Collection<String> featureNamesForTool = input.getWithFeature().getFeatureList(); + return enabledFeatureNames.containsAll(featureNamesForTool); }); if (tool.isPresent()) { return new Tool(tool.get());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java index f8c3940..2df5412 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java
@@ -15,7 +15,6 @@ import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.config.PerLabelOptions; import com.google.devtools.build.lib.cmdline.Label; @@ -197,7 +196,7 @@ // For each option in 'in', add it to 'out' unless it is matched by the 'coptsFilter' regexp. private void addFilteredOptions(List<String> out, List<String> in) { - Iterables.addAll(out, Iterables.filter(in, coptsFilter)); + in.stream().filter(coptsFilter).forEachOrdered(out::add); } public Artifact getSourceFile() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java index c86348a..f5d21f4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
@@ -222,17 +222,14 @@ if (finalPatterns.isEmpty()) { return Predicates.alwaysTrue(); } else { - return new Predicate<String>() { - @Override - public boolean apply(String option) { - for (Pattern pattern : finalPatterns) { - if (pattern.matcher(option).matches()) { - return false; - } + return option -> { + for (Pattern pattern : finalPatterns) { + if (pattern.matcher(option).matches()) { + return false; } - - return true; } + + return true; }; } }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java index b66c690..5468a16 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -15,7 +15,6 @@ package com.google.devtools.build.lib.rules.cpp; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Predicate; import com.google.common.base.Verify; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableList; @@ -52,7 +51,6 @@ import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain; -import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode; @@ -405,22 +403,19 @@ Iterable<Tool> neededTools = Iterables.filter( EnumSet.allOf(Tool.class), - new Predicate<Tool>() { - @Override - public boolean apply(Tool tool) { - if (tool == Tool.DWP) { - // When fission is unsupported, don't check for the dwp tool. - return supportsFission(); - } else if (tool == Tool.LLVM_PROFDATA) { - // TODO(tmsriram): Fix this to check if this is a llvm crosstool - // and return true. This needs changes to crosstool_config.proto. - return false; - } else if (tool == Tool.GCOVTOOL || tool == Tool.OBJCOPY) { - // gcov-tool and objcopy are optional, don't check whether they're present - return false; - } else { - return true; - } + tool -> { + if (tool == Tool.DWP) { + // When fission is unsupported, don't check for the dwp tool. + return supportsFission(); + } else if (tool == Tool.LLVM_PROFDATA) { + // TODO(tmsriram): Fix this to check if this is a llvm crosstool + // and return true. This needs changes to crosstool_config.proto. + return false; + } else if (tool == Tool.GCOVTOOL || tool == Tool.OBJCOPY) { + // gcov-tool and objcopy are optional, don't check whether they're present + return false; + } else { + return true; } }); for (Tool tool : neededTools) { @@ -600,17 +595,10 @@ } private static boolean actionsAreConfigured(CToolchain toolchain) { - return Iterables.any( - toolchain.getActionConfigList(), - new Predicate<ActionConfig>() { - @Override - public boolean apply(@Nullable ActionConfig actionConfig) { - // We cannot assume actions are configured just by presence of any action_config. Some - // crosstools specify unrelated action_configs (e.g. clif_match), but C/C++ part is - // in fact not configured. - return actionConfig.getActionName().contains("c++"); - } - }); + return toolchain + .getActionConfigList() + .stream() + .anyMatch(actionConfig -> actionConfig.getActionName().contains("c++")); } // TODO(bazel-team): Remove this once bazel supports all crosstool flags through
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java index cdda812..3c7f07f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppFileTypes.java
@@ -169,20 +169,17 @@ /** Predicate that matches all artifacts that can be used in an objc Clang module map. */ public static final Predicate<Artifact> MODULE_MAP_HEADER = - new Predicate<Artifact>() { - @Override - public boolean apply(Artifact artifact) { - if (artifact.isTreeArtifact()) { - // Tree artifact is basically a directory, which does not have any information about - // the contained files and their extensions. Here we assume the passed in tree artifact - // contains proper header files with .h extension. - return true; - } else { - // The current clang (clang-600.0.57) on Darwin doesn't support 'textual', so we can't - // have '.inc' files in the module map (since they're implictly textual). - // TODO(bazel-team): Use HEADERS file type once clang-700 is the base clang we support. - return artifact.getFilename().endsWith(".h"); - } + artifact -> { + if (artifact.isTreeArtifact()) { + // Tree artifact is basically a directory, which does not have any information about + // the contained files and their extensions. Here we assume the passed in tree artifact + // contains proper header files with .h extension. + return true; + } else { + // The current clang (clang-600.0.57) on Darwin doesn't support 'textual', so we can't + // have '.inc' files in the module map (since they're implictly textual). + // TODO(bazel-team): Use HEADERS file type once clang-700 is the base clang we support. + return artifact.getFilename().endsWith(".h"); } };
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java index 137e22c..8df91f4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMapAction.java
@@ -77,11 +77,11 @@ super( owner, ImmutableList.<Artifact>builder() - .addAll(Iterables.filter(privateHeaders, Artifact.IS_TREE_ARTIFACT)) - .addAll(Iterables.filter(publicHeaders, Artifact.IS_TREE_ARTIFACT)) + .addAll(Iterables.filter(privateHeaders, Artifact::isTreeArtifact)) + .addAll(Iterables.filter(publicHeaders, Artifact::isTreeArtifact)) .build(), cppModuleMap.getArtifact(), - /*makeExecutable=*/false); + /*makeExecutable=*/ false); this.cppModuleMap = cppModuleMap; this.moduleMapHomeIsCwd = moduleMapHomeIsCwd; this.privateHeaders = ImmutableList.copyOf(privateHeaders);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRunfilesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRunfilesProvider.java index 43c13ac..30f7bc9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRunfilesProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRunfilesProvider.java
@@ -45,33 +45,23 @@ } /** - * Returns a function that gets the static C++ runfiles from a {@link TransitiveInfoCollection} - * or the empty runfiles instance if it does not contain that provider. + * Returns a function that gets the static C++ runfiles from a {@link TransitiveInfoCollection} or + * the empty runfiles instance if it does not contain that provider. */ public static final Function<TransitiveInfoCollection, Runfiles> STATIC_RUNFILES = - new Function<TransitiveInfoCollection, Runfiles>() { - @Override - public Runfiles apply(TransitiveInfoCollection input) { - CppRunfilesProvider provider = input.getProvider(CppRunfilesProvider.class); - return provider == null - ? Runfiles.EMPTY - : provider.getStaticRunfiles(); - } + input -> { + CppRunfilesProvider provider = input.getProvider(CppRunfilesProvider.class); + return provider == null ? Runfiles.EMPTY : provider.getStaticRunfiles(); }; /** - * Returns a function that gets the shared C++ runfiles from a {@link TransitiveInfoCollection} - * or the empty runfiles instance if it does not contain that provider. + * Returns a function that gets the shared C++ runfiles from a {@link TransitiveInfoCollection} or + * the empty runfiles instance if it does not contain that provider. */ public static final Function<TransitiveInfoCollection, Runfiles> SHARED_RUNFILES = - new Function<TransitiveInfoCollection, Runfiles>() { - @Override - public Runfiles apply(TransitiveInfoCollection input) { - CppRunfilesProvider provider = input.getProvider(CppRunfilesProvider.class); - return provider == null - ? Runfiles.EMPTY - : provider.getSharedRunfiles(); - } + input -> { + CppRunfilesProvider provider = input.getProvider(CppRunfilesProvider.class); + return provider == null ? Runfiles.EMPTY : provider.getSharedRunfiles(); }; /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java index 29ace2f..460dca7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CrosstoolConfigurationLoader.java
@@ -45,7 +45,6 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; -import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import javax.annotation.Nullable; @@ -251,12 +250,9 @@ String md5 = BaseEncoding.base16().lowerCase().encode(finalProto.getMd5()); CrosstoolConfig.CrosstoolRelease release; try { - release = crosstoolReleaseCache.get(md5, new Callable<CrosstoolRelease>() { - @Override - public CrosstoolRelease call() throws Exception { - return toReleaseConfiguration(finalProto.getName(), finalProto.getContents()); - } - }); + release = + crosstoolReleaseCache.get( + md5, () -> toReleaseConfiguration(finalProto.getName(), finalProto.getContents())); } catch (ExecutionException e) { throw new InvalidConfigurationException(e); }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibraries.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibraries.java index d596ce0..4a5c725 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibraries.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtraLinkTimeLibraries.java
@@ -15,7 +15,6 @@ package com.google.devtools.build.lib.rules.cpp; import com.google.common.collect.Lists; - import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; @@ -79,9 +78,7 @@ public final Builder addTransitive(ExtraLinkTimeLibraries dep) { for (ExtraLinkTimeLibrary depLibrary : dep.getExtraLibraries()) { Class<? extends ExtraLinkTimeLibrary> c = depLibrary.getClass(); - if (!libraries.containsKey(c)) { - libraries.put(c, depLibrary.getBuilder()); - } + libraries.computeIfAbsent(c, k -> depLibrary.getBuilder()); libraries.get(c).addTransitive(depLibrary); } return this; @@ -92,9 +89,7 @@ */ public final Builder add(ExtraLinkTimeLibrary b) { Class<? extends ExtraLinkTimeLibrary> c = b.getClass(); - if (!libraries.containsKey(c)) { - libraries.put(c, b.getBuilder()); - } + libraries.computeIfAbsent(c, k -> b.getBuilder()); libraries.get(c).addTransitive(b); return this; }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java index 70a9dd1..a8c0160 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java
@@ -15,13 +15,11 @@ package com.google.devtools.build.lib.rules.cpp; import static java.nio.charset.StandardCharsets.ISO_8859_1; +import static java.util.stream.Collectors.joining; -import com.google.common.base.Function; -import com.google.common.base.Joiner; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionExecutionException; import com.google.devtools.build.lib.actions.ActionOwner; @@ -207,24 +205,26 @@ // runfiles directory (where writing is forbidden), we patch the command // line to write to $TEST_TMPDIR instead. final String outputPrefix = "$TEST_TMPDIR/"; - String argv = Joiner.on(' ').join( - Iterables.transform(getArgv(outputFile.getExecPath()), new Function<String, String>() { - @Override - public String apply(String input) { - String result = ShellEscaper.escapeString(input); - // Once -c and -o options are added into action_config, the argument of - // getArgv(outputFile.getExecPath()) won't be used anymore. There will always be - // -c <tempOutputFile>, but here it has to be outputFile, so we replace it. - if (input.equals(tempOutputFile.getPathString())) { - result = outputPrefix + ShellEscaper.escapeString(outputFile.getExecPathString()); - } - if (input.equals(outputFile.getExecPathString()) - || input.equals(getDotdFile().getSafeExecPath().getPathString())) { - result = outputPrefix + ShellEscaper.escapeString(input); - } - return result; - } - })); + String argv = + getArgv(outputFile.getExecPath()) + .stream() + .map( + input -> { + String result = ShellEscaper.escapeString(input); + // Once -c and -o options are added into action_config, the argument of + // getArgv(outputFile.getExecPath()) won't be used anymore. There will always be + // -c <tempOutputFile>, but here it has to be outputFile, so we replace it. + if (input.equals(tempOutputFile.getPathString())) { + result = + outputPrefix + ShellEscaper.escapeString(outputFile.getExecPathString()); + } + if (input.equals(outputFile.getExecPathString()) + || input.equals(getDotdFile().getSafeExecPath().getPathString())) { + result = outputPrefix + ShellEscaper.escapeString(input); + } + return result; + }) + .collect(joining(" ")); // Write the command needed to build the real .o file to the fake .o file. // Generate a command to ensure that the output directory exists; otherwise
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java index b279440..a904db9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java
@@ -657,8 +657,9 @@ if (linkstampCompileOptions.isEmpty()) { actualLinkstampCompileOptions = DEFAULT_LINKSTAMP_OPTIONS; } else { - actualLinkstampCompileOptions = ImmutableList.copyOf( - Iterables.concat(DEFAULT_LINKSTAMP_OPTIONS, linkstampCompileOptions)); + actualLinkstampCompileOptions = + ImmutableList.copyOf( + Iterables.concat(DEFAULT_LINKSTAMP_OPTIONS, linkstampCompileOptions)); } if (toolchain == null) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java index fd3dce6..bee6f92 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java
@@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.cpp; -import com.google.common.base.Function; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; @@ -352,12 +351,7 @@ */ public static Iterable<LinkerInput> simpleLinkerInputs(Iterable<Artifact> input, final ArtifactCategory category) { - return Iterables.transform(input, new Function<Artifact, LinkerInput>() { - @Override - public LinkerInput apply(Artifact artifact) { - return simpleLinkerInput(artifact, category); - } - }); + return Iterables.transform(input, artifact -> simpleLinkerInput(artifact, category)); } /** @@ -382,12 +376,7 @@ */ public static Iterable<LibraryToLink> opaqueLibrariesToLink( final ArtifactCategory category, Iterable<Artifact> input) { - return Iterables.transform(input, new Function<Artifact, LibraryToLink>() { - @Override - public LibraryToLink apply(Artifact artifact) { - return precompiledLibraryToLink(artifact, category); - } - }); + return Iterables.transform(input, artifact -> precompiledLibraryToLink(artifact, category)); } /** @@ -429,27 +418,14 @@ library, category, libraryIdentifier, objectFiles, ltoBitcodeFiles); } - private static final Function<LibraryToLink, Artifact> LIBRARY_TO_NON_SOLIB = - new Function<LibraryToLink, Artifact>() { - @Override - public Artifact apply(LibraryToLink input) { - return input.getOriginalLibraryArtifact(); - } - }; - public static Iterable<Artifact> toNonSolibArtifacts(Iterable<LibraryToLink> libraries) { - return Iterables.transform(libraries, LIBRARY_TO_NON_SOLIB); + return Iterables.transform(libraries, LibraryToLink::getOriginalLibraryArtifact); } /** * Returns the linker input artifacts from a collection of {@link LinkerInput} objects. */ public static Iterable<Artifact> toLibraryArtifacts(Iterable<? extends LinkerInput> artifacts) { - return Iterables.transform(artifacts, new Function<LinkerInput, Artifact>() { - @Override - public Artifact apply(LinkerInput input) { - return input.getArtifact(); - } - }); + return Iterables.transform(artifacts, LinkerInput::getArtifact); } }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/PrecompiledFiles.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/PrecompiledFiles.java index 6f9e6f0..8dbedea 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/PrecompiledFiles.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/PrecompiledFiles.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.rules.cpp; -import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; @@ -76,21 +75,20 @@ public Iterable<Artifact> getObjectFiles(final boolean usePic) { if (usePic) { - return Iterables.filter(files, new Predicate<Artifact>() { - @Override - public boolean apply(Artifact artifact) { - String filename = artifact.getExecPathString(); + return Iterables.filter( + files, + artifact -> { + String filename = artifact.getExecPathString(); - // For compatibility with existing BUILD files, any ".o" files listed - // in srcs are assumed to be position-independent code, or - // at least suitable for inclusion in shared libraries, unless they - // end with ".nopic.o". (The ".nopic.o" extension is an undocumented - // feature to give users at least some control over this.) Note that - // some target platforms do not require shared library code to be PIC. - return CppFileTypes.PIC_OBJECT_FILE.matches(filename) - || (CppFileTypes.OBJECT_FILE.matches(filename) && !filename.endsWith(".nopic.o")); - } - }); + // For compatibility with existing BUILD files, any ".o" files listed + // in srcs are assumed to be position-independent code, or + // at least suitable for inclusion in shared libraries, unless they + // end with ".nopic.o". (The ".nopic.o" extension is an undocumented + // feature to give users at least some control over this.) Note that + // some target platforms do not require shared library code to be PIC. + return CppFileTypes.PIC_OBJECT_FILE.matches(filename) + || (CppFileTypes.OBJECT_FILE.matches(filename) && !filename.endsWith(".nopic.o")); + }); } else { return FileType.filter(files, CppFileTypes.OBJECT_FILE); }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/UmbrellaHeaderAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/UmbrellaHeaderAction.java index 14c3a0c..eada861 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/UmbrellaHeaderAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/UmbrellaHeaderAction.java
@@ -13,8 +13,10 @@ // limitations under the License. package com.google.devtools.build.lib.rules.cpp; +import static com.google.common.collect.ImmutableList.toImmutableList; + import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; @@ -50,9 +52,9 @@ Iterable<PathFragment> additionalExportedHeaders) { super( owner, - ImmutableList.copyOf(Iterables.filter(publicHeaders, Artifact.IS_TREE_ARTIFACT)), + Streams.stream(publicHeaders).filter(Artifact::isTreeArtifact).collect(toImmutableList()), umbrellaHeader, - /*makeExecutable=*/false); + /*makeExecutable=*/ false); this.umbrellaHeader = umbrellaHeader; this.publicHeaders = ImmutableList.copyOf(publicHeaders); this.additionalExportedHeaders = ImmutableList.copyOf(additionalExportedHeaders);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoLibraryRule.java index 065f722..dd02eaa 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoLibraryRule.java
@@ -25,22 +25,10 @@ import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; -import javax.annotation.Nullable; /** Declaration part of cc_proto_library. */ public class CcProtoLibraryRule implements RuleDefinition { - private static final Function<Rule, AspectParameters> ASPECT_PARAMETERS = - new Function<Rule, AspectParameters>() { - @Nullable - @Override - public AspectParameters apply(@Nullable Rule rule) { - return new AspectParameters.Builder() - .addAttribute(INJECTING_RULE_KIND_PARAMETER_KEY, "cc_proto_library") - .build(); - } - }; - private final CcProtoAspect ccProtoAspect; public CcProtoLibraryRule(CcProtoAspect ccProtoAspect) { @@ -49,6 +37,12 @@ @Override public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment) { + Function<Rule, AspectParameters> aspectParameters = + rule -> + new AspectParameters.Builder() + .addAttribute(INJECTING_RULE_KIND_PARAMETER_KEY, "cc_proto_library") + .build(); + return builder /* <!-- #BLAZE_RULE(cc_proto_library).ATTRIBUTE(deps) --> The list of <a href="protocol-buffer.html#proto_library"><code>proto_library</code></a> @@ -58,7 +52,7 @@ attr("deps", LABEL_LIST) .allowedRuleClasses("proto_library") .allowedFileTypes() - .aspect(ccProtoAspect, ASPECT_PARAMETERS)) + .aspect(ccProtoAspect, aspectParameters)) .build(); }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java index 29379dc..e110a34 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java
@@ -13,10 +13,13 @@ // limitations under the License. package com.google.devtools.build.lib.rules.java; +import static com.google.common.collect.ImmutableList.toImmutableList; + import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ExecutionRequirements; import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; @@ -209,8 +212,9 @@ Function<Artifact, Artifact> derivedJarFunction) { IterablesChain.Builder<Artifact> inputs = IterablesChain.builder(); inputs.add( - ImmutableList.copyOf( - Iterables.transform(attributes.getRuntimeClassPathForArchive(), derivedJarFunction))); + Streams.stream(attributes.getRuntimeClassPathForArchive()) + .map(derivedJarFunction) + .collect(toImmutableList())); // TODO(bazel-team): Remove? Resources not used as input to singlejar action inputs.add(ImmutableList.copyOf(attributes.getResources().values())); inputs.add(attributes.getClassPathResources()); @@ -237,7 +241,7 @@ IterablesChain.Builder<Artifact> inputs = IterablesChain.builder(); inputs.add(getArchiveInputs(attributes, derivedJars)); - inputs.add(ImmutableList.copyOf(Iterables.transform(runtimeJars, derivedJars))); + inputs.add(Streams.stream(runtimeJars).map(derivedJars).collect(toImmutableList())); if (runfilesMiddleman != null) { inputs.addElement(runfilesMiddleman); }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java index 7108e34..1c096be 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
@@ -37,12 +37,8 @@ } public static final Function<TransitiveInfoCollection, CcLinkParamsStore> TO_LINK_PARAMS = - new Function<TransitiveInfoCollection, CcLinkParamsStore>() { - @Override - public CcLinkParamsStore apply(TransitiveInfoCollection input) { - JavaCcLinkParamsProvider provider = input.getProvider( - JavaCcLinkParamsProvider.class); - return provider == null ? null : provider.getLinkParams(); - } + input -> { + JavaCcLinkParamsProvider provider = input.getProvider(JavaCcLinkParamsProvider.class); + return provider == null ? null : provider.getLinkParams(); }; }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java index 082552b..293208c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
@@ -13,11 +13,13 @@ // limitations under the License. package com.google.devtools.build.lib.rules.java; -import com.google.common.base.Function; +import static com.google.common.collect.ImmutableList.toImmutableList; + import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.AnalysisEnvironment; @@ -66,14 +68,6 @@ * A helper class to create configured targets for Java rules. */ public class JavaCommon { - private static final Function<TransitiveInfoCollection, Label> GET_COLLECTION_LABEL = - new Function<TransitiveInfoCollection, Label>() { - @Override - public Label apply(TransitiveInfoCollection collection) { - return collection.getLabel(); - } - }; - public static final InstrumentationSpec JAVA_COLLECTION_SPEC = new InstrumentationSpec( FileTypeSet.of(JavaSemantics.JAVA_SOURCE)) .withSourceAttributes("srcs") @@ -436,7 +430,7 @@ NestedSetBuilder<Label> builder = NestedSetBuilder.stableOrder(); List<TransitiveInfoCollection> currentRuleExports = getExports(ruleContext); - builder.addAll(Iterables.transform(currentRuleExports, GET_COLLECTION_LABEL)); + builder.addAll(Iterables.transform(currentRuleExports, TransitiveInfoCollection::getLabel)); for (TransitiveInfoCollection dep : currentRuleExports) { JavaExportsProvider exportsProvider = dep.getProvider(JavaExportsProvider.class); @@ -464,10 +458,11 @@ } private ImmutableList<String> computeJavacOpts(Iterable<String> extraJavacOpts) { - return ImmutableList.copyOf(Iterables.concat( - JavaToolchainProvider.fromRuleContext(ruleContext).getJavacOptions(), - extraJavacOpts, - ruleContext.getTokenizedStringListAttr("javacopts"))); + return Streams.concat( + JavaToolchainProvider.fromRuleContext(ruleContext).getJavacOptions().stream(), + Streams.stream(extraJavacOpts), + ruleContext.getTokenizedStringListAttr("javacopts").stream()) + .collect(toImmutableList()); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRunfilesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRunfilesProvider.java index 6b064d1..67291a5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRunfilesProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRunfilesProvider.java
@@ -36,18 +36,12 @@ } /** - * Returns a function that gets the Java runfiles from a {@link TransitiveInfoCollection} or - * the empty runfiles instance if it does not contain that provider. + * Returns a function that gets the Java runfiles from a {@link TransitiveInfoCollection} or the + * empty runfiles instance if it does not contain that provider. */ public static final Function<TransitiveInfoCollection, Runfiles> TO_RUNFILES = - new Function<TransitiveInfoCollection, Runfiles>() { - @Override - public Runfiles apply(TransitiveInfoCollection input) { - JavaRunfilesProvider provider = - JavaProvider.getProvider(JavaRunfilesProvider.class, input); - return provider == null - ? Runfiles.EMPTY - : provider.getRunfiles(); - } + (TransitiveInfoCollection input) -> { + JavaRunfilesProvider provider = JavaProvider.getProvider(JavaRunfilesProvider.class, input); + return provider == null ? Runfiles.EMPTY : provider.getRunfiles(); }; }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java index a4e707e..28c0709 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java
@@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; @@ -145,7 +146,7 @@ } boolean sizeGreaterThanOrEqual(Iterable<?> elements, int size) { - return Iterables.size(Iterables.limit(elements, size)) == size; + return Streams.stream(elements).limit(size).count() == size; } private static void addAsResourcePrefixedExecPath(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java index b2cc573..eadabb9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java
@@ -105,9 +105,7 @@ * @return this builder. */ public Builder addOutput(String arch, OutputType outputType, Artifact artifact) { - if (!outputsByArch.containsKey(arch)) { - outputsByArch.put(arch, new HashMap<String, Artifact>()); - } + outputsByArch.computeIfAbsent(arch, k -> new HashMap<String, Artifact>()); outputsByArch.get(arch).put(outputType.toString(), artifact); return this;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java index 1c7220b..8311dc7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java
@@ -20,7 +20,6 @@ import static com.google.devtools.build.lib.rules.objc.ObjcProvider.XCASSETS_DIR; import com.google.common.base.Optional; -import com.google.common.base.Predicate; import com.google.common.base.Verify; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; @@ -39,7 +38,6 @@ import com.google.devtools.build.lib.rules.apple.Platform.PlatformType; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.PathFragment; - import java.util.HashMap; import java.util.Locale; import java.util.Map; @@ -205,13 +203,13 @@ * Returns true if this bundle is targeted to {@link TargetDeviceFamily#WATCH}, false otherwise. */ boolean isBuildingForWatch() { - return Iterables.any(targetDeviceFamilies(), - new Predicate<TargetDeviceFamily>() { - @Override - public boolean apply(TargetDeviceFamily targetDeviceFamily) { - return targetDeviceFamily.name().equalsIgnoreCase(TargetDeviceFamily.WATCH.getNameInRule()); - } - }); + return targetDeviceFamilies() + .stream() + .anyMatch( + targetDeviceFamily -> + targetDeviceFamily + .name() + .equalsIgnoreCase(TargetDeviceFamily.WATCH.getNameInRule())); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java index 6862165..b44ac67 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java
@@ -400,7 +400,7 @@ packageFragment.get(), genfilesFragment.getRelative(packageFragment.get())); Iterable<PathFragment> relativeIncludes = - Iterables.filter(includes(), Predicates.not(PathFragment.IS_ABSOLUTE)); + Iterables.filter(includes(), Predicates.not(PathFragment::isAbsolute)); for (PathFragment include : relativeIncludes) { for (PathFragment rootFragment : rootFragments) { paths.add(rootFragment.getRelative(include).normalize());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java index 5018e98..1fd9ee4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -31,6 +31,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.SRCS_TYPE; import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.STRIP; import static java.nio.charset.StandardCharsets.ISO_8859_1; +import static java.util.stream.Collectors.toCollection; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Joiner; @@ -85,11 +86,13 @@ import com.google.devtools.build.lib.util.Pair; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.PathFragment; +import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; +import java.util.stream.Stream; import javax.annotation.Nullable; /** @@ -142,16 +145,11 @@ "-fexceptions", "-fasm-blocks", "-fobjc-abi-version=2", "-fobjc-legacy-dispatch"); private static final String FRAMEWORK_SUFFIX = ".framework"; - + /** Selects cc libraries that have alwayslink=1. */ protected static final Predicate<Artifact> ALWAYS_LINKED_CC_LIBRARY = - new Predicate<Artifact>() { - @Override - public boolean apply(Artifact input) { - return LINK_LIBRARY_FILETYPES.matches(input.getFilename()); - } - }; - + input -> LINK_LIBRARY_FILETYPES.matches(input.getFilename()); + /** * Returns the location of the xcrunwrapper tool. */ @@ -678,7 +676,7 @@ */ CompilationSupport validateAttributes() throws RuleErrorException { for (PathFragment absoluteInclude : - Iterables.filter(attributes.includes(), PathFragment.IS_ABSOLUTE)) { + Iterables.filter(attributes.includes(), PathFragment::isAbsolute)) { ruleContext.attributeError( "includes", String.format(ABSOLUTE_INCLUDES_PATH_FORMAT, absoluteInclude)); } @@ -825,7 +823,8 @@ */ protected Iterable<String> getCompileRuleCopts() { List<String> copts = - Lists.newArrayList(Iterables.concat(objcConfiguration.getCopts(), attributes.copts())); + Stream.concat(objcConfiguration.getCopts().stream(), attributes.copts().stream()) + .collect(toCollection(ArrayList::new)); for (String copt : copts) { if (copt.contains("-fmodules-cache-path")) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java index 915d40d..aca7f7a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java
@@ -14,6 +14,7 @@ package com.google.devtools.build.lib.rules.objc; +import static com.google.common.collect.ImmutableSortedSet.toImmutableSortedSet; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.DEFINE; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.DYNAMIC_FRAMEWORK_FILE; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.HEADER; @@ -21,6 +22,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcProvider.INCLUDE; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.INCLUDE_SYSTEM; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.STATIC_FRAMEWORK_FILE; +import static java.util.Comparator.naturalOrder; import com.google.common.base.Preconditions; import com.google.common.base.Predicates; @@ -29,6 +31,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Iterables; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.AnalysisEnvironment; @@ -63,6 +66,7 @@ import com.google.devtools.build.lib.vfs.PathFragment; import java.util.Collection; import java.util.Map; +import java.util.stream.Stream; import javax.annotation.Nullable; /** @@ -387,8 +391,11 @@ ImmutableSortedSet.copyOf(compilationArtifacts.getNonArcSrcs()); Collection<Artifact> privateHdrs = ImmutableSortedSet.copyOf(compilationArtifacts.getPrivateHdrs()); - Collection<Artifact> publicHdrs = ImmutableSortedSet.copyOf( - Iterables.concat(attributes.hdrs(), compilationArtifacts.getAdditionalHdrs())); + Collection<Artifact> publicHdrs = + Stream.concat( + Streams.stream(attributes.hdrs()), + Streams.stream(compilationArtifacts.getAdditionalHdrs())) + .collect(toImmutableSortedSet(naturalOrder())); Artifact pchHdr = null; if (ruleContext.attributes().has("pch", BuildType.LABEL)) { pchHdr = ruleContext.getPrerequisiteArtifact("pch", Mode.TARGET);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/Interspersing.java b/src/main/java/com/google/devtools/build/lib/rules/objc/Interspersing.java index 38f1bca..4cdc08d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/Interspersing.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/Interspersing.java
@@ -32,15 +32,7 @@ public static <E> Iterable<E> beforeEach(final E what, Iterable<E> sequence) { Preconditions.checkNotNull(what); return Iterables.concat( - Iterables.transform( - sequence, - new Function<E, Iterable<E>>() { - @Override - public Iterable<E> apply(E element) { - return ImmutableList.of(what, element); - } - } - )); + Iterables.transform(sequence, element -> ImmutableList.of(what, element))); } /** @@ -50,14 +42,7 @@ public static Iterable<String> prependEach(final String what, Iterable<String> sequence) { Preconditions.checkNotNull(what); - return Iterables.transform( - sequence, - new Function<String, String>() { - @Override - public String apply(String input) { - return what + input; - } - }); + return Iterables.transform(sequence, input -> what + input); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java index 2d66821..f46aee8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java
@@ -14,10 +14,8 @@ package com.google.devtools.build.lib.rules.objc; -import com.google.common.base.Predicate; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; @@ -69,15 +67,13 @@ + "watch extension for each watch OS version"); } } - - private boolean hasMoreThanOneWatchExtension(Iterable<ObjcProvider> objcProviders, - final Flag watchExtensionVersionFlag) { - return Lists.newArrayList(Iterables.filter(objcProviders, new Predicate<ObjcProvider>() { - @Override - public boolean apply(ObjcProvider objcProvider) { - return objcProvider.is(watchExtensionVersionFlag); - } - })).size() > 1; + + private boolean hasMoreThanOneWatchExtension( + Iterable<ObjcProvider> objcProviders, final Flag watchExtensionVersionFlag) { + return Streams.stream(objcProviders) + .filter(objcProvider -> objcProvider.is(watchExtensionVersionFlag)) + .count() + > 1; } @Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java index ba2ef87..3590f5c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
@@ -666,13 +666,7 @@ */ private static Predicate<Artifact> notContainedIn( final HashSet<Artifact> linkedLibraryArtifacts) { - return new Predicate<Artifact>() { - - @Override - public boolean apply(Artifact libraryToLink) { - return !linkedLibraryArtifacts.contains(libraryToLink); - } - }; + return libraryToLink -> !linkedLibraryArtifacts.contains(libraryToLink); } /** @@ -684,13 +678,7 @@ */ private static Predicate<LibraryToLink> ccLibraryNotYetLinked( final HashSet<Artifact> linkedLibraryArtifacts) { - return new Predicate<LibraryToLink>() { - - @Override - public boolean apply(LibraryToLink libraryToLink) { - return !linkedLibraryArtifacts.contains(libraryToLink.getArtifact()); - } - }; + return libraryToLink -> !linkedLibraryArtifacts.contains(libraryToLink.getArtifact()); } @SuppressWarnings("unchecked") @@ -734,9 +722,7 @@ private final Map<Key<?>, NestedSetBuilder<?>> strictDependencyItems = new HashMap<>(); private static void maybeAddEmptyBuilder(Map<Key<?>, NestedSetBuilder<?>> set, Key<?> key) { - if (!set.containsKey(key)) { - set.put(key, new NestedSetBuilder<>(key.order)); - } + set.computeIfAbsent(key, k -> new NestedSetBuilder<>(k.order)); } @SuppressWarnings({"rawtypes", "unchecked"})
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java index 080716a..35ba9f9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtobufSupport.java
@@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.objc; -import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Optional; import com.google.common.base.Predicates; @@ -567,13 +566,7 @@ Iterable<String> filterLines = Iterables.transform( - protoFilePaths, - new Function<String, String>() { - @Override - public String apply(String protoFilePath) { - return String.format("allowed_file: \"%s\"", protoFilePath); - } - }); + protoFilePaths, protoFilePath -> String.format("allowed_file: \"%s\"", protoFilePath)); return String.format( "# Generated portable filter for %s\n\n", ruleContext.getLabel().getCanonicalForm())
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java index 610f277..d3f8bbf 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtocolBuffers2Support.java
@@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.objc; -import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -40,14 +39,6 @@ private static final String UNIQUE_DIRECTORY_NAME = "_generated_protos"; - private static final Function<Artifact, PathFragment> PARENT_PATHFRAGMENT = - new Function<Artifact, PathFragment>() { - @Override - public PathFragment apply(Artifact input) { - return input.getExecPath().getParentDirectory(); - } - }; - private final RuleContext ruleContext; private final ProtoAttributes attributes; @@ -195,7 +186,8 @@ .add(generatedProtoDir) .addAll( Iterables.transform( - getGeneratedProtoOutputs(getHeaderExtension()), PARENT_PATHFRAGMENT)); + getGeneratedProtoOutputs(getHeaderExtension()), + input -> input.getExecPath().getParentDirectory())); } return searchPathEntriesBuilder.build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/Xcdatamodel.java b/src/main/java/com/google/devtools/build/lib/rules/objc/Xcdatamodel.java index 274bcb2..e4b13c7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/Xcdatamodel.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/Xcdatamodel.java
@@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.objc; -import com.google.common.base.Function; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; @@ -96,11 +95,6 @@ } public static Iterable<Artifact> outputZips(Iterable<Xcdatamodel> models) { - return Iterables.transform(models, new Function<Xcdatamodel, Artifact>() { - @Override - public Artifact apply(Xcdatamodel model) { - return model.getOutputZip(); - } - }); + return Iterables.transform(models, Xcdatamodel::getOutputZip); } }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoSourceFileBlacklist.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoSourceFileBlacklist.java index 7f38142..70f785c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoSourceFileBlacklist.java +++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoSourceFileBlacklist.java
@@ -14,6 +14,7 @@ package com.google.devtools.build.lib.rules.proto; +import static com.google.common.collect.ImmutableSet.toImmutableSet; import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST; import static com.google.devtools.build.lib.packages.Attribute.attr; import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST; @@ -23,7 +24,7 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.cmdline.Label; @@ -46,13 +47,7 @@ private final RuleContext ruleContext; private final ImmutableSet<PathFragment> blacklistProtoFilePaths; - private final Predicate<Artifact> isBlacklistProto = - new Predicate<Artifact>() { - @Override - public boolean apply(Artifact protoFile) { - return isBlacklisted(protoFile); - } - }; + private final Predicate<Artifact> isBlacklistProto = this::isBlacklisted; /** * Creates a proto source file blacklist. @@ -83,7 +78,9 @@ * Filters the blacklisted protos from the given protos. */ public Iterable<Artifact> filter(Iterable<Artifact> protoFiles) { - return ImmutableSet.copyOf(Iterables.filter(protoFiles, Predicates.not(isBlacklistProto))); + return Streams.stream(protoFiles) + .filter(Predicates.not(isBlacklistProto)) + .collect(toImmutableSet()); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyCcLinkParamsProvider.java index 3234520..123444c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PyCcLinkParamsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyCcLinkParamsProvider.java
@@ -36,12 +36,8 @@ } public static final Function<TransitiveInfoCollection, CcLinkParamsStore> TO_LINK_PARAMS = - new Function<TransitiveInfoCollection, CcLinkParamsStore>() { - @Override - public CcLinkParamsStore apply(TransitiveInfoCollection input) { - PyCcLinkParamsProvider provider = input.getProvider( - PyCcLinkParamsProvider.class); - return provider == null ? null : provider.getLinkParams(); - } + input -> { + PyCcLinkParamsProvider provider = input.getProvider(PyCcLinkParamsProvider.class); + return provider == null ? null : provider.getLinkParams(); }; }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonRunfilesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonRunfilesProvider.java index 76d5557..8c6f110 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonRunfilesProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonRunfilesProvider.java
@@ -37,17 +37,12 @@ } /** - * Returns a function that gets the Python runfiles from a {@link TransitiveInfoCollection} or - * the empty runfiles instance if it does not contain that provider. + * Returns a function that gets the Python runfiles from a {@link TransitiveInfoCollection} or the + * empty runfiles instance if it does not contain that provider. */ public static final Function<TransitiveInfoCollection, Runfiles> TO_RUNFILES = - new Function<TransitiveInfoCollection, Runfiles>() { - @Override - public Runfiles apply(TransitiveInfoCollection input) { - PythonRunfilesProvider provider = input.getProvider(PythonRunfilesProvider.class); - return provider == null - ? Runfiles.EMPTY - : provider.getPythonRunfiles(); - } + input -> { + PythonRunfilesProvider provider = input.getProvider(PythonRunfilesProvider.class); + return provider == null ? Runfiles.EMPTY : provider.getPythonRunfiles(); }; }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java index 3182376..5895916 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java
@@ -25,7 +25,6 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; import com.google.common.io.Flushables; import com.google.common.util.concurrent.UncheckedExecutionException; @@ -205,14 +204,11 @@ List<String> rcfileNotes, ExtendedEventHandler eventHandler) throws OptionsParsingException { Function<String, String> commandOptionSourceFunction = - new Function<String, String>() { - @Override - public String apply(String input) { - if (INTERNAL_COMMAND_OPTIONS.contains(input)) { - return "options generated by " + runtime.getProductName() + " launcher"; - } else { - return "command line options"; - } + input -> { + if (INTERNAL_COMMAND_OPTIONS.contains(input)) { + return "options generated by " + runtime.getProductName() + " launcher"; + } else { + return "command line options"; } }; @@ -649,9 +645,10 @@ } } if (unknownConfigs != null && configs != null && configs.size() > knownConfigs.size()) { - Iterables.addAll( - unknownConfigs, - Iterables.filter(configs, Predicates.not(Predicates.in(knownConfigs)))); + configs + .stream() + .filter(Predicates.not(Predicates.in(knownConfigs))) + .forEachOrdered(unknownConfigs::add); } }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java index d66a432..ee54786 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -681,19 +681,17 @@ final Thread mainThread = Thread.currentThread(); final AtomicInteger numInterrupts = new AtomicInteger(); - final Runnable interruptWatcher = new Runnable() { - @Override - public void run() { - int count = 0; - // Not an actual infinite loop because it's run in a daemon thread. - while (true) { - count++; - Uninterruptibles.sleepUninterruptibly(10, TimeUnit.SECONDS); - LOG.warning("Slow interrupt number " + count + " in batch mode"); - ThreadUtils.warnAboutSlowInterrupt(); - } - } - }; + final Runnable interruptWatcher = + () -> { + int count = 0; + // Not an actual infinite loop because it's run in a daemon thread. + while (true) { + count++; + Uninterruptibles.sleepUninterruptibly(10, TimeUnit.SECONDS); + LOG.warning("Slow interrupt number " + count + " in batch mode"); + ThreadUtils.warnAboutSlowInterrupt(); + } + }; new InterruptSignalHandler() { @Override @@ -821,12 +819,7 @@ Iterable<BlazeModule> modules, List<String> args) throws IOException, OptionsParsingException, AbruptExitException { final RPCServer[] rpcServer = new RPCServer[1]; - Runnable prepareForAbruptShutdown = new Runnable() { - @Override - public void run() { - rpcServer[0].prepareForAbruptShutdown(); - } - }; + Runnable prepareForAbruptShutdown = () -> rpcServer[0].prepareForAbruptShutdown(); BlazeRuntime runtime = newRuntime(modules, args, prepareForAbruptShutdown); BlazeCommandDispatcher dispatcher = new BlazeCommandDispatcher(runtime); @@ -870,17 +863,18 @@ parser.parse(OptionPriority.COMMAND_LINE, null, args); Map<String, String> optionSources = parser.getOptions(BlazeServerStartupOptions.class).optionSources; - Function<String, String> sourceFunction = option -> { - if (!optionSources.containsKey(option)) { - return "default"; - } + Function<String, String> sourceFunction = + option -> { + if (!optionSources.containsKey(option)) { + return "default"; + } - if (optionSources.get(option).isEmpty()) { - return "command line"; - } + if (optionSources.get(option).isEmpty()) { + return "command line"; + } - return optionSources.get(option); - }; + return optionSources.get(option); + }; // Then parse the command line again, this time with the correct option sources parser = OptionsParser.newOptionsParser(optionClasses); @@ -1082,12 +1076,7 @@ */ private static void setupUncaughtHandler(final String[] args) { Thread.setDefaultUncaughtExceptionHandler( - new Thread.UncaughtExceptionHandler() { - @Override - public void uncaughtException(Thread thread, Throwable throwable) { - BugReport.handleCrash(throwable, args); - } - }); + (thread, throwable) -> BugReport.handleCrash(throwable, args)); } public String getProductName() {
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java index dc14a2b..f32518a 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
@@ -265,18 +265,19 @@ private ScheduledFuture<?> bepUploadWaitEvent(ScheduledExecutorService executor) { final long startNanos = System.nanoTime(); - return executor.scheduleAtFixedRate(new Runnable() { - @Override - public void run() { - long deltaNanos = System.nanoTime() - startNanos; - long deltaSeconds = TimeUnit.NANOSECONDS.toSeconds(deltaNanos); - Event waitEvt = - of(PROGRESS, null, "Waiting for build event protocol upload: " + deltaSeconds + "s"); - if (reporter != null) { - reporter.handle(waitEvt); - } - } - }, 0, 1, TimeUnit.SECONDS); + return executor.scheduleAtFixedRate( + () -> { + long deltaNanos = System.nanoTime() - startNanos; + long deltaSeconds = TimeUnit.NANOSECONDS.toSeconds(deltaNanos); + Event waitEvt = + of(PROGRESS, null, "Waiting for build event protocol upload: " + deltaSeconds + "s"); + if (reporter != null) { + reporter.handle(waitEvt); + } + }, + 0, + 1, + TimeUnit.SECONDS); } private void close() { @@ -286,14 +287,13 @@ List<ListenableFuture<Void>> closeFutures = new ArrayList<>(transports.size()); for (final BuildEventTransport transport : transports) { ListenableFuture<Void> closeFuture = transport.close(); - closeFuture.addListener(new Runnable() { - @Override - public void run() { - if (reporter != null) { - reporter.post(new BuildEventTransportClosedEvent(transport)); - } - } - }, executor); + closeFuture.addListener( + () -> { + if (reporter != null) { + reporter.post(new BuildEventTransportClosedEvent(transport)); + } + }, + executor); closeFutures.add(closeFuture); }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandNameCacheImpl.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandNameCacheImpl.java index 2ebb359..a0a4b8d 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/CommandNameCacheImpl.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandNameCacheImpl.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.runtime; -import com.google.common.base.Function; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; import com.google.devtools.build.lib.util.Preconditions; @@ -34,13 +33,7 @@ // post-creation. this.commandMap = Maps.transformValues( - commandMap, - new Function<BlazeCommand, Command>() { - @Override - public Command apply(BlazeCommand blazeCommand) { - return blazeCommand.getClass().getAnnotation(Command.class); - } - }); + commandMap, blazeCommand -> blazeCommand.getClass().getAnnotation(Command.class)); } @Override
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java b/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java index 0702fd1..52e25d1 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/CriticalPathComputer.java
@@ -14,6 +14,8 @@ package com.google.devtools.build.lib.runtime; +import static java.util.Comparator.comparingLong; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; import com.google.common.eventbus.Subscribe; @@ -28,7 +30,6 @@ import com.google.devtools.build.lib.util.Preconditions; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.Objects; import java.util.PriorityQueue; import java.util.concurrent.ConcurrentMap; @@ -59,14 +60,8 @@ * <p>This data is a useful metric when running non highly incremental builds, where multiple * tasks could run un parallel and critical path would only record the longest path. */ - private final PriorityQueue<C> slowestComponents = new PriorityQueue<>(SLOWEST_COMPONENTS_SIZE, - new Comparator<C>() { - @Override - public int compare(C o1, C o2) { - return Long.compare(o1.getElapsedTimeNanos(), o2.getElapsedTimeNanos()); - } - } - ); + private final PriorityQueue<C> slowestComponents = + new PriorityQueue<>(SLOWEST_COMPONENTS_SIZE, comparingLong(C::getElapsedTimeNanos)); private final Object lock = new Object();
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java b/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java index 4c3ac45..391a6c1 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/ExperimentalEventHandler.java
@@ -705,21 +705,18 @@ final ExperimentalEventHandler eventHandler = this; updateThread = new Thread( - new Runnable() { - @Override - public void run() { - try { - while (true) { - Thread.sleep(minimalUpdateInterval); - if (lastRefreshMillis < mustRefreshAfterMillis - && mustRefreshAfterMillis < clock.currentTimeMillis()) { - progressBarNeedsRefresh = true; - } - eventHandler.doRefresh(/* fromUpdateThread= */ true); + () -> { + try { + while (true) { + Thread.sleep(minimalUpdateInterval); + if (lastRefreshMillis < mustRefreshAfterMillis + && mustRefreshAfterMillis < clock.currentTimeMillis()) { + progressBarNeedsRefresh = true; } - } catch (InterruptedException e) { - // Ignore + eventHandler.doRefresh(/* fromUpdateThread= */ true); } + } catch (InterruptedException e) { + // Ignore } }); threadToStart = updateThread;
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/GotOptionsEvent.java b/src/main/java/com/google/devtools/build/lib/runtime/GotOptionsEvent.java index 2097884..6d23b67 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/GotOptionsEvent.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/GotOptionsEvent.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.runtime; -import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.buildeventstream.BuildEventConverters; @@ -23,7 +22,6 @@ import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent; import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy; import com.google.devtools.build.lib.util.OptionsUtils; -import com.google.devtools.common.options.OptionsParser.UnparsedOptionValueDescription; import com.google.devtools.common.options.OptionsProvider; import java.util.Collection; import java.util.Objects; @@ -88,25 +86,14 @@ OptionsUtils.asArgumentList( Iterables.filter( options.asListOfExplicitOptions(), - new Predicate<UnparsedOptionValueDescription>() { - @Override - public boolean apply(UnparsedOptionValueDescription input) { - return !Objects.equals(input.getSource(), "default"); - } - }))); + input -> !Objects.equals(input.getSource(), "default")))); options = getOptions(); optionsBuilder.addAllCmdLine(OptionsUtils.asArgumentList(options)); optionsBuilder.addAllExplicitCmdLine( OptionsUtils.asArgumentList( Iterables.filter( options.asListOfExplicitOptions(), - new Predicate<UnparsedOptionValueDescription>() { - @Override - public boolean apply(UnparsedOptionValueDescription input) { - // Source can be null coming from the OptionParser. - return Objects.equals(input.getSource(), "command line options"); - } - }))); + input -> Objects.equals(input.getSource(), "command line options")))); optionsBuilder.setInvocationPolicy(getInvocationPolicy());
diff --git a/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java b/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java index 260273c..032da19 100644 --- a/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java +++ b/src/main/java/com/google/devtools/build/lib/server/GrpcServerImpl.java
@@ -887,19 +887,12 @@ new CommandServerGrpc.CommandServerImplBase() { @Override public void run(final RunRequest request, final StreamObserver<RunResponse> observer) { - final GrpcSink sink = new GrpcSink( - "Run", - (ServerCallStreamObserver<RunResponse>) observer, - streamExecutorPool); + final GrpcSink sink = + new GrpcSink( + "Run", (ServerCallStreamObserver<RunResponse>) observer, streamExecutorPool); // Switch to our own threads so that onReadyStateHandler can be called (see class-level // comment) - commandExecutorPool.execute( - new Runnable() { - @Override - public void run() { - executeCommand(request, observer, sink); - } - }); + commandExecutorPool.execute(() -> executeCommand(request, observer, sink)); } @Override @@ -928,12 +921,7 @@ // Actually performing the cancellation can result in some blocking which we don't want // to do on the dispatcher thread, instead offload to command pool. - commandExecutorPool.execute(new Runnable() { - @Override - public void run() { - doCancel(request, streamObserver); - } - }); + commandExecutorPool.execute(() -> doCancel(request, streamObserver)); } private void doCancel( @@ -958,8 +946,8 @@ streamObserver.onCompleted(); } catch (StatusRuntimeException e) { // There is no one to report the failure to - log.info("Client cancelled RPC of cancellation request for " - + request.getCommandId()); + log.info( + "Client cancelled RPC of cancellation request for " + request.getCommandId()); } } }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalExceptionWithStackTrace.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalExceptionWithStackTrace.java index f9d75bb..713f57f 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/EvalExceptionWithStackTrace.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/EvalExceptionWithStackTrace.java
@@ -130,7 +130,7 @@ private boolean isSameLocation(Location first, Location second) { try { return Objects.equals(first.getPath(), second.getPath()) - && Objects.equals(first.getStartOffset(), second.getStartOffset()); + && first.getStartOffset() == second.getStartOffset(); } catch (NullPointerException ex) { return first == second; }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FunctionSignature.java b/src/main/java/com/google/devtools/build/lib/syntax/FunctionSignature.java index 401b4a3..9b0fb00 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/FunctionSignature.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/FunctionSignature.java
@@ -13,10 +13,11 @@ // limitations under the License. package com.google.devtools.build.lib.syntax; +import static com.google.common.collect.ImmutableList.toImmutableList; + import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; import com.google.common.collect.Interner; -import com.google.common.collect.Lists; import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.syntax.SkylarkList.Tuple; import com.google.devtools.build.lib.util.Preconditions; @@ -159,8 +160,8 @@ /** Intern a list of names */ public static ImmutableList<String> names(List<String> names) { - return namesInterner.intern(ImmutableList.<String>copyOf( - Lists.transform(names, StringCanonicalizer.INTERN))); + return namesInterner.intern( + names.stream().map(StringCanonicalizer::intern).collect(toImmutableList())); } /** Intern a list of names */
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/GlobCriteria.java b/src/main/java/com/google/devtools/build/lib/syntax/GlobCriteria.java index c1bd88b..91979fb 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/GlobCriteria.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/GlobCriteria.java
@@ -14,15 +14,16 @@ package com.google.devtools.build.lib.syntax; +import static com.google.common.collect.ImmutableList.toImmutableList; + import com.google.common.base.Functions; import com.google.common.base.Splitter; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.util.Preconditions; - import java.util.List; - +import java.util.stream.Stream; import javax.annotation.Nullable; /** @@ -90,8 +91,9 @@ public static GlobCriteria createWithAdditionalExcludes(GlobCriteria base, List<String> excludes) { Preconditions.checkArgument(base.isGlob()); - return fromGlobCall(base.include, - ImmutableList.copyOf(Iterables.concat(base.exclude, excludes))); + return fromGlobCall( + base.include, + Stream.concat(base.exclude.stream(), excludes.stream()).collect(toImmutableList())); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/LineNumberTable.java b/src/main/java/com/google/devtools/build/lib/syntax/LineNumberTable.java index d16a83d..eda6609 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/LineNumberTable.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/LineNumberTable.java
@@ -215,11 +215,7 @@ Map<String, PathFragment> pathCache = new HashMap<>(); while (m.find()) { String pathString = m.group(2); - PathFragment pathFragment = pathCache.get(pathString); - if (pathFragment == null) { - pathFragment = defaultPath.getRelative(pathString); - pathCache.put(pathString, pathFragment); - } + PathFragment pathFragment = pathCache.computeIfAbsent(pathString, defaultPath::getRelative); unorderedTable.add(new SingleHashLine( m.start(0) + 1, //offset (+1 to skip \n in pattern) Integer.parseInt(m.group(1)), // line number
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java index 8f466b7..3b1a7c0 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
@@ -14,11 +14,12 @@ package com.google.devtools.build.lib.syntax; +import static java.util.stream.Collectors.joining; + import com.google.common.base.CharMatcher; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; import com.google.devtools.build.lib.collect.nestedset.NestedSet; @@ -2063,39 +2064,48 @@ } }; - @SkylarkSignature(name = "print", returnType = Runtime.NoneType.class, - doc = "Prints <code>args</code> as output. It will be prefixed with the string <code>" - + "\"WARNING\"</code> and the location (file and line number) of this call. It can be " - + "used for debugging." - + "<p>Using <code>print</code> in production code is discouraged due to the spam it " - + "creates for users. For deprecations, prefer a hard error using <a href=\"#fail\">" - + "fail()</a> when possible.", - parameters = { - @Param(name = "sep", type = String.class, defaultValue = "' '", - named = true, positional = false, - doc = "The separator string between the objects, default is space (\" \").")}, - // NB: as compared to Python3, we're missing optional named-only arguments 'end' and 'file' - extraPositionals = @Param(name = "args", doc = "The objects to print."), - useLocation = true, useEnvironment = true) - private static final BuiltinFunction print = new BuiltinFunction("print") { - public Runtime.NoneType invoke(String sep, SkylarkList<?> starargs, - Location loc, Environment env) throws EvalException { - String msg = Joiner.on(sep).join(Iterables.transform(starargs, - new com.google.common.base.Function<Object, String>() { - @Override - public String apply(Object input) { - return Printer.str(input); - }})); - // As part of the integration test "skylark_flag_test.sh", if the - // "--internal_skylark_flag_test_canary" flag is enabled, append an extra marker string to the - // output. - if (env.getSemantics().skylarkFlagTestCanary) { - msg += "<== skylark flag test ==>"; - } - env.handleEvent(Event.warn(loc, msg)); - return Runtime.NONE; - } - }; + @SkylarkSignature( + name = "print", + returnType = Runtime.NoneType.class, + doc = + "Prints <code>args</code> as output. It will be prefixed with the string <code>" + + "\"WARNING\"</code> and the location (file and line number) of this call. It can be " + + "used for debugging." + + "<p>Using <code>print</code> in production code is discouraged due to the spam it " + + "creates for users. For deprecations, prefer a hard error using <a href=\"#fail\">" + + "fail()</a> when possible.", + parameters = { + @Param( + name = "sep", + type = String.class, + defaultValue = "' '", + named = true, + positional = false, + doc = "The separator string between the objects, default is space (\" \")." + ) + }, + // NB: as compared to Python3, we're missing optional named-only arguments 'end' and 'file' + extraPositionals = @Param(name = "args", doc = "The objects to print."), + useLocation = true, + useEnvironment = true + ) + private static final BuiltinFunction print = + new BuiltinFunction("print") { + public Runtime.NoneType invoke( + String sep, SkylarkList<?> starargs, Location loc, Environment env) + throws EvalException { + String msg = starargs.stream().map(Printer::str).collect(joining(sep)); + // As part of the integration test "skylark_flag_test.sh", if the + // "--internal_skylark_flag_test_canary" flag is enabled, append an extra marker string to + // the + // output. + if (env.getSemantics().skylarkFlagTestCanary) { + msg += "<== skylark flag test ==>"; + } + env.handleEvent(Event.warn(loc, msg)); + return Runtime.NONE; + } + }; @SkylarkSignature( name = "zip",
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Mutability.java b/src/main/java/com/google/devtools/build/lib/syntax/Mutability.java index ead4df0..1b00915 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/Mutability.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/Mutability.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.syntax; -import com.google.common.base.Function; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.util.Preconditions; @@ -245,12 +244,8 @@ } if (env.mutability().isLocked(object)) { - Iterable<String> locs = Iterables.transform(env.mutability().getLockLocations(object), - new Function<Location, String>() { - @Override - public String apply(Location loc) { - return loc.print(); - }}); + Iterable<String> locs = + Iterables.transform(env.mutability().getLockLocations(object), Location::print); throw new MutabilityException( "trying to mutate a locked object (is it currently being iterated over by a for loop " + "or comprehension?)\n"
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java index ae97362..f5e5b51 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
@@ -568,7 +568,7 @@ // arg_list ::= ( (arg ',')* arg ','? )? private List<Argument.Passed> parseFuncallArguments() { - List<Argument.Passed> arguments = parseFunctionArguments(() -> parseFuncallArgument()); + List<Argument.Passed> arguments = parseFunctionArguments(this::parseFuncallArgument); try { Argument.validateFuncallArguments(arguments); } catch (Argument.ArgumentException e) { @@ -1306,7 +1306,7 @@ Identifier ident = parseIdent(); expect(TokenKind.LPAREN); List<Parameter<Expression, Expression>> params = - parseFunctionArguments(() -> parseFunctionParameter()); + parseFunctionArguments(this::parseFunctionParameter); FunctionSignature.WithValues<Expression, Expression> signature = functionSignature(params); expect(TokenKind.RPAREN); expect(TokenKind.COLON);
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Runtime.java b/src/main/java/com/google/devtools/build/lib/syntax/Runtime.java index 4280794..8f67212 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/Runtime.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/Runtime.java
@@ -146,9 +146,7 @@ Preconditions.checkArgument(nameSpace.equals(getCanonicalRepresentation(nameSpace))); Preconditions.checkArgument( getCanonicalRepresentation(function.getObjectType()).equals(nameSpace)); - if (!functions.containsKey(nameSpace)) { - functions.put(nameSpace, new HashMap<String, BaseFunction>()); - } + functions.computeIfAbsent(nameSpace, k -> new HashMap<String, BaseFunction>()); functions.get(nameSpace).put(function.getName(), function); }
diff --git a/src/main/java/com/google/devtools/build/lib/util/CommandFailureUtils.java b/src/main/java/com/google/devtools/build/lib/util/CommandFailureUtils.java index ef787de..9fb0c83 100644 --- a/src/main/java/com/google/devtools/build/lib/util/CommandFailureUtils.java +++ b/src/main/java/com/google/devtools/build/lib/util/CommandFailureUtils.java
@@ -14,13 +14,13 @@ package com.google.devtools.build.lib.util; -import com.google.common.collect.Ordering; +import static java.util.Map.Entry.comparingByKey; +import com.google.common.collect.Ordering; import java.io.File; import java.util.Collection; import java.util.Comparator; import java.util.Map; - import javax.annotation.Nullable; /** @@ -127,15 +127,6 @@ private CommandFailureUtils() {} // Prevent instantiation. - private static Comparator<Map.Entry<String, String>> mapEntryComparator = - new Comparator<Map.Entry<String, String>>() { - @Override - public int compare(Map.Entry<String, String> x, Map.Entry<String, String> y) { - // A map can never have two keys with the same value, so we only need to compare the keys. - return x.getKey().compareTo(y.getKey()); - } - }; - /** * Construct a string that describes the command. * Currently this returns a message of the form "foo bar baz", @@ -191,6 +182,8 @@ */ if (environment != null) { describeCommandImpl.describeCommandEnvPrefix(message); + // A map can never have two keys with the same value, so we only need to compare the keys. + Comparator<Map.Entry<String, String>> mapEntryComparator = comparingByKey(); for (Map.Entry<String, String> entry : Ordering.from(mapEntryComparator).sortedCopy(environment.entrySet())) { message.append(" ");
diff --git a/src/main/java/com/google/devtools/build/lib/util/FileType.java b/src/main/java/com/google/devtools/build/lib/util/FileType.java index b984e98..2eef5af 100644 --- a/src/main/java/com/google/devtools/build/lib/util/FileType.java +++ b/src/main/java/com/google/devtools/build/lib/util/FileType.java
@@ -14,18 +14,15 @@ package com.google.devtools.build.lib.util; -import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; - import javax.annotation.concurrent.Immutable; /** @@ -130,14 +127,6 @@ String getFilename(); } - public static final Function<HasFilename, String> TO_FILENAME = - new Function<HasFilename, String>() { - @Override - public String apply(HasFilename input) { - return input.getFilename(); - } - }; - /** * Checks whether an Iterable<? extends HasFileType> contains any of the specified file types. * @@ -167,32 +156,17 @@ private static <T extends HasFilename> Predicate<T> typeMatchingPredicateFor( final FileType matchingType) { - return new Predicate<T>() { - @Override - public boolean apply(T item) { - return matchingType.matches(item.getFilename()); - } - }; + return item -> matchingType.matches(item.getFilename()); } private static <T extends HasFilename> Predicate<T> typeMatchingPredicateFor( final FileTypeSet matchingTypes) { - return new Predicate<T>() { - @Override - public boolean apply(T item) { - return matchingTypes.matches(item.getFilename()); - } - }; + return item -> matchingTypes.matches(item.getFilename()); } private static <T extends HasFilename> Predicate<T> typeMatchingPredicateFrom( final Predicate<String> fileTypePredicate) { - return new Predicate<T>() { - @Override - public boolean apply(T item) { - return fileTypePredicate.apply(item.getFilename()); - } - }; + return item -> fileTypePredicate.apply(item.getFilename()); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/util/Pair.java b/src/main/java/com/google/devtools/build/lib/util/Pair.java index 91d04c6..943f8c9 100644 --- a/src/main/java/com/google/devtools/build/lib/util/Pair.java +++ b/src/main/java/com/google/devtools/build/lib/util/Pair.java
@@ -13,11 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.util; -import com.google.common.base.Function; - -import java.util.Comparator; import java.util.Objects; - import javax.annotation.Nullable; /** @@ -85,40 +81,4 @@ int hash2 = second == null ? 0 : second.hashCode(); return 31 * hash1 + hash2; } - - /** - * A function that maps to the first element in a pair. - */ - public static <A, B> Function<Pair<A, B>, A> firstFunction() { - return new Function<Pair<A, B>, A>() { - @Override - public A apply(Pair<A, B> pair) { - return pair.first; - } - }; - } - - /** - * A function that maps to the second element in a pair. - */ - public static <A, B> Function<Pair<A, B>, B> secondFunction() { - return new Function<Pair<A, B>, B>() { - @Override - public B apply(Pair<A, B> pair) { - return pair.second; - } - }; - } - - /** - * A comparator that compares pairs by comparing the first element. - */ - public static <T extends Comparable<T>, B> Comparator<Pair<T, B>> compareByFirst() { - return new Comparator<Pair<T, B>>() { - @Override - public int compare(Pair<T, B> o1, Pair<T, B> o2) { - return o1.first.compareTo(o2.first); - } - }; - } }
diff --git a/src/main/java/com/google/devtools/build/lib/util/StringCanonicalizer.java b/src/main/java/com/google/devtools/build/lib/util/StringCanonicalizer.java index 8a85097..18ac47a 100644 --- a/src/main/java/com/google/devtools/build/lib/util/StringCanonicalizer.java +++ b/src/main/java/com/google/devtools/build/lib/util/StringCanonicalizer.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.util; -import com.google.common.base.Function; import com.google.common.collect.Interner; import com.google.devtools.build.lib.concurrent.BlazeInterners; @@ -25,14 +24,6 @@ private static final Interner<String> interner = BlazeInterners.newWeakInterner(); - /** Functional interface, for use with e.g. transform */ - public static final Function<String, String> INTERN = new Function<String, String>() { - @Override - public String apply(String x) { - return intern(x); - } - }; - private StringCanonicalizer() { }
diff --git a/src/main/java/com/google/devtools/build/lib/util/StringUtil.java b/src/main/java/com/google/devtools/build/lib/util/StringUtil.java index ff9b61f..567f26f 100644 --- a/src/main/java/com/google/devtools/build/lib/util/StringUtil.java +++ b/src/main/java/com/google/devtools/build/lib/util/StringUtil.java
@@ -13,11 +13,9 @@ // limitations under the License. package com.google.devtools.build.lib.util; -import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; - import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -127,12 +125,7 @@ */ public static Iterable<String> append(Iterable<String> values, final String prefix, final String suffix) { - return Iterables.transform(values, new Function<String, String>() { - @Override - public String apply(String input) { - return prefix + input + suffix; - } - }); + return Iterables.transform(values, input -> prefix + input + suffix); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java b/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java index 5b3bc1e..698b671 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/FileSystemUtils.java
@@ -981,15 +981,13 @@ // (a) name the function, (b) put it in a box and (c) use List not array // because of the generic type. *sigh*. final List<Predicate<Path>> dumpFunction = new ArrayList<>(); - dumpFunction.add(new Predicate<Path>() { - @Override - public boolean apply(Path child) { + dumpFunction.add( + child -> { Path path = child; out.println(" " + path + " (" + path.toDebugString() + ")"); path.applyToChildren(dumpFunction.get(0)); return false; - } - }); + }); fs.getRootDirectory().applyToChildren(dumpFunction.get(0)); }
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/Path.java b/src/main/java/com/google/devtools/build/lib/vfs/Path.java index d5aa5ee..b41589c 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/Path.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/Path.java
@@ -13,9 +13,9 @@ // limitations under the License. package com.google.devtools.build.lib.vfs; +import static com.google.common.collect.ImmutableList.toImmutableList; + import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.util.StringCanonicalizer; @@ -505,7 +505,7 @@ */ public Collection<Path> getDirectoryEntries(Predicate<? super Path> predicate) throws IOException, FileNotFoundException { - return ImmutableList.<Path>copyOf(Iterables.filter(getDirectoryEntries(), predicate)); + return getDirectoryEntries().stream().filter(predicate).collect(toImmutableList()); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java b/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java index caad724..3f5ba0e 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/PathFragment.java
@@ -13,8 +13,9 @@ // limitations under the License. package com.google.devtools.build.lib.vfs; +import static com.google.common.collect.ImmutableSet.toImmutableSet; + import com.google.common.base.Function; -import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; @@ -58,29 +59,8 @@ /** An empty path fragment. */ public static final PathFragment EMPTY_FRAGMENT = create(""); - public static final Function<String, PathFragment> TO_PATH_FRAGMENT = - new Function<String, PathFragment>() { - @Override - public PathFragment apply(String str) { - return create(str); - } - }; - - public static final Predicate<PathFragment> IS_ABSOLUTE = - new Predicate<PathFragment>() { - @Override - public boolean apply(PathFragment input) { - return input.isAbsolute(); - } - }; - - private static final Function<PathFragment, String> TO_SAFE_PATH_STRING = - new Function<PathFragment, String>() { - @Override - public String apply(PathFragment path) { - return path.getSafePathString(); - } - }; + // TODO(laurentlb): Inline this + public static final Function<String, PathFragment> TO_PATH_FRAGMENT = PathFragment::create; /** * A helper object for manipulating the various internal {@link PathFragment} implementations. @@ -332,22 +312,16 @@ * {@code fragments}. */ public static Iterable<String> safePathStrings(Iterable<PathFragment> fragments) { - return Iterables.transform(fragments, TO_SAFE_PATH_STRING); + return Iterables.transform(fragments, PathFragment::getSafePathString); } /** Returns the subset of {@code paths} that start with {@code startingWithPath}. */ - public static ImmutableSet<PathFragment> filterPathsStartingWith(Set<PathFragment> paths, - PathFragment startingWithPath) { - return ImmutableSet.copyOf(Iterables.filter(paths, startsWithPredicate(startingWithPath))); - } - - public static Predicate<PathFragment> startsWithPredicate(final PathFragment prefix) { - return new Predicate<PathFragment>() { - @Override - public boolean apply(PathFragment pathFragment) { - return pathFragment.startsWith(prefix); - } - }; + public static ImmutableSet<PathFragment> filterPathsStartingWith( + Set<PathFragment> paths, PathFragment startingWithPath) { + return paths + .stream() + .filter(pathFragment -> pathFragment.startsWith(startingWithPath)) + .collect(toImmutableSet()); } /**
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/UnixGlob.java b/src/main/java/com/google/devtools/build/lib/vfs/UnixGlob.java index 771b11a..378f727 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/UnixGlob.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/UnixGlob.java
@@ -615,18 +615,16 @@ totalOps.incrementAndGet(); pendingOps.incrementAndGet(); - Runnable wrapped = new Runnable() { - @Override - public void run() { - try { - if (!canceled && failure.get() == null) { - r.run(); + Runnable wrapped = + () -> { + try { + if (!canceled && failure.get() == null) { + r.run(); + } + } finally { + decrementAndCheckDone(); } - } finally { - decrementAndCheckDone(); - } - } - }; + }; if (executor == null) { wrapped.run();
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/ZipFileSystem.java b/src/main/java/com/google/devtools/build/lib/vfs/ZipFileSystem.java index 353a684..5419f7a 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/ZipFileSystem.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/ZipFileSystem.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.vfs; -import com.google.common.base.Predicate; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.vfs.Path.PathFactory; @@ -205,15 +204,14 @@ Preconditions.checkState(open); zipEntryNonNull(path); final Collection<Path> result = new ArrayList<>(); - ((ZipPath) path).applyToChildren(new Predicate<Path>() { - @Override - public boolean apply(Path child) { - if (zipEntry(child) != null) { - result.add(child); - } - return true; - } - }); + ((ZipPath) path) + .applyToChildren( + child -> { + if (zipEntry(child) != null) { + result.add(child); + } + return true; + }); return result; }
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs/InMemoryDirectoryInfo.java b/src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs/InMemoryDirectoryInfo.java index 35a745a..f47eb72 100644 --- a/src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs/InMemoryDirectoryInfo.java +++ b/src/main/java/com/google/devtools/build/lib/vfs/inmemoryfs/InMemoryDirectoryInfo.java
@@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.vfs.inmemoryfs; -import com.google.common.base.Function; import com.google.common.collect.Collections2; import com.google.devtools.build.lib.concurrent.ThreadSafety; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; @@ -29,13 +28,6 @@ */ @ThreadSafe class InMemoryDirectoryInfo extends InMemoryContentInfo { - private static final Function<InMemoryFileName, String> FILENAME_TO_STRING = - new Function<InMemoryFileName, String>() { - @Override - public String apply(InMemoryFileName inMemoryFileName) { - return inMemoryFileName.value; - } - }; private final ConcurrentMap<InMemoryFileName, InMemoryContentInfo> directoryContent = new ConcurrentHashMap<>(); @@ -88,7 +80,8 @@ * changed later. */ Collection<String> getAllChildren() { - return Collections2.transform(directoryContent.keySet(), FILENAME_TO_STRING); + return Collections2.transform( + directoryContent.keySet(), inMemoryFileName -> inMemoryFileName.value); } @Override
diff --git a/src/main/java/com/google/devtools/build/lib/windows/WindowsFileSystem.java b/src/main/java/com/google/devtools/build/lib/windows/WindowsFileSystem.java index 893a563..e1eb08f 100644 --- a/src/main/java/com/google/devtools/build/lib/windows/WindowsFileSystem.java +++ b/src/main/java/com/google/devtools/build/lib/windows/WindowsFileSystem.java
@@ -69,19 +69,15 @@ /** Resolves DOS-style, shortened path names, returning the last segment's long form. */ private static final Function<String, String> WINDOWS_SHORT_PATH_RESOLVER = - new Function<String, String>() { - @Override - @Nullable - public String apply(String path) { - try { - // Since Path objects are created hierarchically, we know for sure that every segment of - // the path, except the last one, is already canonicalized, so we can return just that. - // Plus the returned value is passed to Path.getChild so we must not return a full - // path here. - return PathFragment.create(WindowsFileOperations.getLongPath(path)).getBaseName(); - } catch (IOException e) { - return null; - } + path -> { + try { + // Since Path objects are created hierarchically, we know for sure that every segment of + // the path, except the last one, is already canonicalized, so we can return just that. + // Plus the returned value is passed to Path.getChild so we must not return a full + // path here. + return PathFragment.create(WindowsFileOperations.getLongPath(path)).getBaseName(); + } catch (IOException e) { + return null; } };
diff --git a/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocess.java b/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocess.java index 16f05e4..0aea491 100644 --- a/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocess.java +++ b/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocess.java
@@ -145,15 +145,8 @@ waitLatch = new CountDownLatch(1); // Every Windows process we start consumes a thread here. This is suboptimal, but seems to be // the sanest way to reconcile WaitForMultipleObjects() and Java-style interruption. - @SuppressWarnings("unused") - Future<?> possiblyIgnoredError = - WAITER_POOL.submit( - new Runnable() { - @Override - public void run() { - waiterThreadFunc(); - } - }); + @SuppressWarnings("unused") + Future<?> possiblyIgnoredError = WAITER_POOL.submit(this::waiterThreadFunc); } private void waiterThreadFunc() {