Remove signature from companion class
Bug: b/280356274
Change-Id: I93fe7f58a8b9760859ff651b60e373c8c6b68a0f
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignature.java b/src/main/java/com/android/tools/r8/graph/GenericSignature.java
index 920fbc1..f1122b8 100644
--- a/src/main/java/com/android/tools/r8/graph/GenericSignature.java
+++ b/src/main/java/com/android/tools/r8/graph/GenericSignature.java
@@ -259,6 +259,9 @@
}
public ClassSignature visit(GenericSignatureVisitor visitor) {
+ if (hasNoSignature()) {
+ return this;
+ }
List<FormalTypeParameter> rewrittenParameters =
visitor.visitFormalTypeParameters(formalTypeParameters);
ClassTypeSignature rewrittenSuperClass = visitor.visitSuperClass(superClassSignature);
@@ -291,10 +294,6 @@
return NO_CLASS_SIGNATURE;
}
- public ClassSignature toObjectBoundWithSameFormals(ClassTypeSignature objectBound) {
- return new ClassSignature(formalTypeParameters, objectBound, getEmptySuperInterfaces());
- }
-
public List<FieldTypeSignature> getGenericArgumentsToSuperType(DexType type) {
assert hasSignature();
if (superClassSignature.type == type) {
@@ -314,9 +313,9 @@
public static class ClassSignatureBuilder {
- private List<FormalTypeParameter> formalTypeParameters = new ArrayList<>();
+ private final List<FormalTypeParameter> formalTypeParameters = new ArrayList<>();
private ClassTypeSignature superClassSignature = null;
- private List<ClassTypeSignature> superInterfaceSignatures = new ArrayList<>();
+ private final List<ClassTypeSignature> superInterfaceSignatures = new ArrayList<>();
private ClassSignatureBuilder() {}
@@ -336,9 +335,8 @@
}
public ClassSignature build() {
- ClassSignature classSignature =
- new ClassSignature(formalTypeParameters, superClassSignature, superInterfaceSignatures);
- return classSignature;
+ return new ClassSignature(
+ formalTypeParameters, superClassSignature, superInterfaceSignatures);
}
}
}
@@ -628,6 +626,9 @@
}
public ClassTypeSignature visit(GenericSignatureVisitor visitor) {
+ if (hasNoSignature()) {
+ return this;
+ }
DexType visitedType = visitor.visitType(type);
if (visitedType == null) {
return null;
@@ -855,6 +856,9 @@
}
public MethodTypeSignature visit(GenericSignatureVisitor visitor) {
+ if (hasNoSignature()) {
+ return this;
+ }
List<FormalTypeParameter> rewrittenParameters =
visitor.visitFormalTypeParameters(formalTypeParameters);
List<TypeSignature> rewrittenSignatures = visitor.visitMethodTypeSignatures(typeSignatures);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceProcessor.java
index 31037b9..422dc72 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceProcessor.java
@@ -23,7 +23,6 @@
import com.android.tools.r8.graph.DexProto;
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GenericSignature.ClassTypeSignature;
import com.android.tools.r8.graph.InvalidCode;
import com.android.tools.r8.graph.MethodCollection;
import com.android.tools.r8.graph.ProgramMethod;
@@ -139,14 +138,7 @@
kinds -> kinds.COMPANION_CLASS,
iface,
appView,
- builder ->
- builder
- .setSourceFile(iface.sourceFile)
- .setGenericSignature(
- iface
- .getClassSignature()
- .toObjectBoundWithSameFormals(
- new ClassTypeSignature(appView.dexItemFactory().objectType))),
+ builder -> builder.setSourceFile(iface.sourceFile),
methodBuilderCallback,
newMethodCallback);
}
diff --git a/src/test/java/com/android/tools/r8/desugaring/interfacemethods/CompanionClassNoSignatureTest.java b/src/test/java/com/android/tools/r8/desugaring/interfacemethods/CompanionClassNoSignatureTest.java
index 5e471fd..47b8383 100644
--- a/src/test/java/com/android/tools/r8/desugaring/interfacemethods/CompanionClassNoSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/desugaring/interfacemethods/CompanionClassNoSignatureTest.java
@@ -4,12 +4,13 @@
package com.android.tools.r8.desugaring.interfacemethods;
+import static org.junit.Assert.assertTrue;
+
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.utils.StringUtils;
-import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -44,10 +45,9 @@
.isLessThan(apiLevelWithDefaultInterfaceMethodsSupport())) {
ClassSignature signature =
inspector.companionClassFor(I.class).getDexProgramClass().getClassSignature();
- // TODO(b/280356274): There should be no signature on I$-CC.
- Assert.assertTrue(
+ assertTrue(
"Expected no signature, got: " + signature.toString(),
- signature.hasSignature());
+ signature.hasNoSignature());
}
});
}
diff --git a/src/test/java/com/android/tools/r8/desugaring/interfacemethods/CompanionClassWithSignatureTest.java b/src/test/java/com/android/tools/r8/desugaring/interfacemethods/CompanionClassWithSignatureTest.java
index 9f1e097..060af3f 100644
--- a/src/test/java/com/android/tools/r8/desugaring/interfacemethods/CompanionClassWithSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/desugaring/interfacemethods/CompanionClassWithSignatureTest.java
@@ -41,8 +41,7 @@
assumeFalse(
"Art 7 crashes when resolving the default method on I.",
parameters.isDexRuntimeVersion(Version.V7_0_0) && !isDesugaring());
- // TODO(b/280356274): There should be no signature on I$-CC.
- boolean resolvedBug280356274 = false;
+ boolean resolvedBug280356274 = true;
String expected = StringUtils.lines(resolvedBug280356274 && isDesugaring() ? "[]" : "[T]");
testForD8(parameters.getBackend())
.setMinApi(parameters)
@@ -58,10 +57,9 @@
if (isDesugaring()) {
ClassSignature signature =
inspector.companionClassFor(I.class).getDexProgramClass().getClassSignature();
- // TODO(b/280356274): There should be no signature on I$-CC.
assertTrue(
"Expected no signature, got: " + signature.toString(),
- signature.hasSignature());
+ signature.hasNoSignature());
}
});
}