aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google/devtools/build/android/resources/FieldInitializers.java
diff options
context:
space:
mode:
authorGravatar corysmith <corysmith@google.com>2017-05-22 18:40:35 +0200
committerGravatar Irina Iancu <elenairina@google.com>2017-05-23 12:46:00 +0200
commit7cc7ae4a018936e08982fb58fd749dfada37f82e (patch)
tree256c6f29154a61c1992c8887e4d2c11f8aa0a18b /src/tools/android/java/com/google/devtools/build/android/resources/FieldInitializers.java
parentf1c23532d1f05b731f28d2c474ec146e2332606e (diff)
Move the field name out of the FieldInitializer
RELNOTES: None PiperOrigin-RevId: 156747534
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/resources/FieldInitializers.java')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/resources/FieldInitializers.java71
1 files changed, 42 insertions, 29 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/resources/FieldInitializers.java b/src/tools/android/java/com/google/devtools/build/android/resources/FieldInitializers.java
index 45ffadf66d..ae8307ed90 100644
--- a/src/tools/android/java/com/google/devtools/build/android/resources/FieldInitializers.java
+++ b/src/tools/android/java/com/google/devtools/build/android/resources/FieldInitializers.java
@@ -16,65 +16,78 @@ package com.google.devtools.build.android.resources;
import com.android.resources.ResourceType;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.MultimapBuilder;
-import com.google.common.collect.SortedSetMultimap;
+import com.google.common.collect.ImmutableSortedMap;
+import com.google.common.collect.Sets;
import java.util.Collection;
+import java.util.EnumMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.SortedSet;
+import java.util.TreeMap;
/**
* Represents a collection of resource symbols and values suitable for writing java sources and
* classes.
*/
public class FieldInitializers
- implements Iterable<Entry<ResourceType, Collection<FieldInitializer>>> {
+ implements Iterable<Entry<ResourceType, Map<String, FieldInitializer>>> {
- private final Map<ResourceType, Collection<FieldInitializer>> initializers;
+ private final Map<ResourceType, Map<String, FieldInitializer>> initializers;
- private FieldInitializers(Map<ResourceType, Collection<FieldInitializer>> initializers) {
+ private FieldInitializers(Map<ResourceType, Map<String, FieldInitializer>> initializers) {
this.initializers = initializers;
}
/** Creates a {@link FieldInitializers} copying the contents from a {@link Map}. */
public static FieldInitializers copyOf(
- Map<ResourceType, Collection<FieldInitializer>> initializers) {
+ Map<ResourceType, Map<String, FieldInitializer>> initializers) {
return new FieldInitializers(ImmutableMap.copyOf(initializers));
}
- public Iterable<Entry<ResourceType, Collection<FieldInitializer>>> filter(
- FieldInitializers fieldsToWrite) {
- final SortedSetMultimap<ResourceType, FieldInitializer> initializersToWrite =
- MultimapBuilder.enumKeys(ResourceType.class).treeSetValues().build();
-
- // Create a map to filter with.
- final SortedSetMultimap<ResourceType, String> symbolsToWrite =
- MultimapBuilder.enumKeys(ResourceType.class).treeSetValues().build();
- for (Entry<ResourceType, Collection<FieldInitializer>> entry :
- fieldsToWrite.initializers.entrySet()) {
- for (FieldInitializer initializer : entry.getValue()) {
- final SortedSet<String> fieldNames = symbolsToWrite.get(entry.getKey());
- initializer.addTo(fieldNames);
+ public static FieldInitializers mergedFrom(Collection<FieldInitializers> toMerge) {
+ final Map<ResourceType, Map<String, FieldInitializer>> merged =
+ new EnumMap<>(ResourceType.class);
+ for (FieldInitializers mergee : toMerge) {
+ for (Entry<ResourceType, Map<String, FieldInitializer>> entry : mergee) {
+ final Map<String, FieldInitializer> fieldMap =
+ merged.containsKey(entry.getKey())
+ ? merged.get(entry.getKey())
+ : new TreeMap<String, FieldInitializer>();
+ merged.put(entry.getKey(), fieldMap);
+ for (Entry<String, FieldInitializer> field : entry.getValue().entrySet()) {
+ fieldMap.put(field.getKey(), field.getValue());
+ }
}
}
+ return copyOf(merged);
+ }
- for (Entry<ResourceType, Collection<String>> entry : symbolsToWrite.asMap().entrySet()) {
- // Resource type may be missing if resource overriding eliminates resources at the binary
- // level, which were originally present at the library level.
+ public Iterable<Entry<ResourceType, Map<String, FieldInitializer>>> filter(
+ FieldInitializers fieldsToWrite) {
+ Map<ResourceType, Map<String, FieldInitializer>> initializersToWrite =
+ new EnumMap<>(ResourceType.class);
+
+ for (Entry<ResourceType, Map<String, FieldInitializer>> entry :
+ fieldsToWrite.initializers.entrySet()) {
if (initializers.containsKey(entry.getKey())) {
- for (FieldInitializer field : initializers.get(entry.getKey())) {
- if (field.nameIsIn(entry.getValue())) {
- initializersToWrite.put(entry.getKey(), field);
- }
+ final Map<String, FieldInitializer> valueFields = initializers.get(entry.getKey());
+ final ImmutableMap.Builder<String, FieldInitializer> fields =
+ ImmutableSortedMap.naturalOrder();
+ // Resource type may be missing if resource overriding eliminates resources at the binary
+ // level, which were originally present at the library level.
+ for (String fieldName :
+ Sets.intersection(entry.getValue().keySet(), valueFields.keySet())) {
+ fields.put(fieldName, valueFields.get(fieldName));
}
+ initializersToWrite.put(entry.getKey(), fields.build());
}
}
- return initializersToWrite.asMap().entrySet();
+
+ return initializersToWrite.entrySet();
}
@Override
- public Iterator<Entry<ResourceType, Collection<FieldInitializer>>> iterator() {
+ public Iterator<Entry<ResourceType, Map<String, FieldInitializer>>> iterator() {
return initializers.entrySet().iterator();
}