aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2017-08-13 17:15:37 +0200
committerGravatar Irina Iancu <elenairina@google.com>2017-08-14 14:16:14 +0200
commit695320a3cd925b99bf0a95df4452023c6cfa5005 (patch)
treee526aa44040cdaa1041c9306ac98d7577d0e30e2 /src
parent45d195e74ddc3326a660bfde5b55e2183071e86c (diff)
Lazily construct AndroidDeployInfo proto.
RELNOTES: None PiperOrigin-RevId: 165116857
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java34
2 files changed, 26 insertions, 15 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 350317923a..ebec97f3c9 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
@@ -580,18 +580,19 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
filesBuilder.add(zipAlignedApk);
NestedSet<Artifact> filesToBuild = filesBuilder.build();
- Iterable<Artifact> dataDeps = ImmutableList.of();
+ ImmutableList<Artifact> dataDeps = ImmutableList.of();
if (ruleContext.attributes().has("data", BuildType.LABEL_LIST)
&& ruleContext.getAttributeMode("data") == Mode.DATA) {
dataDeps = ruleContext.getPrerequisiteArtifacts("data", Mode.DATA).list();
}
Artifact deployInfo = ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.DEPLOY_INFO);
- AndroidDeployInfoAction.createDeployInfoAction(ruleContext,
+ AndroidDeployInfoAction.createDeployInfoAction(
+ ruleContext,
deployInfo,
resourceApk.getManifest(),
additionalMergedManifests,
- Iterables.concat(ImmutableList.of(zipAlignedApk), apksUnderTest),
+ ImmutableList.<Artifact>builder().add(zipAlignedApk).addAll(apksUnderTest).build(),
dataDeps);
RuleConfiguredTargetBuilder builder =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java
index ba4b09dcaf..91d6fcb21c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeployInfoAction.java
@@ -54,17 +54,28 @@ public final class AndroidDeployInfoAction extends AbstractFileWriteAction {
}
private static final String GUID = "eda283ba-9000-4b80-8dc4-7939101c44ba";
- private final ByteString byteString;
+
+ private final Artifact mergedManifest;
+ private final ImmutableList<Artifact> additionalMergedManifests;
+ private final ImmutableList<Artifact> apksToDeploy;
+ private final ImmutableList<Artifact> dataDeps;
AndroidDeployInfoAction(
ActionOwner owner,
Artifact outputFile,
Artifact mergedManifest,
- Iterable<Artifact> additionalMergedManifests,
- Iterable<Artifact> apksToDeploy,
- Iterable<Artifact> dataDeps) {
+ ImmutableList<Artifact> additionalMergedManifests,
+ ImmutableList<Artifact> apksToDeploy,
+ ImmutableList<Artifact> dataDeps) {
super(owner, makeInputs(mergedManifest, additionalMergedManifests, apksToDeploy, dataDeps),
outputFile, false);
+ this.mergedManifest = mergedManifest;
+ this.additionalMergedManifests = additionalMergedManifests;
+ this.apksToDeploy = apksToDeploy;
+ this.dataDeps = dataDeps;
+ }
+
+ private ByteString getByteString() {
AndroidDeployInfoOuterClass.AndroidDeployInfo.Builder builder =
AndroidDeployInfoOuterClass.AndroidDeployInfo.newBuilder();
builder.setMergedManifest(makeArtifactProto(mergedManifest));
@@ -77,16 +88,16 @@ public final class AndroidDeployInfoAction extends AbstractFileWriteAction {
for (Artifact dataDep : dataDeps) {
builder.addDataToDeploy(makeArtifactProto(dataDep));
}
- this.byteString = builder.build().toByteString();
+ return builder.build().toByteString();
}
static void createDeployInfoAction(
RuleContext ruleContext,
Artifact deployInfo,
Artifact mergedManifest,
- Iterable<Artifact> additionalMergedManifests,
- Iterable<Artifact> apksToDeploy,
- Iterable<Artifact> dataDeps) {
+ ImmutableList<Artifact> additionalMergedManifests,
+ ImmutableList<Artifact> apksToDeploy,
+ ImmutableList<Artifact> dataDeps) {
Action action = new AndroidDeployInfoAction(ruleContext.getActionOwner(),
deployInfo, mergedManifest, additionalMergedManifests, apksToDeploy, dataDeps);
ruleContext.registerAction(action);
@@ -94,12 +105,12 @@ public final class AndroidDeployInfoAction extends AbstractFileWriteAction {
@Override
public DeterministicWriter newDeterministicWriter(ActionExecutionContext ctx) throws IOException {
- return new ByteStringDeterministicWriter(byteString);
+ return new ByteStringDeterministicWriter(getByteString());
}
@VisibleForTesting
public AndroidDeployInfo getDeployInfo() throws InvalidProtocolBufferException {
- return AndroidDeployInfo.parseFrom(byteString);
+ return AndroidDeployInfo.parseFrom(getByteString());
}
@Override
@@ -107,7 +118,7 @@ public final class AndroidDeployInfoAction extends AbstractFileWriteAction {
Fingerprint f = new Fingerprint()
.addString(GUID);
- try (InputStream in = byteString.newInput()) {
+ try (InputStream in = getByteString().newInput()) {
byte[] buffer = new byte[512];
int amountRead;
while ((amountRead = in.read(buffer)) != -1) {
@@ -116,7 +127,6 @@ public final class AndroidDeployInfoAction extends AbstractFileWriteAction {
} catch (IOException e) {
throw new RuntimeException(e);
}
-
return f.hexDigestAndReset();
}