Rewrite generic signatures after repackaging
This is a prerequisite for being able to run vertical class merging afterwards (as this must fixup generic signatures after merging).
This also fixes a bug where the generic signature type rewriter did not pass in the correct "applied" lens.
Bug: b/315445393
Change-Id: Ib7c79ac34a88c6ece9d103411998423f54fc731b
diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index 691680c..9ceb56c 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -101,6 +101,7 @@
private final WholeProgramOptimizations wholeProgramOptimizations;
private GraphLens codeLens = GraphLens.getIdentityLens();
private GraphLens graphLens = GraphLens.getIdentityLens();
+ private GraphLens genericSignaturesLens = GraphLens.getIdentityLens();
private InitClassLens initClassLens;
private GraphLens kotlinMetadataLens = GraphLens.getIdentityLens();
private NamingLens namingLens = NamingLens.getIdentityLens();
@@ -678,6 +679,14 @@
return false;
}
+ public GraphLens getGenericSignaturesLens() {
+ return genericSignaturesLens;
+ }
+
+ public void setGenericSignaturesLens(GraphLens genericSignaturesLens) {
+ this.genericSignaturesLens = genericSignaturesLens;
+ }
+
private boolean disallowFurtherInitClassUses = false;
public void dissallowFurtherInitClassUses() {
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignatureTypeRewriter.java b/src/main/java/com/android/tools/r8/graph/GenericSignatureTypeRewriter.java
index d519324..916a8e2 100644
--- a/src/main/java/com/android/tools/r8/graph/GenericSignatureTypeRewriter.java
+++ b/src/main/java/com/android/tools/r8/graph/GenericSignatureTypeRewriter.java
@@ -38,7 +38,7 @@
appView.appInfo().hasLiveness()
? appView.appInfo().withLiveness()::wasPruned
: alwaysFalse(),
- appView.graphLens()::lookupType,
+ type -> appView.graphLens().lookupType(type, appView.getGenericSignaturesLens()),
context,
hasGenericTypeVariables);
}
diff --git a/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureRewriter.java b/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureRewriter.java
index 7e91d18..9e966d0 100644
--- a/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureRewriter.java
+++ b/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureRewriter.java
@@ -116,5 +116,6 @@
},
appView.options().getThreadingModule(),
executorService);
+ appView.setGenericSignaturesLens(appView.graphLens());
}
}
diff --git a/src/main/java/com/android/tools/r8/repackaging/Repackaging.java b/src/main/java/com/android/tools/r8/repackaging/Repackaging.java
index 3d6fc32..5272500 100644
--- a/src/main/java/com/android/tools/r8/repackaging/Repackaging.java
+++ b/src/main/java/com/android/tools/r8/repackaging/Repackaging.java
@@ -24,6 +24,7 @@
import com.android.tools.r8.graph.fixup.TreeFixerBase;
import com.android.tools.r8.graph.lens.NestedGraphLens;
import com.android.tools.r8.naming.Minifier.MinificationPackageNamingStrategy;
+import com.android.tools.r8.naming.signature.GenericSignatureRewriter;
import com.android.tools.r8.repackaging.RepackagingLens.Builder;
import com.android.tools.r8.shaking.AnnotationFixer;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
@@ -78,6 +79,7 @@
if (lens != null) {
appView.rewriteWithLensAndApplication(lens, appBuilder.build(), executorService, timing);
appView.testing().repackagingLensConsumer.accept(appView.dexItemFactory(), lens);
+ new GenericSignatureRewriter(appView).run(appView.appInfo().classes(), executorService);
}
appView.notifyOptimizationFinishedForTesting();
timing.end();