diff options
author | 2016-04-19 22:07:47 +0000 | |
---|---|---|
committer | 2016-04-20 11:17:11 +0000 | |
commit | 66cf13874a3c8f866aeace2d59231e30ca4a5032 (patch) | |
tree | e926e87be0c3f8ff8322cd2be20e5a534085010f /src/tools/android/java/com/google/devtools/build/android/UnwrittenMergedAndroidData.java | |
parent | 9b35d8a81b0d5cb92a22e7d9c7bf30a834711d7f (diff) |
4 of 5: Serialization of UnwrittenMergedAndroidData.
Adding AndroidDataSerializer, the serialize_format proto, and KeyValueConsumers (utility class for keeping consumers straight).
The serializtion is a bit more manual as previous experience has proven to me that simply writing all the resources into a proto map and pulling them out is not performant in the least. So, the serializer stores each message independent, the keys and then the values allowing for potential lazy loading and other optimizations in the future.
Also adds tests for parsing and writing style resources.
--
MOS_MIGRATED_REVID=120274904
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/UnwrittenMergedAndroidData.java')
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/UnwrittenMergedAndroidData.java | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/UnwrittenMergedAndroidData.java b/src/tools/android/java/com/google/devtools/build/android/UnwrittenMergedAndroidData.java index 633bd9403a..61248d031f 100644 --- a/src/tools/android/java/com/google/devtools/build/android/UnwrittenMergedAndroidData.java +++ b/src/tools/android/java/com/google/devtools/build/android/UnwrittenMergedAndroidData.java @@ -28,7 +28,7 @@ public class UnwrittenMergedAndroidData { private final Path manifest; private final ParsedAndroidData primary; - private final ParsedAndroidData deps; + private final ParsedAndroidData transitive; public static UnwrittenMergedAndroidData of( Path manifest, ParsedAndroidData resources, ParsedAndroidData deps) { @@ -36,14 +36,15 @@ public class UnwrittenMergedAndroidData { } private UnwrittenMergedAndroidData( - Path manifest, ParsedAndroidData primary, ParsedAndroidData deps) { + Path manifest, ParsedAndroidData primary, ParsedAndroidData transitive) { this.manifest = manifest; this.primary = primary; - this.deps = deps; + this.transitive = transitive; } /** * Writes the android data to the filesystem. + * * @param mergedDataWriter Destination writer. * @return A MergedAndroidData that is ready for further tool processing. * @throws IOException when something goes wrong while writing. @@ -51,7 +52,7 @@ public class UnwrittenMergedAndroidData { public MergedAndroidData write(AndroidDataWriter mergedDataWriter) throws IOException { try { writeParsedAndroidData(primary, mergedDataWriter); - writeParsedAndroidData(deps, mergedDataWriter); + writeParsedAndroidData(transitive, mergedDataWriter); return new MergedAndroidData( mergedDataWriter.resourceDirectory(), mergedDataWriter.assetDirectory(), @@ -84,7 +85,7 @@ public class UnwrittenMergedAndroidData { return MoreObjects.toStringHelper(this) .add("manifest", manifest) .add("primary", primary) - .add("deps", deps) + .add("transitive", transitive) .toString(); } @@ -99,12 +100,12 @@ public class UnwrittenMergedAndroidData { UnwrittenMergedAndroidData that = (UnwrittenMergedAndroidData) other; return Objects.equals(manifest, that.manifest) && Objects.equals(primary, that.primary) - && Objects.equals(deps, that.deps); + && Objects.equals(transitive, that.transitive); } @Override public int hashCode() { - return Objects.hash(manifest, primary, deps); + return Objects.hash(manifest, primary, transitive); } @VisibleForTesting @@ -118,7 +119,24 @@ public class UnwrittenMergedAndroidData { } @VisibleForTesting - ParsedAndroidData getDeps() { - return deps; + ParsedAndroidData getTransitive() { + return transitive; + } + + public void serializeTo(AndroidDataSerializer serializer) { + serializer.serializeManifest(manifest); + for (Entry<DataKey, DataAsset> entry : primary.iterateAssetEntries()) { + serializer.serializeToPrimary(entry.getKey(), entry.getValue()); + } + for (Entry<DataKey, DataResource> entry : primary.iterateDataResourceEntries()) { + serializer.serializeToPrimary(entry.getKey(), entry.getValue()); + } + + for (Entry<DataKey, DataAsset> entry : transitive.iterateAssetEntries()) { + serializer.serializeToTransitive(entry.getKey(), entry.getValue()); + } + for (Entry<DataKey, DataResource> entry : transitive.iterateDataResourceEntries()) { + serializer.serializeToTransitive(entry.getKey(), entry.getValue()); + } } } |