[ApiModel] Iterate through members to find correct member count
Bug: 193414255
Bug: 188388130
Change-Id: Ie6ec229e35ac53bb0d995f7d6c219c32ba5b9b3a
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiDatabaseBuilderGenerator.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiDatabaseBuilderGenerator.java
index 9aa8f4d..17b6486 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiDatabaseBuilderGenerator.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiDatabaseBuilderGenerator.java
@@ -179,7 +179,7 @@
private static MethodTransformer getGetMemberCountTransformer(ParsedApiClass apiClass) {
return replaceCode(
"placeHolderForGetMemberCount",
- transformer -> transformer.visitLdcInsn(apiClass.getMemberCount()));
+ transformer -> transformer.visitLdcInsn(apiClass.getTotalMemberCount()));
}
// The transformer below changes AndroidApiDatabaseClassTemplate.visitFields from:
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiDatabaseBuilderGeneratorTest.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiDatabaseBuilderGeneratorTest.java
index 6d46bfd..2ad1e72 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiDatabaseBuilderGeneratorTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiDatabaseBuilderGeneratorTest.java
@@ -237,7 +237,7 @@
apiClass -> {
expected.add(apiClass.getClassReference().getDescriptor());
expected.add(apiClass.getApiLevel().getName());
- expected.add(apiClass.getMemberCount() + "");
+ expected.add(apiClass.getTotalMemberCount() + "");
BooleanBox added = new BooleanBox(false);
apiClass.visitFieldReferences(
(apiLevel, fieldReferences) -> {
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
index dbb71d3..4002bf9 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
@@ -148,8 +148,19 @@
return apiLevel;
}
- public int getMemberCount() {
- return fieldReferences.size() + methodReferences.size();
+ /**
+ * getMemberCount() returns the total number of members present on the max api level, that is it
+ * is the disjoint union of all members for all api levels.
+ */
+ public int getTotalMemberCount() {
+ int count = 0;
+ for (List<FieldReference> value : fieldReferences.values()) {
+ count += value.size();
+ }
+ for (List<MethodReference> value : methodReferences.values()) {
+ count += value.size();
+ }
+ return count;
}
private void register(FieldReference reference, AndroidApiLevel apiLevel) {
diff --git a/third_party/android_jar/api-database.tar.gz.sha1 b/third_party/android_jar/api-database.tar.gz.sha1
index 6336e23..97d5f12 100644
--- a/third_party/android_jar/api-database.tar.gz.sha1
+++ b/third_party/android_jar/api-database.tar.gz.sha1
@@ -1 +1 @@
-be72aeca006f1aba8b1fe4d9c3ff4c0e76259960
\ No newline at end of file
+a3e0351d71082eb74073576e11c0632191fd8530
\ No newline at end of file