Refactor the API database building to use a builder
Change-Id: Ida7f602c5b4de7b53db8f3e348d254c2094433b1
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
index 0521f40..0dda84b2 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
@@ -79,8 +79,12 @@
private static GenerateDatabaseResourceFilesResult generateResourcesFiles() throws Exception {
return generateResourcesFiles(
- AndroidApiVersionsXmlParser.getParsedApiClasses(
- ToolHelper.getApiVersionsXmlFile(API_LEVEL).toFile(), API_LEVEL),
+ AndroidApiVersionsXmlParser.builder()
+ .setApiVersionsXml(ToolHelper.getApiVersionsXmlFile(API_LEVEL))
+ .setAndroidJar(ToolHelper.getAndroidJar(API_LEVEL))
+ .setApiLevel(API_LEVEL)
+ .build()
+ .run(),
API_LEVEL);
}
@@ -98,8 +102,12 @@
// This tests makes a rudimentary check on the number of classes, fields and methods in
// api-versions.xml to ensure that the runtime tests do not vacuously succeed.
List<ParsedApiClass> parsedApiClasses =
- AndroidApiVersionsXmlParser.getParsedApiClasses(
- ToolHelper.getApiVersionsXmlFile(API_LEVEL).toFile(), API_LEVEL);
+ AndroidApiVersionsXmlParser.builder()
+ .setApiVersionsXml(ToolHelper.getApiVersionsXmlFile(API_LEVEL))
+ .setAndroidJar(ToolHelper.getAndroidJar(API_LEVEL))
+ .setApiLevel(API_LEVEL)
+ .build()
+ .run();
IntBox numberOfFields = new IntBox(0);
IntBox numberOfMethods = new IntBox(0);
parsedApiClasses.forEach(
@@ -173,8 +181,12 @@
@Test
public void testCanLookUpAllParsedApiClassesAndMembers() throws Exception {
List<ParsedApiClass> parsedApiClasses =
- AndroidApiVersionsXmlParser.getParsedApiClasses(
- ToolHelper.getApiVersionsXmlFile(API_LEVEL).toFile(), API_LEVEL);
+ AndroidApiVersionsXmlParser.builder()
+ .setApiVersionsXml(ToolHelper.getApiVersionsXmlFile(API_LEVEL))
+ .setAndroidJar(ToolHelper.getAndroidJar(API_LEVEL))
+ .setApiLevel(API_LEVEL)
+ .build()
+ .run();
DexItemFactory factory = new DexItemFactory();
TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
AndroidApiLevelHashingDatabaseImpl androidApiLevelDatabase =
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 e87664f..2d09844 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiVersionsXmlParser.java
@@ -6,7 +6,6 @@
import static com.android.tools.r8.utils.FunctionUtils.ignoreArgument;
-import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.FieldReference;
import com.android.tools.r8.references.MethodReference;
@@ -16,7 +15,7 @@
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.FieldSubject;
-import java.io.File;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
@@ -35,11 +34,48 @@
private final List<ParsedApiClass> classes = new ArrayList<>();
- private final File apiVersionsXml;
+ private final Path apiVersionsXml;
+ private final Path androidJar;
private final AndroidApiLevel maxApiLevel;
- private AndroidApiVersionsXmlParser(File apiVersionsXml, AndroidApiLevel maxApiLevel) {
+ static class Builder {
+ private Path apiVersionsXml;
+ private Path androidJar;
+ private AndroidApiLevel apiLevel;
+
+ Builder setApiVersionsXml(Path apiVersionsXml) {
+ this.apiVersionsXml = apiVersionsXml;
+ return this;
+ }
+
+ Builder setAndroidJar(Path androidJar) {
+ this.androidJar = androidJar;
+ return this;
+ }
+
+ Builder setApiLevel(AndroidApiLevel apiLevel) {
+ this.apiLevel = apiLevel;
+ return this;
+ }
+
+ AndroidApiVersionsXmlParser build() {
+ return new AndroidApiVersionsXmlParser(apiVersionsXml, androidJar, apiLevel);
+ }
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public List<ParsedApiClass> run() throws Exception {
+ readApiVersionsXmlFile();
+ return classes;
+ }
+
+ private AndroidApiVersionsXmlParser(
+ Path apiVersionsXml, Path androidJar, AndroidApiLevel maxApiLevel) {
this.apiVersionsXml = apiVersionsXml;
+ this.androidJar = androidJar;
this.maxApiLevel = maxApiLevel;
}
@@ -62,9 +98,9 @@
}
private void readApiVersionsXmlFile() throws Exception {
- CodeInspector inspector = new CodeInspector(ToolHelper.getAndroidJar(maxApiLevel));
+ CodeInspector inspector = new CodeInspector(androidJar);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- Document document = factory.newDocumentBuilder().parse(apiVersionsXml);
+ Document document = factory.newDocumentBuilder().parse(apiVersionsXml.toFile());
NodeList classes = document.getElementsByTagName("class");
Set<String> exemptionList = getDeletedTypesMissingRemovedAttribute();
for (int i = 0; i < classes.getLength(); i++) {
@@ -177,13 +213,6 @@
return defaultValue.max(getSince(node));
}
- public static List<ParsedApiClass> getParsedApiClasses(
- File apiVersionsXml, AndroidApiLevel apiLevel) throws Exception {
- AndroidApiVersionsXmlParser parser = new AndroidApiVersionsXmlParser(apiVersionsXml, apiLevel);
- parser.readApiVersionsXmlFile();
- return parser.classes;
- }
-
public static class ParsedApiClass {
private final ClassReference classReference;