aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar mjhalupka <mjhalupka@google.com>2018-06-13 15:48:48 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-13 15:50:10 -0700
commited1e7594b23100f89755491f36e46886b4a51c8d (patch)
tree12579d70fdd0454ff559cb4959a16a11238e2e3f /src/main/java/com/google
parentfc83d753cf033f5906565b2eea13fbd8f2bdfb86 (diff)
Reconvert the lambdas in AndroidDataConverter to anonymous inner classes.
Tag some static members with @AutoCodec. Replace some lambdas with explicit functions or classes. PiperOrigin-RevId: 200467500
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataConverter.java44
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java34
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java25
4 files changed, 85 insertions, 29 deletions
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 e6a1261d92..d78ba32791 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
@@ -29,6 +29,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
+import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact;
import com.google.devtools.build.lib.actions.CommandLine;
import com.google.devtools.build.lib.actions.FailAction;
import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
@@ -50,6 +51,7 @@ import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorAr
import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.actions.SpawnActionTemplate;
+import com.google.devtools.build.lib.analysis.actions.SpawnActionTemplate.OutputPathMapper;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.whitelisting.Whitelist;
import com.google.devtools.build.lib.cmdline.Label;
@@ -1370,7 +1372,14 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
new SpawnActionTemplate.Builder(inputTree, outputTree)
.setExecutable(ruleContext.getExecutablePrerequisite("$dexmerger", Mode.HOST))
.setMnemonics("DexShardsToMerge", "DexMerger")
- .setOutputPathMapper(input -> input.getParentRelativePath());
+ .setOutputPathMapper(
+ // Use an anonymous inner class for serialization.
+ new OutputPathMapper() {
+ @Override
+ public PathFragment parentRelativeOutputPath(TreeFileArtifact input) {
+ return input.getParentRelativePath();
+ }
+ });
CustomCommandLine.Builder commandLine =
CustomCommandLine.builder()
.addPlaceholderTreeArtifactExecPath("--input", inputTree)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataConverter.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataConverter.java
index 28d242c033..0db9971af0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataConverter.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataConverter.java
@@ -19,6 +19,7 @@ import com.google.devtools.build.lib.actions.CommandLineItem.ParametrizedMapFn;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.errorprone.annotations.CompileTimeConstant;
import java.util.Objects;
@@ -37,6 +38,7 @@ public class AndroidDataConverter<T> extends ParametrizedMapFn<T> {
* Converts Android data to the "SerializedAndroidData" format used by the Android data processing
* actions.
*/
+ @AutoCodec
static final AndroidDataConverter<MergableAndroidData> MERGABLE_DATA_CONVERTER =
AndroidDataConverter.<MergableAndroidData>builder(JoinerType.SEMICOLON_AMPERSAND)
.withRoots(MergableAndroidData::getResourceRoots)
@@ -137,24 +139,54 @@ public class AndroidDataConverter<T> extends ParametrizedMapFn<T> {
}
Builder<T> withRoots(Function<T, ImmutableList<PathFragment>> rootsFunction) {
- return with(t -> rootsToString(rootsFunction.apply(t)));
+ // Anonymous inner class for serialization.
+ return with(
+ new Function<T, String>() {
+ @Override
+ public String apply(T t) {
+ // Copied from rootsToString to get rid of internal Lambda.
+ return rootsFunction
+ .apply(t)
+ .stream()
+ .map(PathFragment::toString)
+ .collect(Collectors.joining("#"));
+ }
+ });
}
Builder<T> withArtifact(Function<T, Artifact> artifactFunction) {
- return with(t -> artifactFunction.apply(t).getExecPathString());
+ // Anonymous inner class for serialization.
+ return with(
+ new Function<T, String>() {
+ @Override
+ public String apply(T t) {
+ return artifactFunction.apply(t).getExecPathString();
+ }
+ });
}
Builder<T> maybeWithArtifact(Function<T, Artifact> nullableArtifactFunction) {
+ // Anonymous inner class for serialization.
return with(
- t -> {
- @Nullable Artifact artifact = nullableArtifactFunction.apply(t);
- return artifact == null ? "" : artifact.getExecPathString();
+ new Function<T, String>() {
+ @Override
+ public String apply(T t) {
+ @Nullable Artifact artifact = nullableArtifactFunction.apply(t);
+ return artifact == null ? "" : artifact.getExecPathString();
+ }
});
}
Builder<T> withLabel(Function<T, Label> labelFunction) {
// Escape labels, since they are known to contain separating characters (specifically, ':').
- return with(t -> joinerType.escape(labelFunction.apply(t).toString()));
+ // Anonymous inner class for serialization.
+ return with(
+ new Function<T, String>() {
+ @Override
+ public String apply(T t) {
+ return joinerType.escape(labelFunction.apply(t).toString());
+ }
+ });
}
Builder<T> with(Function<T, String> stringFunction) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
index af7189353d..e289c7e319 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java
@@ -18,13 +18,16 @@ import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion;
import com.google.devtools.build.lib.rules.android.AndroidDataConverter.JoinerType;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import java.util.Collections;
import java.util.List;
/** Builder for creating resource processing action. */
public class AndroidResourcesProcessorBuilder {
- private static final AndroidDataConverter<ParsedAndroidAssets> AAPT2_ASSET_DEP_TO_ARG =
+ @AutoCodec @VisibleForSerialization
+ static final AndroidDataConverter<ParsedAndroidAssets> AAPT2_ASSET_DEP_TO_ARG =
AndroidDataConverter.<ParsedAndroidAssets>builder(JoinerType.SEMICOLON_AMPERSAND)
.withRoots(ParsedAndroidAssets::getResourceRoots)
.withRoots(ParsedAndroidAssets::getAssetRoots)
@@ -32,7 +35,8 @@ public class AndroidResourcesProcessorBuilder {
.withArtifact(ParsedAndroidAssets::getSymbols)
.build();
- private static final AndroidDataConverter<ParsedAndroidAssets> AAPT2_ASSET_DEP_TO_ARG_NO_PARSE =
+ @AutoCodec @VisibleForSerialization
+ static final AndroidDataConverter<ParsedAndroidAssets> AAPT2_ASSET_DEP_TO_ARG_NO_PARSE =
AndroidDataConverter.<ParsedAndroidAssets>builder(JoinerType.SEMICOLON_AMPERSAND)
.withRoots(ParsedAndroidAssets::getResourceRoots)
.withRoots(ParsedAndroidAssets::getAssetRoots)
@@ -40,7 +44,8 @@ public class AndroidResourcesProcessorBuilder {
.withArtifact(ParsedAndroidAssets::getCompiledSymbols)
.build();
- private static final AndroidDataConverter<ValidatedAndroidData> AAPT2_RESOURCE_DEP_TO_ARG =
+ @AutoCodec @VisibleForSerialization
+ static final AndroidDataConverter<ValidatedAndroidData> AAPT2_RESOURCE_DEP_TO_ARG =
AndroidDataConverter.<ValidatedAndroidData>builder(JoinerType.COLON_COMMA)
.withRoots(ValidatedAndroidData::getResourceRoots)
.withRoots(ValidatedAndroidData::getAssetRoots)
@@ -50,17 +55,18 @@ public class AndroidResourcesProcessorBuilder {
.maybeWithArtifact(ValidatedAndroidData::getSymbols)
.build();
- private static final AndroidDataConverter<ValidatedAndroidData>
- AAPT2_RESOURCE_DEP_TO_ARG_NO_PARSE =
- AndroidDataConverter.<ValidatedAndroidData>builder(JoinerType.COLON_COMMA)
- .withRoots(ValidatedAndroidData::getResourceRoots)
- .withRoots(ValidatedAndroidData::getAssetRoots)
- .withArtifact(ValidatedAndroidData::getManifest)
- .maybeWithArtifact(ValidatedAndroidData::getAapt2RTxt)
- .maybeWithArtifact(ValidatedAndroidData::getCompiledSymbols)
- .build();
-
- private static final AndroidDataConverter<ValidatedAndroidData> RESOURCE_DEP_TO_ARG =
+ @AutoCodec @VisibleForSerialization
+ static final AndroidDataConverter<ValidatedAndroidData> AAPT2_RESOURCE_DEP_TO_ARG_NO_PARSE =
+ AndroidDataConverter.<ValidatedAndroidData>builder(JoinerType.COLON_COMMA)
+ .withRoots(ValidatedAndroidData::getResourceRoots)
+ .withRoots(ValidatedAndroidData::getAssetRoots)
+ .withArtifact(ValidatedAndroidData::getManifest)
+ .maybeWithArtifact(ValidatedAndroidData::getAapt2RTxt)
+ .maybeWithArtifact(ValidatedAndroidData::getCompiledSymbols)
+ .build();
+
+ @AutoCodec @VisibleForSerialization
+ static final AndroidDataConverter<ValidatedAndroidData> RESOURCE_DEP_TO_ARG =
AndroidDataConverter.<ValidatedAndroidData>builder(JoinerType.COLON_COMMA)
.withRoots(ValidatedAndroidData::getResourceRoots)
.withRoots(ValidatedAndroidData::getAssetRoots)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java
index c4e33f1eee..7798f019b2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java
@@ -16,16 +16,21 @@ package com.google.devtools.build.lib.rules.android;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion;
import com.google.devtools.build.lib.rules.android.AndroidDataConverter.JoinerType;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import java.util.function.Function;
/** Builds up the spawn action for $android_rclass_generator. */
public class RClassGeneratorActionBuilder {
- private static final AndroidDataConverter<ValidatedAndroidData> AAPT_CONVERTER =
+ @AutoCodec @VisibleForSerialization
+ static final AndroidDataConverter<ValidatedAndroidData> AAPT_CONVERTER =
AndroidDataConverter.<ValidatedAndroidData>builder(JoinerType.COLON_COMMA)
.with(chooseDepsToArg(AndroidAaptVersion.AAPT))
.build();
- private static final AndroidDataConverter<ValidatedAndroidData> AAPT2_CONVERTER =
+
+ @AutoCodec @VisibleForSerialization
+ static final AndroidDataConverter<ValidatedAndroidData> AAPT2_CONVERTER =
AndroidDataConverter.<ValidatedAndroidData>builder(JoinerType.COLON_COMMA)
.with(chooseDepsToArg(AndroidAaptVersion.AAPT2))
.build();
@@ -92,12 +97,16 @@ public class RClassGeneratorActionBuilder {
private static Function<ValidatedAndroidData, String> chooseDepsToArg(
final AndroidAaptVersion version) {
- return container -> {
- Artifact rTxt =
- version == AndroidAaptVersion.AAPT2 ? container.getAapt2RTxt() : container.getRTxt();
- return (rTxt != null ? rTxt.getExecPath() : "")
- + ","
- + (container.getManifest() != null ? container.getManifest().getExecPath() : "");
+ // Use an anonymous inner class for serialization.
+ return new Function<ValidatedAndroidData, String>() {
+ @Override
+ public String apply(ValidatedAndroidData container) {
+ Artifact rTxt =
+ version == AndroidAaptVersion.AAPT2 ? container.getAapt2RTxt() : container.getRTxt();
+ return (rTxt != null ? rTxt.getExecPath() : "")
+ + ","
+ + (container.getManifest() != null ? container.getManifest().getExecPath() : "");
+ }
};
}
}