Update to utility
* Skip synthetic methods in android.jar
* Print statistics
Bug: 134732760
Change-Id: I10a3ca5627d971bdf748f7bdd2f1c9c6baa1f6b3
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/DumpCoreLibUsage.java b/src/test/java/com/android/tools/r8/desugar/corelib/DumpCoreLibUsage.java
index 55f82ce..fe553d1 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/DumpCoreLibUsage.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/DumpCoreLibUsage.java
@@ -99,6 +99,12 @@
if (!method.isPublicMethod()) {
continue;
}
+ // Class java.util.concurrent.CompletableFuture have most methods duplicated with a
+ // synthetic bridge that only differs on return type (the bridge has return type
+ // CompletionStage, whereas the non bridge has return type CompletableFuture.
+ if (method.isSyntheticMethod()) {
+ continue;
+ }
if (filter.contains(method.method)) {
continue;
}
@@ -117,6 +123,8 @@
public static void main(String[] args) throws Exception {
DexItemFactory factory = new DexItemFactory();
for (String pkg : new String[] {"java.time", "java.util.function", "java.util.stream"}) {
+ long prevMethods = 0;
+ long prevFields = 0;
Set<DexReference> found = Collections.emptySet();
for (AndroidApiLevel apiLevel :
new AndroidApiLevel[] {
@@ -130,7 +138,17 @@
String header = "Usage of package " + pkg + " on " + apiLevel;
System.out.println(header);
System.out.println(new String(new char[header.length()]).replace("\0", "-"));
+ System.out.println();
found = new DumpCoreLibUsage().checkPackage(pkg, apiLevel, found, factory);
+
+ long methods = found.stream().filter(DexReference::isDexMethod).count();
+ long fields = found.stream().filter(DexReference::isDexField).count();
+ System.out.println(
+ "Total methods: " + methods + " (" + (methods - prevMethods) + " added)");
+ System.out.println("Total fields: " + fields + " (" + (fields - prevFields) + " added)");
+ System.out.println();
+ prevMethods = methods;
+ prevFields = fields;
}
}
}