Retain synthesized classes in new AppInfo.
Change-Id: I8dfd45347684c2828187f7158665c1c8a237f6c1
diff --git a/src/main/java/com/android/tools/r8/graph/AppInfo.java b/src/main/java/com/android/tools/r8/graph/AppInfo.java
index 69f90e4..543326a 100644
--- a/src/main/java/com/android/tools/r8/graph/AppInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/AppInfo.java
@@ -41,6 +41,10 @@
this.app = previous.app;
this.dexItemFactory = app.dexItemFactory;
this.definitions.putAll(previous.definitions);
+ copyMetadataFromPrevious(previous);
+ }
+
+ public void copyMetadataFromPrevious(AppInfo previous) {
this.synthesizedClasses.putAll(previous.synthesizedClasses);
}
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index 1a2b0e2..0658418 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -346,8 +346,8 @@
assert Sets.intersection(instanceFieldWrites.keySet(), staticFieldWrites.keySet()).isEmpty();
}
- private AppInfoWithLiveness(AppInfoWithLiveness previous, DexApplication application) {
- this(previous, application, null);
+ private AppInfoWithLiveness(AppInfoWithLiveness previous) {
+ this(previous, previous.app(), null);
}
private AppInfoWithLiveness(
@@ -398,6 +398,7 @@
previous.switchMaps,
previous.ordinalsMaps,
previous.instantiatedLambdas);
+ copyMetadataFromPrevious(previous);
assert removedClasses == null || assertNoItemRemoved(previous.pinnedItems, removedClasses);
assert Sets.intersection(instanceFieldReads.keySet(), staticFieldReads.keySet()).isEmpty();
assert Sets.intersection(instanceFieldWrites.keySet(), staticFieldWrites.keySet()).isEmpty();
@@ -586,7 +587,7 @@
if (noLongerWrittenFields.isEmpty()) {
return this;
}
- AppInfoWithLiveness result = new AppInfoWithLiveness(this, app());
+ AppInfoWithLiveness result = new AppInfoWithLiveness(this);
Predicate<DexField> isFieldWritten = field -> !noLongerWrittenFields.contains(field);
result.fieldsWritten = filter(fieldsWritten, isFieldWritten);
result.staticFieldsWrittenOnlyInEnclosingStaticInitializer =