aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-01-16 14:19:51 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-16 14:27:27 -0800
commitda59188963e739fe3d00e096ae2f1d88546422e3 (patch)
tree2af702813563a501fb8bf305eeb5676c87b20d80 /src/tools/android/java/com/google/devtools/build
parent19044cfd268dff2321bd624315912bdbda2e4576 (diff)
Fix parsing for public.xml file when using aapt2.
RELNOTES: none PiperOrigin-RevId: 182110722
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/AndroidCompiledDataDeserializer.java40
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/DataResourceXml.java45
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/xml/PublicXmlResourceValue.java6
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/xml/SimpleXmlResourceValue.java20
4 files changed, 77 insertions, 34 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/AndroidCompiledDataDeserializer.java b/src/tools/android/java/com/google/devtools/build/android/AndroidCompiledDataDeserializer.java
index 232eaa5576..3bf3407ae6 100644
--- a/src/tools/android/java/com/google/devtools/build/android/AndroidCompiledDataDeserializer.java
+++ b/src/tools/android/java/com/google/devtools/build/android/AndroidCompiledDataDeserializer.java
@@ -21,6 +21,7 @@ import com.android.aapt.Resources.Package;
import com.android.aapt.Resources.ResourceTable;
import com.android.aapt.Resources.Type;
import com.android.aapt.Resources.Value;
+import com.android.aapt.Resources.Visibility.Level;
import com.android.resources.ResourceType;
import com.google.common.base.Preconditions;
import com.google.common.base.Stopwatch;
@@ -104,26 +105,41 @@ public class AndroidCompiledDataDeserializer implements AndroidDataDeserializer
ResourceType resourceType = ResourceType.getEnum(resourceFormatType.getName());
for (Resources.Entry resource : resourceFormatType.getEntryList()) {
- Value resourceValue = resource.getConfigValue(0).getValue();
String resourceName = packageName + resource.getName();
- List<ConfigValue> configValues = resource.getConfigValueList();
-
- Preconditions.checkArgument(configValues.size() == 1);
- int sourceIndex = configValues.get(0).getValue().getSource().getPathIdx();
-
- String source = sourcePool.get(sourceIndex);
- DataSource dataSource = DataSource.of(Paths.get(source));
FullyQualifiedName fqn = fqnFactory.create(resourceType, resourceName);
fullyQualifiedNames.put(
- packageName + resourceType + "/" + resource.getName(),
+ String.format("%s%s/%s", packageName, resourceType, resource.getName()),
new SimpleEntry<FullyQualifiedName, Boolean>(fqn, packageName.isEmpty()));
- if (packageName.isEmpty()) {
+ List<ConfigValue> configValues = resource.getConfigValueList();
+ if (configValues.isEmpty()
+ && resource.getVisibility().getLevel() == Level.PUBLIC) {
+ int sourceIndex = resource.getVisibility().getSource().getPathIdx();
+
+ String source = sourcePool.get(sourceIndex);
+ DataSource dataSource = DataSource.of(Paths.get(source));
+
+ DataResourceXml dataResourceXml = DataResourceXml
+ .fromPublic(dataSource, resourceType, resource.getEntryId().getId());
+ consumers.combiningConsumer.accept(fqn, dataResourceXml);
+ } else if (packageName.isEmpty()) {// This means this resource is not in the android sdk
+ Preconditions.checkArgument(configValues.size() == 1);
+ int sourceIndex =
+ configValues.get(0)
+ .getValue()
+ .getSource()
+ .getPathIdx();
+
+ String source = sourcePool.get(sourceIndex);
+ DataSource dataSource = DataSource.of(Paths.get(source));
+
+ Value resourceValue = resource.getConfigValue(0).getValue();
DataResourceXml dataResourceXml =
- DataResourceXml.from(resourceValue, dataSource, resourceType, fullyQualifiedNames);
+ DataResourceXml
+ .from(resourceValue, dataSource, resourceType, fullyQualifiedNames);
+
if (resourceType == ResourceType.ID
- || resourceType == ResourceType.PUBLIC
|| resourceType == ResourceType.STYLEABLE) {
consumers.combiningConsumer.accept(fqn, dataResourceXml);
} else {
diff --git a/src/tools/android/java/com/google/devtools/build/android/DataResourceXml.java b/src/tools/android/java/com/google/devtools/build/android/DataResourceXml.java
index e26a7a87bd..62993e35c6 100644
--- a/src/tools/android/java/com/google/devtools/build/android/DataResourceXml.java
+++ b/src/tools/android/java/com/google/devtools/build/android/DataResourceXml.java
@@ -170,6 +170,20 @@ public class DataResourceXml implements DataResource {
source, valueFromProto(xmlValue), Namespaces.from(xmlValue.getNamespace()));
}
+ public static DataResourceXml from(
+ Value protoValue,
+ DataSource source,
+ ResourceType resourceType,
+ Map<String, Entry<FullyQualifiedName, Boolean>> fullyQualifiedNames)
+ throws InvalidProtocolBufferException {
+ DataResourceXml dataResourceXml =
+ createWithNamespaces(
+ source,
+ valueFromProto(protoValue, resourceType, fullyQualifiedNames),
+ Namespaces.empty());
+ return dataResourceXml;
+ }
+
private static XmlResourceValue valueFromProto(SerializeFormat.DataValueXml proto)
throws InvalidProtocolBufferException {
Preconditions.checkArgument(proto.hasType());
@@ -197,20 +211,6 @@ public class DataResourceXml implements DataResource {
}
}
- public static DataResourceXml from(
- Value protoValue,
- DataSource source,
- ResourceType resourceType,
- Map<String, Entry<FullyQualifiedName, Boolean>> fullyQualifiedNames)
- throws InvalidProtocolBufferException {
- DataResourceXml dataResourceXml =
- createWithNamespaces(
- source,
- valueFromProto(protoValue, resourceType, fullyQualifiedNames),
- Namespaces.empty());
- return dataResourceXml;
- }
-
private static XmlResourceValue valueFromProto(
Value proto,
ResourceType resourceType,
@@ -225,8 +225,6 @@ public class DataResourceXml implements DataResource {
return PluralXmlResourceValue.from(proto);
case ATTR:
return AttrXmlResourceValue.from(proto);
- case PUBLIC:
- throw new RuntimeException();
case STYLEABLE:
return StyleableXmlResourceValue.from(proto, fullyQualifiedNames);
case ID:
@@ -254,6 +252,13 @@ public class DataResourceXml implements DataResource {
}
}
+ public static DataResourceXml fromPublic(DataSource source, ResourceType resourceType, int id) {
+ DataResourceXml dataResourceXml =
+ createWithNamespaces(
+ source, PublicXmlResourceValue.from(resourceType, id), Namespaces.empty());
+ return dataResourceXml;
+ }
+
private static XmlResourceValue parseXmlElements(
ResourceType resourceType,
XMLEventReader eventReader,
@@ -325,15 +330,15 @@ public class DataResourceXml implements DataResource {
return createWithNamespaces(sourcePath, xml, ImmutableMap.<String, String>of());
}
+ public static DataResourceXml createWithNoNamespace(DataSource source, XmlResourceValue xml) {
+ return new DataResourceXml(source, xml, Namespaces.empty());
+ }
+
public static DataResourceXml createWithNamespaces(
Path sourcePath, XmlResourceValue xml, ImmutableMap<String, String> prefixToUri) {
return createWithNamespaces(sourcePath, xml, Namespaces.from(prefixToUri));
}
- public static DataResourceXml createWithNoNamespace(DataSource source, XmlResourceValue xml) {
- return new DataResourceXml(source, xml, Namespaces.empty());
- }
-
public static DataResourceXml createWithNamespaces(
DataSource source, XmlResourceValue xml, Namespaces namespaces) {
return new DataResourceXml(source, xml, namespaces);
diff --git a/src/tools/android/java/com/google/devtools/build/android/xml/PublicXmlResourceValue.java b/src/tools/android/java/com/google/devtools/build/android/xml/PublicXmlResourceValue.java
index b513cf4beb..af4184d88a 100644
--- a/src/tools/android/java/com/google/devtools/build/android/xml/PublicXmlResourceValue.java
+++ b/src/tools/android/java/com/google/devtools/build/android/xml/PublicXmlResourceValue.java
@@ -132,6 +132,12 @@ public class PublicXmlResourceValue implements XmlResourceValue {
return of(typeToId.build());
}
+ public static XmlResourceValue from(ResourceType resourceType, int id) {
+ ImmutableMap.Builder<ResourceType, Optional<Integer>> typeToId = ImmutableMap.builder();
+ typeToId.put(resourceType, Optional.of(id));
+ return of(typeToId.build());
+ }
+
@Override
public int serializeTo(int sourceId, Namespaces namespaces, OutputStream output)
throws IOException {
diff --git a/src/tools/android/java/com/google/devtools/build/android/xml/SimpleXmlResourceValue.java b/src/tools/android/java/com/google/devtools/build/android/xml/SimpleXmlResourceValue.java
index cab46c7186..32147cd49c 100644
--- a/src/tools/android/java/com/google/devtools/build/android/xml/SimpleXmlResourceValue.java
+++ b/src/tools/android/java/com/google/devtools/build/android/xml/SimpleXmlResourceValue.java
@@ -60,8 +60,10 @@ public class SimpleXmlResourceValue implements XmlResourceValue {
static final QName TAG_INTEGER = QName.valueOf("integer");
static final QName TAG_ITEM = QName.valueOf("item");
static final QName TAG_LAYOUT = QName.valueOf("layout");
+ static final QName TAG_MENU = QName.valueOf("menu");
static final QName TAG_MIPMAP = QName.valueOf("mipmap");
static final QName TAG_PUBLIC = QName.valueOf("public");
+ static final QName TAG_RAW = QName.valueOf("raw");
static final QName TAG_STRING = QName.valueOf("string");
/** Provides an enumeration resource type and simple value validation. */
@@ -118,14 +120,21 @@ public class SimpleXmlResourceValue implements XmlResourceValue {
LAYOUT(TAG_LAYOUT) {
@Override
public boolean validate(String value) {
- // TODO(corysmith): Validate the item type.
+ // TODO(corysmith): Validate the layout type.
+ return true;
+ }
+ },
+ MENU(TAG_MENU) {
+ @Override
+ public boolean validate(String value) {
+ // TODO(corysmith): Validate the menu type.
return true;
}
},
MIPMAP(TAG_MIPMAP) {
@Override
public boolean validate(String value) {
- // TODO(corysmith): Validate the item type.
+ // TODO(corysmith): Validate the mipmap type.
return true;
}
},
@@ -136,6 +145,13 @@ public class SimpleXmlResourceValue implements XmlResourceValue {
return true;
}
},
+ RAW(TAG_RAW) {
+ @Override
+ public boolean validate(String value) {
+ // TODO(corysmith): Validate the raw type.
+ return true;
+ }
+ },
STRING(TAG_STRING) {
@Override
public boolean validate(String value) {