Only use source supertype for generic signature if not interface
Bug: 191349005
Change-Id: Ica10beca480a333610e65567e071fd40f1214afd
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index a1d2c30..6fd7c76 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -1197,12 +1197,14 @@
// The variables in the class signature is now rewritten to use the targets argument.
ClassSignatureBuilder builder = ClassSignature.builder();
builder.addFormalTypeParameters(targetSignature.getFormalTypeParameters());
- if (rewrittenSource.hasSignature()) {
- builder.setSuperClassSignature(rewrittenSource.superClassSignature());
- } else if (source.isInterface()) {
- builder.setSuperClassSignature(targetSignature.superClassSignature());
+ if (!source.isInterface()) {
+ if (rewrittenSource.hasSignature()) {
+ builder.setSuperClassSignature(rewrittenSource.superClassSignature());
+ } else {
+ builder.setSuperClassSignature(new ClassTypeSignature(source.superType));
+ }
} else {
- builder.setSuperClassSignature(new ClassTypeSignature(source.superType));
+ builder.setSuperClassSignature(targetSignature.superClassSignature());
}
// Compute the seen set for interfaces to add. This is similar to the merging of interfaces
// but allow us to maintain the type arguments.