Revert "Parsing and emitting of modeled generic signature"
This reverts commit dd1d25d5fa1975433979d3f7ce0247ac5e480687.
Reason for revert: Braeaking bots when having missing classes
Change-Id: I2b8c2ef4870d8afb108e1c6214d2b92e2bb6d52e
diff --git a/src/main/java/com/android/tools/r8/GenerateLintFiles.java b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
index c295175..17b7485 100644
--- a/src/main/java/com/android/tools/r8/GenerateLintFiles.java
+++ b/src/main/java/com/android/tools/r8/GenerateLintFiles.java
@@ -24,7 +24,6 @@
import com.android.tools.r8.graph.DexProgramClass.ChecksumSupplier;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DirectMappedDexApplication;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.GraphLens;
import com.android.tools.r8.graph.LazyLoadedDexApplication;
import com.android.tools.r8.graph.ParameterAnnotationsList;
@@ -174,7 +173,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 0084d0d..92d9c12 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -892,14 +892,12 @@
|| options.getProguardConfiguration().hasApplyMappingFile()) {
assert appView.rootSet().verifyKeptItemsAreKept(appView);
}
-
- assert options.testing.disableMappingToOriginalProgramVerification
- || appView
- .graphLens()
- .verifyMappingToOriginalProgram(
- appView,
- new ApplicationReader(inputApp.withoutMainDexList(), options, timing)
- .read(executorService));
+ assert appView
+ .graphLens()
+ .verifyMappingToOriginalProgram(
+ appView,
+ new ApplicationReader(inputApp.withoutMainDexList(), options, timing)
+ .read(executorService));
// Report synthetic rules (only for testing).
// TODO(b/120959039): Move this to being reported through the graph consumer.
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
index fd9b353..b0f836c 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -454,14 +454,12 @@
for (DexProgramClass clazz : appView.appInfo().classes()) {
EnclosingMethodAttribute enclosingMethod = clazz.getEnclosingMethodAttribute();
List<InnerClassAttribute> innerClasses = clazz.getInnerClasses();
- if (enclosingMethod == null
- && innerClasses.isEmpty()
- && clazz.getClassSignature().hasNoSignature()) {
+ if (enclosingMethod == null && innerClasses.isEmpty()) {
continue;
}
// EnclosingMember translates directly to an enclosing class/method if present.
- List<DexAnnotation> annotations = new ArrayList<>(2 + innerClasses.size());
+ List<DexAnnotation> annotations = new ArrayList<>(1 + innerClasses.size());
if (enclosingMethod != null) {
if (enclosingMethod.getEnclosingMethod() != null) {
annotations.add(
@@ -509,12 +507,6 @@
}
}
- if (clazz.getClassSignature().hasSignature()) {
- annotations.add(
- DexAnnotation.createSignatureAnnotation(
- clazz.getClassSignature().toRenamedString(namingLens), options.itemFactory));
- }
-
if (!annotations.isEmpty()) {
// Append the annotations to annotations array of the class.
DexAnnotation[] copy =
@@ -528,7 +520,6 @@
// Clear the attribute structures now that they are represented in annotations.
clazz.clearEnclosingMethodAttribute();
clazz.clearInnerClasses();
- clazz.clearClassSignature();
}
}
diff --git a/src/main/java/com/android/tools/r8/dex/DexParser.java b/src/main/java/com/android/tools/r8/dex/DexParser.java
index 711eb47..978a7e7 100644
--- a/src/main/java/com/android/tools/r8/dex/DexParser.java
+++ b/src/main/java/com/android/tools/r8/dex/DexParser.java
@@ -51,8 +51,6 @@
import com.android.tools.r8.graph.DexValue.DexValueNull;
import com.android.tools.r8.graph.EnclosingMethodAttribute;
import com.android.tools.r8.graph.FieldAccessFlags;
-import com.android.tools.r8.graph.GenericSignature;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.InnerClassAttribute;
import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.graph.OffsetToObjectMapping;
@@ -62,7 +60,6 @@
import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Pair;
-import com.android.tools.r8.utils.Reporter;
import com.google.common.io.ByteStreams;
import it.unimi.dsi.fastutil.ints.Int2IntArrayMap;
import it.unimi.dsi.fastutil.ints.Int2ReferenceMap;
@@ -760,8 +757,7 @@
}
AttributesAndAnnotations attrs =
- new AttributesAndAnnotations(
- type, origin, annotationsDirectory.clazz, options.itemFactory, options.reporter);
+ new AttributesAndAnnotations(type, annotationsDirectory.clazz, options.itemFactory);
Long finalChecksum = checksum;
ChecksumSupplier checksumSupplier =
@@ -780,7 +776,6 @@
Collections.emptyList(),
attrs.getEnclosingMethodAttribute(),
attrs.getInnerClasses(),
- attrs.classSignature,
attrs.getAnnotations(),
staticFields,
instanceFields,
@@ -1332,7 +1327,6 @@
private EnclosingMethodAttribute enclosingMethodAttribute = null;
private List<InnerClassAttribute> innerClasses = null;
private List<DexAnnotation> lazyAnnotations = null;
- private ClassSignature classSignature = ClassSignature.NO_CLASS_SIGNATURE;
public DexAnnotationSet getAnnotations() {
if (lazyAnnotations != null) {
@@ -1352,16 +1346,8 @@
return enclosingMethodAttribute;
}
- public ClassSignature getClassSignature() {
- return classSignature;
- }
-
public AttributesAndAnnotations(
- DexType type,
- Origin origin,
- DexAnnotationSet annotations,
- DexItemFactory factory,
- Reporter reporter) {
+ DexType type, DexAnnotationSet annotations, DexItemFactory factory) {
this.originalAnnotations = annotations;
DexType enclosingClass = null;
DexMethod enclosingMethod = null;
@@ -1392,12 +1378,6 @@
} else {
memberClasses.addAll(members);
}
- } else if (DexAnnotation.isSignatureAnnotation(annotation, factory)) {
- ensureAnnotations(i);
- String signature = DexAnnotation.getSignature(annotation);
- classSignature =
- GenericSignature.parseClassSignature(
- type.getName(), signature, origin, factory, reporter);
} else {
copyAnnotation(annotation);
}
diff --git a/src/main/java/com/android/tools/r8/graph/ClassKind.java b/src/main/java/com/android/tools/r8/graph/ClassKind.java
index 3929cfb..14fa13e 100644
--- a/src/main/java/com/android/tools/r8/graph/ClassKind.java
+++ b/src/main/java/com/android/tools/r8/graph/ClassKind.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.ProgramResource.Kind;
import com.android.tools.r8.graph.DexProgramClass.ChecksumSupplier;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.origin.Origin;
import java.util.List;
import java.util.function.Consumer;
@@ -27,7 +26,6 @@
nestMembers,
enclosingMember,
innerClasses,
- classSignature,
annotations,
staticFields,
instanceFields,
@@ -47,7 +45,6 @@
nestMembers,
enclosingMember,
innerClasses,
- classSignature,
annotations,
staticFields,
instanceFields,
@@ -68,7 +65,6 @@
nestMembers,
enclosingMember,
innerClasses,
- classSignature,
annotations,
staticFields,
instanceFields,
@@ -88,7 +84,6 @@
nestMembers,
enclosingMember,
innerClasses,
- classSignature,
annotations,
staticFields,
instanceFields,
@@ -111,7 +106,6 @@
List<NestMemberClassAttribute> nestMembers,
EnclosingMethodAttribute enclosingMember,
List<InnerClassAttribute> innerClasses,
- ClassSignature classSignature,
DexAnnotationSet annotations,
DexEncodedField[] staticFields,
DexEncodedField[] instanceFields,
@@ -141,7 +135,6 @@
List<NestMemberClassAttribute> nestMembers,
EnclosingMethodAttribute enclosingMember,
List<InnerClassAttribute> innerClasses,
- ClassSignature classSignature,
DexAnnotationSet annotations,
DexEncodedField[] staticFields,
DexEncodedField[] instanceFields,
@@ -161,7 +154,6 @@
nestMembers,
enclosingMember,
innerClasses,
- classSignature,
annotations,
staticFields,
instanceFields,
diff --git a/src/main/java/com/android/tools/r8/graph/DexClass.java b/src/main/java/com/android/tools/r8/graph/DexClass.java
index 6e66319..dede4e0 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClass.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.dex.MixedSectionCollection;
import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.kotlin.KotlinClassLevelInfo;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.InternalOptions;
@@ -60,9 +59,6 @@
private NestHostClassAttribute nestHost;
private final List<NestMemberClassAttribute> nestMembers;
- /** Generic signature information if the attribute is present in the input */
- protected ClassSignature classSignature;
-
public DexClass(
DexString sourceFile,
DexTypeList interfaces,
@@ -77,7 +73,6 @@
List<NestMemberClassAttribute> nestMembers,
EnclosingMethodAttribute enclosingMethod,
List<InnerClassAttribute> innerClasses,
- ClassSignature classSignature,
DexAnnotationSet annotations,
Origin origin,
boolean skipNameValidationForTesting) {
@@ -97,9 +92,6 @@
assert nestMembers != null;
this.enclosingMethod = enclosingMethod;
this.innerClasses = innerClasses;
- assert classSignature != null;
- this.classSignature = classSignature;
- assert GenericSignatureUtils.verifyNoDuplicateGenericDefinitions(classSignature, annotations);
if (type == superType) {
throw new CompilationError("Class " + type.toString() + " cannot extend itself");
}
@@ -757,10 +749,6 @@
innerClasses.clear();
}
- public void clearClassSignature() {
- classSignature = ClassSignature.NO_CLASS_SIGNATURE;
- }
-
public void removeInnerClasses(Predicate<InnerClassAttribute> predicate) {
innerClasses.removeIf(predicate::test);
}
@@ -786,14 +774,6 @@
throw new Unreachable();
}
- public ClassSignature getClassSignature() {
- return classSignature;
- }
-
- public void setClassSignature(ClassSignature classSignature) {
- this.classSignature = classSignature;
- }
-
public boolean isLocalClass() {
InnerClassAttribute innerClass = getInnerClassAttributeForThisClass();
// The corresponding enclosing-method attribute might be not available, e.g., CF version 50.
diff --git a/src/main/java/com/android/tools/r8/graph/DexClasspathClass.java b/src/main/java/com/android/tools/r8/graph/DexClasspathClass.java
index 410f985..118a04d 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClasspathClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClasspathClass.java
@@ -7,7 +7,6 @@
import com.android.tools.r8.ProgramResource.Kind;
import com.android.tools.r8.dex.MixedSectionCollection;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.kotlin.KotlinClassLevelInfo;
import com.android.tools.r8.origin.Origin;
import java.util.List;
@@ -27,7 +26,6 @@
List<NestMemberClassAttribute> nestMembers,
EnclosingMethodAttribute enclosingMember,
List<InnerClassAttribute> innerClasses,
- ClassSignature classSignature,
DexAnnotationSet annotations,
DexEncodedField[] staticFields,
DexEncodedField[] instanceFields,
@@ -48,7 +46,6 @@
nestMembers,
enclosingMember,
innerClasses,
- classSignature,
annotations,
origin,
skipNameValidationForTesting);
diff --git a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
index cdf97ab..00dfa0b 100644
--- a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
@@ -62,7 +62,6 @@
public class DexItemFactory {
public static final String throwableDescriptorString = "Ljava/lang/Throwable;";
- public static final String dalvikAnnotationSignatureString = "Ldalvik/annotation/Signature;";
/** Set of types that may be synthesized during compilation. */
private final Set<DexType> possibleCompilerSynthesizedTypes = Sets.newIdentityHashSet();
@@ -542,7 +541,7 @@
public final DexType annotationMethodParameters =
createStaticallyKnownType("Ldalvik/annotation/MethodParameters;");
public final DexType annotationSignature =
- createStaticallyKnownType(dalvikAnnotationSignatureString);
+ createStaticallyKnownType("Ldalvik/annotation/Signature;");
public final DexType annotationSourceDebugExtension =
createStaticallyKnownType("Ldalvik/annotation/SourceDebugExtension;");
public final DexType annotationThrows = createStaticallyKnownType("Ldalvik/annotation/Throws;");
diff --git a/src/main/java/com/android/tools/r8/graph/DexLibraryClass.java b/src/main/java/com/android/tools/r8/graph/DexLibraryClass.java
index dcb4ed3..22920eb 100644
--- a/src/main/java/com/android/tools/r8/graph/DexLibraryClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexLibraryClass.java
@@ -7,7 +7,6 @@
import com.android.tools.r8.ProgramResource.Kind;
import com.android.tools.r8.dex.MixedSectionCollection;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.kotlin.KotlinClassLevelInfo;
import com.android.tools.r8.origin.Origin;
import java.util.Arrays;
@@ -28,7 +27,6 @@
List<NestMemberClassAttribute> nestMembers,
EnclosingMethodAttribute enclosingMember,
List<InnerClassAttribute> innerClasses,
- ClassSignature classSignature,
DexAnnotationSet annotations,
DexEncodedField[] staticFields,
DexEncodedField[] instanceFields,
@@ -49,7 +47,6 @@
nestMembers,
enclosingMember,
innerClasses,
- classSignature,
annotations,
origin,
skipNameValidationForTesting);
diff --git a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
index 345d6d5..b5fe6b8 100644
--- a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.graph;
-import static com.android.tools.r8.graph.GenericSignature.EMPTY_TYPE_ARGUMENTS;
import static com.android.tools.r8.kotlin.KotlinMetadataUtils.NO_KOTLIN_INFO;
import static com.google.common.base.Predicates.alwaysTrue;
@@ -12,15 +11,12 @@
import com.android.tools.r8.dex.IndexedItemCollection;
import com.android.tools.r8.dex.MixedSectionCollection;
import com.android.tools.r8.errors.CompilationError;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
-import com.android.tools.r8.graph.GenericSignature.ClassTypeSignature;
import com.android.tools.r8.ir.conversion.LensCodeRewriterUtils;
import com.android.tools.r8.kotlin.KotlinClassLevelInfo;
import com.android.tools.r8.naming.NamingLens;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.TraversalContinuation;
-import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -66,7 +62,6 @@
List<NestMemberClassAttribute> nestMembers,
EnclosingMethodAttribute enclosingMember,
List<InnerClassAttribute> innerClasses,
- ClassSignature classSignature,
DexAnnotationSet classAnnotations,
DexEncodedField[] staticFields,
DexEncodedField[] instanceFields,
@@ -86,7 +81,6 @@
nestMembers,
enclosingMember,
innerClasses,
- classSignature,
classAnnotations,
staticFields,
instanceFields,
@@ -109,7 +103,6 @@
List<NestMemberClassAttribute> nestMembers,
EnclosingMethodAttribute enclosingMember,
List<InnerClassAttribute> innerClasses,
- ClassSignature classSignature,
DexAnnotationSet classAnnotations,
DexEncodedField[] staticFields,
DexEncodedField[] instanceFields,
@@ -132,7 +125,6 @@
nestMembers,
enclosingMember,
innerClasses,
- classSignature,
classAnnotations,
origin,
skipNameValidationForTesting);
@@ -266,7 +258,6 @@
for (InnerClassAttribute attribute : getInnerClasses()) {
attribute.collectIndexedItems(indexedItems);
}
- // We are explicitly not adding items referenced in signatures.
forEachProgramField(field -> field.collectIndexedItems(indexedItems));
forEachProgramMethod(method -> method.collectIndexedItems(indexedItems, graphLens, rewriter));
}
@@ -280,7 +271,6 @@
void collectMixedSectionItems(MixedSectionCollection mixedItems) {
assert getEnclosingMethodAttribute() == null;
assert getInnerClasses().isEmpty();
- assert !classSignature.hasSignature();
if (hasClassOrMemberAnnotations()) {
mixedItems.setAnnotationsDirectoryForClass(this, new DexAnnotationDirectory(this));
}
@@ -290,7 +280,6 @@
public void addDependencies(MixedSectionCollection collector) {
assert getEnclosingMethodAttribute() == null;
assert getInnerClasses().isEmpty();
- assert !classSignature.hasSignature();
// We only have a class data item if there are methods or fields.
if (hasMethodsOrFields()) {
collector.add(this);
@@ -460,7 +449,7 @@
return;
}
addExtraInterfacesToInterfacesArray(extraInterfaces);
- addExtraInterfacesToSignatureIfPresent(extraInterfaces);
+ addExtraInterfacesToSignatureAnnotationIfPresent(extraInterfaces, factory);
}
private void addExtraInterfacesToInterfacesArray(List<DexType> extraInterfaces) {
@@ -472,22 +461,31 @@
interfaces = new DexTypeList(newInterfaces);
}
- private void addExtraInterfacesToSignatureIfPresent(List<DexType> extraInterfaces) {
- // We need to introduce the extra interfaces to the generic signature.
+ private void addExtraInterfacesToSignatureAnnotationIfPresent(
+ List<DexType> extraInterfaces, DexItemFactory factory) {
+ // We need to introduce in the dalvik.annotation.Signature annotation the extra interfaces.
// At this point we cheat and pretend the extraInterfaces simply don't use any generic types.
- if (classSignature.hasNoSignature() || extraInterfaces.isEmpty()) {
- return;
+ DexAnnotation[] annotations = annotations().annotations;
+ for (int i = 0; i < annotations.length; i++) {
+ DexAnnotation annotation = annotations[i];
+ if (DexAnnotation.isSignatureAnnotation(annotation, factory)) {
+ DexAnnotation[] rewrittenAnnotations = annotations.clone();
+ rewrittenAnnotations[i] = rewriteSignatureAnnotation(annotation, extraInterfaces, factory);
+ setAnnotations(new DexAnnotationSet(rewrittenAnnotations));
+ // There is at most one signature annotation, so we can return here.
+ return;
+ }
}
- ImmutableList.Builder<ClassTypeSignature> interfacesBuilder =
- ImmutableList.<ClassTypeSignature>builder().addAll(classSignature.superInterfaceSignatures);
+ }
+
+ private DexAnnotation rewriteSignatureAnnotation(
+ DexAnnotation annotation, List<DexType> extraInterfaces, DexItemFactory factory) {
+ String signature = DexAnnotation.getSignature(annotation);
+ StringBuilder newSignatureBuilder = new StringBuilder(signature);
for (DexType extraInterface : extraInterfaces) {
- interfacesBuilder.add(new ClassTypeSignature(extraInterface, EMPTY_TYPE_ARGUMENTS));
+ newSignatureBuilder.append(extraInterface.descriptor.toString());
}
- classSignature =
- new ClassSignature(
- classSignature.formalTypeParameters,
- classSignature.superClassSignature,
- interfacesBuilder.build());
+ return DexAnnotation.createSignatureAnnotation(newSignatureBuilder.toString(), factory);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignatureTypeRewriter.java b/src/main/java/com/android/tools/r8/graph/GenericSignatureTypeRewriter.java
deleted file mode 100644
index ddabc37..0000000
--- a/src/main/java/com/android/tools/r8/graph/GenericSignatureTypeRewriter.java
+++ /dev/null
@@ -1,241 +0,0 @@
-// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.graph;
-
-import static com.android.tools.r8.graph.GenericSignature.EMPTY_SUPER_INTERFACES;
-import static com.android.tools.r8.graph.GenericSignature.EMPTY_TYPE_ARGUMENTS;
-import static com.android.tools.r8.graph.GenericSignature.EMPTY_TYPE_PARAMS;
-import static com.android.tools.r8.graph.GenericSignature.NO_FIELD_TYPE_SIGNATURE;
-import static com.android.tools.r8.graph.GenericSignature.StarFieldTypeSignature.STAR_FIELD_TYPE_SIGNATURE;
-
-import com.android.tools.r8.graph.GenericSignature.ArrayTypeSignature;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
-import com.android.tools.r8.graph.GenericSignature.ClassTypeSignature;
-import com.android.tools.r8.graph.GenericSignature.FieldTypeSignature;
-import com.android.tools.r8.graph.GenericSignature.FormalTypeParameter;
-import com.android.tools.r8.graph.GenericSignature.TypeSignature;
-import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import java.util.ArrayList;
-import java.util.List;
-
-public class GenericSignatureTypeRewriter {
-
- private final AppView<?> appView;
- private final DexProgramClass context;
-
- private final FieldTypeSignature objectTypeSignature;
-
- public GenericSignatureTypeRewriter(AppView<?> appView, DexProgramClass context) {
- this.appView = appView;
- this.context = context;
- objectTypeSignature =
- new ClassTypeSignature(appView.dexItemFactory().objectType, EMPTY_TYPE_ARGUMENTS);
- }
-
- public ClassSignature rewrite(ClassSignature classSignature) {
- if (classSignature.hasNoSignature() || appView.graphLens().isIdentityLens()) {
- return classSignature;
- }
- return new ClassSignatureRewriter().run(classSignature);
- }
-
- private class ClassSignatureRewriter implements GenericSignatureVisitor {
-
- private final List<FormalTypeParameter> rewrittenTypeParameters = new ArrayList<>();
- private ClassTypeSignature rewrittenSuperClass;
- private final List<ClassTypeSignature> rewrittenSuperInterfaces = new ArrayList<>();
-
- @Override
- public void visitClassSignature(ClassSignature classSignature) {
- classSignature.visit(this);
- }
-
- @Override
- public void visitFormalTypeParameters(List<FormalTypeParameter> formalTypeParameters) {
- for (FormalTypeParameter formalTypeParameter : formalTypeParameters) {
- rewrittenTypeParameters.add(new FormalTypeParameterRewriter().run(formalTypeParameter));
- }
- }
-
- @Override
- public void visitSuperClass(ClassTypeSignature classTypeSignature) {
- rewrittenSuperClass = new ClassTypeSignatureRewriter(true).run(classTypeSignature);
- if (rewrittenSuperClass == null) {
- rewrittenSuperClass =
- new ClassTypeSignature(appView.dexItemFactory().objectType, EMPTY_TYPE_ARGUMENTS);
- }
- }
-
- @Override
- public void visitSuperInterface(ClassTypeSignature classTypeSignature) {
- ClassTypeSignature superInterface =
- new ClassTypeSignatureRewriter(true).run(classTypeSignature);
- if (superInterface != null) {
- rewrittenSuperInterfaces.add(superInterface);
- }
- }
-
- private ClassSignature run(ClassSignature classSignature) {
- classSignature.visit(this);
- if (rewrittenTypeParameters.isEmpty()
- && rewrittenSuperInterfaces.isEmpty()
- && rewrittenSuperClass.isNoSignature()
- && rewrittenSuperClass.type == appView.dexItemFactory().objectType) {
- return ClassSignature.NO_CLASS_SIGNATURE;
- }
- return new ClassSignature(
- rewrittenTypeParameters.isEmpty() ? EMPTY_TYPE_PARAMS : rewrittenTypeParameters,
- rewrittenSuperClass,
- rewrittenSuperInterfaces.isEmpty() ? EMPTY_SUPER_INTERFACES : rewrittenSuperInterfaces);
- }
- }
-
- private class FormalTypeParameterRewriter implements GenericSignatureVisitor {
-
- private FieldTypeSignature rewrittenClassBound = NO_FIELD_TYPE_SIGNATURE;
- private final List<FieldTypeSignature> rewrittenInterfaceBounds = new ArrayList<>();
-
- @Override
- public void visitClassBound(FieldTypeSignature fieldSignature) {
- rewrittenClassBound = new TypeSignatureRewriter().run(fieldSignature);
- }
-
- @Override
- public void visitInterfaceBound(FieldTypeSignature fieldSignature) {
- FieldTypeSignature interfaceBound = new TypeSignatureRewriter().run(fieldSignature);
- if (interfaceBound != null) {
- rewrittenInterfaceBounds.add(interfaceBound);
- }
- }
-
- private FormalTypeParameter run(FormalTypeParameter formalTypeParameter) {
- formalTypeParameter.visit(this);
- // Guard against the case where we have <T::...> that is, no class or interfaces bounds.
- if (rewrittenInterfaceBounds.isEmpty()
- && (rewrittenClassBound == null || !rewrittenClassBound.hasSignature())) {
- rewrittenClassBound = objectTypeSignature;
- }
- return new FormalTypeParameter(
- formalTypeParameter.name,
- rewrittenClassBound == null ? NO_FIELD_TYPE_SIGNATURE : rewrittenClassBound,
- rewrittenInterfaceBounds.isEmpty() ? EMPTY_TYPE_ARGUMENTS : rewrittenInterfaceBounds);
- }
- }
-
- private class TypeSignatureRewriter implements GenericSignatureVisitor {
-
- private TypeSignature run(TypeSignature typeSignature) {
- if (typeSignature.isBaseTypeSignature()) {
- return typeSignature;
- }
- assert typeSignature.isFieldTypeSignature();
- return run(typeSignature.asFieldTypeSignature());
- }
-
- private FieldTypeSignature run(FieldTypeSignature fieldTypeSignature) {
- if (fieldTypeSignature.isStar()) {
- return fieldTypeSignature;
- }
- if (fieldTypeSignature.isTypeVariableSignature()) {
- return fieldTypeSignature;
- }
- if (fieldTypeSignature.isArrayTypeSignature()) {
- ArrayTypeSignature arrayTypeSignature = fieldTypeSignature.asArrayTypeSignature();
- TypeSignature rewrittenElement = run(arrayTypeSignature.elementSignature);
- if (rewrittenElement == null) {
- return new ArrayTypeSignature(objectTypeSignature);
- }
- return rewrittenElement.toArrayTypeSignature();
- }
- assert fieldTypeSignature.isClassTypeSignature();
- ClassTypeSignature classTypeSignature = fieldTypeSignature.asClassTypeSignature();
- if (classTypeSignature.isNoSignature()) {
- return classTypeSignature;
- }
- return new ClassTypeSignatureRewriter(false).run(classTypeSignature);
- }
- }
-
- private class ClassTypeSignatureRewriter implements GenericSignatureVisitor {
-
- private final AppInfoWithLiveness appInfoWithLiveness;
- private final boolean isSuperClassOrInterface;
-
- // These fields are updated when iterating the modeled structure.
- private DexType currentType;
-
- // The following references are used to have a head and tail pointer to the classTypeSignature
- // link we are building. The topClassSignature will have a reference to the top-most package
- // and class-name. The parentClassSignature is a pointer pointing to the tail always and will
- // be linked and updated when calling ClassTypeSignature.link.
- private ClassTypeSignature topClassSignature;
- private ClassTypeSignature parentClassSignature;
-
- private ClassTypeSignatureRewriter(boolean isSuperClassOrInterface) {
- appInfoWithLiveness =
- appView.appInfo().hasLiveness() ? appView.appInfo().withLiveness() : null;
- this.isSuperClassOrInterface = isSuperClassOrInterface;
- }
-
- @Override
- public void visitSimpleClass(ClassTypeSignature classTypeSignature) {
- currentType = getTarget(classTypeSignature.type);
- if (currentType == null) {
- return;
- }
- classTypeSignature.visit(this);
- }
-
- @Override
- public void visitTypeArguments(List<FieldTypeSignature> typeArguments) {
- ClassTypeSignature newClassTypeSignature;
- if (typeArguments.isEmpty()) {
- newClassTypeSignature = new ClassTypeSignature(currentType, EMPTY_TYPE_ARGUMENTS);
- } else {
- List<FieldTypeSignature> rewrittenTypeArguments = new ArrayList<>(typeArguments.size());
- for (FieldTypeSignature typeArgument : typeArguments) {
- if (typeArgument.isStar()) {
- rewrittenTypeArguments.add(typeArgument);
- continue;
- }
- FieldTypeSignature rewritten = new TypeSignatureRewriter().run(typeArgument);
- if (rewritten != null) {
- rewrittenTypeArguments.add(rewritten.asArgument(typeArgument.getWildcardIndicator()));
- } else {
- rewrittenTypeArguments.add(STAR_FIELD_TYPE_SIGNATURE);
- }
- }
- newClassTypeSignature = new ClassTypeSignature(currentType, rewrittenTypeArguments);
- }
- if (topClassSignature == null) {
- topClassSignature = newClassTypeSignature;
- parentClassSignature = newClassTypeSignature;
- } else {
- ClassTypeSignature.link(parentClassSignature, newClassTypeSignature);
- parentClassSignature = newClassTypeSignature;
- }
- }
-
- private ClassTypeSignature run(ClassTypeSignature classTypeSignature) {
- currentType = getTarget(classTypeSignature.type);
- if (currentType == null) {
- return null;
- }
- classTypeSignature.visit(this);
- return topClassSignature;
- }
-
- private DexType getTarget(DexType type) {
- if (appInfoWithLiveness != null && appInfoWithLiveness.wasPruned(type)) {
- return null;
- }
- DexType rewrittenType = appView.graphLens().lookupType(type);
- if (isSuperClassOrInterface && context.type == rewrittenType) {
- return null;
- }
- return rewrittenType;
- }
- }
-}
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignatureUtils.java b/src/main/java/com/android/tools/r8/graph/GenericSignatureUtils.java
deleted file mode 100644
index 7c0dcd2..0000000
--- a/src/main/java/com/android/tools/r8/graph/GenericSignatureUtils.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.graph;
-
-import static com.android.tools.r8.graph.GenericSignature.ClassSignature.NO_CLASS_SIGNATURE;
-import static com.android.tools.r8.graph.GenericSignature.MethodTypeSignature.NO_METHOD_TYPE_SIGNATURE;
-import static com.android.tools.r8.graph.GenericSignature.NO_FIELD_TYPE_SIGNATURE;
-
-import com.android.tools.r8.graph.GenericSignature.DexDefinitionSignature;
-
-public class GenericSignatureUtils {
-
- public static boolean verifyNoDuplicateGenericDefinitions(
- DexDefinitionSignature<?> signature, DexAnnotationSet annotations) {
- assert signature != null;
- if (signature == NO_METHOD_TYPE_SIGNATURE
- || signature == NO_FIELD_TYPE_SIGNATURE
- || signature == NO_CLASS_SIGNATURE
- || annotations == null) {
- return true;
- }
- // The check is on the string descriptor to allow for not passing in a factory.
- for (DexAnnotation annotation : annotations.annotations) {
- assert !annotation
- .getAnnotationType()
- .descriptor
- .toString()
- .equals(DexItemFactory.dalvikAnnotationSignatureString);
- }
- return true;
- }
-}
diff --git a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
index 4382eaa..ea58f8d 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -32,7 +32,6 @@
import com.android.tools.r8.graph.DexValue.DexValueShort;
import com.android.tools.r8.graph.DexValue.DexValueString;
import com.android.tools.r8.graph.DexValue.DexValueType;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.jar.CfApplicationWriter;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.shaking.ProguardKeepAttributes;
@@ -207,7 +206,6 @@
private final List<NestMemberClassAttribute> nestMembers = new ArrayList<>();
private EnclosingMethodAttribute enclosingMember = null;
private final List<InnerClassAttribute> innerClasses = new ArrayList<>();
- private ClassSignature classSignature = ClassSignature.NO_CLASS_SIGNATURE;
private List<DexAnnotation> annotations = null;
private List<DexAnnotationElement> defaultAnnotations = null;
private final List<DexEncodedField> staticFields = new ArrayList<>();
@@ -331,9 +329,9 @@
assert superName != null || name.equals(Constants.JAVA_LANG_OBJECT_NAME);
superType = superName == null ? null : application.getTypeFromName(superName);
this.interfaces = application.getTypeListFromNames(interfaces);
- classSignature =
- GenericSignature.parseClassSignature(
- name, signature, origin, application.getFactory(), application.options.reporter);
+ if (signature != null && !signature.isEmpty()) {
+ addAnnotation(DexAnnotation.createSignatureAnnotation(signature, application.getFactory()));
+ }
}
@Override
@@ -412,7 +410,6 @@
nestMembers,
enclosingMember,
innerClasses,
- classSignature,
createAnnotationSet(annotations, application.options),
staticFields.toArray(DexEncodedField.EMPTY_ARRAY),
instanceFields.toArray(DexEncodedField.EMPTY_ARRAY),
@@ -570,8 +567,8 @@
this.desc = desc;
this.value = value;
if (signature != null && !signature.isEmpty()) {
- addAnnotation(
- DexAnnotation.createSignatureAnnotation(signature, parent.application.getFactory()));
+ addAnnotation(DexAnnotation.createSignatureAnnotation(
+ signature, parent.application.getFactory()));
}
}
@@ -651,6 +648,7 @@
private void addAnnotation(DexAnnotation annotation) {
getAnnotations().add(annotation);
}
+
private List<DexAnnotation> getAnnotations() {
if (annotations == null) {
annotations = new ArrayList<>();
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/SyntheticArgumentClass.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/SyntheticArgumentClass.java
index ec8d495..db92416 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/SyntheticArgumentClass.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/SyntheticArgumentClass.java
@@ -14,7 +14,6 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
import com.android.tools.r8.graph.DirectMappedDexApplication;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.origin.SynthesizedOrigin;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import java.util.Collections;
@@ -76,7 +75,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryRetargeter.java b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryRetargeter.java
index 2d4fb70..5280f61 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryRetargeter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryRetargeter.java
@@ -22,7 +22,6 @@
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.graph.ParameterAnnotationsList;
import com.android.tools.r8.graph.ResolutionResult;
@@ -112,7 +111,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryWrapperSynthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryWrapperSynthesizer.java
index f2ea71d..7936ffd 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryWrapperSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/DesugaredLibraryWrapperSynthesizer.java
@@ -25,7 +25,6 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
import com.android.tools.r8.graph.FieldAccessFlags;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.graph.ParameterAnnotationsList;
import com.android.tools.r8.ir.conversion.IRConverter;
@@ -231,7 +230,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY, // No static fields.
new DexEncodedField[] {wrapperField},
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
index 6d37c32..e58eeba 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
@@ -26,7 +26,6 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
import com.android.tools.r8.graph.DexValue;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.code.BasicBlock;
import com.android.tools.r8.ir.code.IRCode;
@@ -713,7 +712,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java
index 67d389f..20c3ae4 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceProcessor.java
@@ -26,7 +26,6 @@
import com.android.tools.r8.graph.DexProgramClass.ChecksumSupplier;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.GraphLens;
import com.android.tools.r8.graph.GraphLens.NestedGraphLens;
import com.android.tools.r8.graph.MethodAccessFlags;
@@ -214,7 +213,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
@@ -301,7 +299,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index cc6fec7..ecad620 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -23,7 +23,6 @@
import com.android.tools.r8.graph.DexTypeList;
import com.android.tools.r8.graph.DexValue.DexValueNull;
import com.android.tools.r8.graph.FieldAccessFlags;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.graph.ParameterAnnotationsList;
import com.android.tools.r8.graph.ProgramMethod;
@@ -161,7 +160,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
synthesizeStaticFields(),
synthesizeInstanceFields(),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java
index 01b87d2..89dc96c 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java
@@ -23,7 +23,6 @@
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.NestMemberClassAttribute;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.graph.UseRegistry;
@@ -186,7 +185,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/TwrCloseResourceRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/TwrCloseResourceRewriter.java
index 7b0d6b0..613fac6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/TwrCloseResourceRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/TwrCloseResourceRewriter.java
@@ -19,7 +19,6 @@
import com.android.tools.r8.graph.DexProto;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.graph.ParameterAnnotationsList;
import com.android.tools.r8.ir.code.IRCode;
@@ -152,7 +151,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
index 56d0a08..655ee2f 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
@@ -25,7 +25,6 @@
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.GraphLens;
import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.graph.ParameterAnnotationsList;
@@ -1392,7 +1391,7 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
+ // TODO: Build dex annotations structure.
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY, // Static fields.
DexEncodedField.EMPTY_ARRAY, // Instance fields.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java
index 7a81edc..b1fcc81 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java
@@ -18,7 +18,6 @@
import com.android.tools.r8.graph.DexProto;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.graph.MethodCollection;
import com.android.tools.r8.graph.ParameterAnnotationsList;
@@ -253,7 +252,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY, // Static fields.
DexEncodedField.EMPTY_ARRAY, // Instance fields.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/UnboxedEnumMemberRelocator.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/UnboxedEnumMemberRelocator.java
index b199c47..16c9118 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/UnboxedEnumMemberRelocator.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/UnboxedEnumMemberRelocator.java
@@ -14,7 +14,6 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
import com.android.tools.r8.graph.DirectMappedDexApplication;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.ProgramPackage;
import com.android.tools.r8.graph.ProgramPackageCollection;
import com.android.tools.r8.origin.SynthesizedOrigin;
@@ -122,7 +121,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaGroupClassBuilder.java b/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaGroupClassBuilder.java
index 92f0972..5ddc8dd 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaGroupClassBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaGroupClassBuilder.java
@@ -15,7 +15,6 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
import com.android.tools.r8.graph.EnclosingMethodAttribute;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.InnerClassAttribute;
import com.android.tools.r8.ir.optimize.info.OptimizationFeedback;
import com.android.tools.r8.origin.SynthesizedOrigin;
@@ -51,8 +50,7 @@
Collections.emptyList(),
buildEnclosingMethodAttribute(),
buildInnerClasses(),
- buildClassSignature(),
- DexAnnotationSet.empty(),
+ buildAnnotations(),
buildStaticFields(appView, feedback),
buildInstanceFields(),
buildDirectMethods(),
@@ -70,7 +68,7 @@
protected abstract List<InnerClassAttribute> buildInnerClasses();
- protected abstract ClassSignature buildClassSignature();
+ protected abstract DexAnnotationSet buildAnnotations();
protected abstract DexEncodedMethod[] buildVirtualMethods();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupClassBuilder.java b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupClassBuilder.java
index db7f56c..5b0b0b4 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupClassBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupClassBuilder.java
@@ -10,6 +10,7 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.ClassAccessFlags;
import com.android.tools.r8.graph.Code;
+import com.android.tools.r8.graph.DexAnnotation;
import com.android.tools.r8.graph.DexAnnotationSet;
import com.android.tools.r8.graph.DexEncodedField;
import com.android.tools.r8.graph.DexEncodedMethod;
@@ -22,8 +23,6 @@
import com.android.tools.r8.graph.DexTypeList;
import com.android.tools.r8.graph.DexValue.DexValueNull;
import com.android.tools.r8.graph.EnclosingMethodAttribute;
-import com.android.tools.r8.graph.GenericSignature;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.InnerClassAttribute;
import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.graph.ParameterAnnotationsList;
@@ -34,7 +33,6 @@
import com.android.tools.r8.ir.optimize.lambda.LambdaGroupClassBuilder;
import com.android.tools.r8.ir.synthetic.SynthesizedCode;
import com.android.tools.r8.ir.synthetic.SyntheticSourceCode;
-import com.android.tools.r8.origin.SynthesizedOrigin;
import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.IntBox;
import com.android.tools.r8.utils.InternalOptions;
@@ -86,11 +84,14 @@
}
@Override
- protected ClassSignature buildClassSignature() {
+ protected DexAnnotationSet buildAnnotations() {
// Kotlin-style lambdas supported by the merged may only contain optional signature and
// kotlin metadata annotations. We remove the latter, but keep the signature if present.
- return GenericSignature.parseClassSignature(
- origin, id.signature, new SynthesizedOrigin(origin, getClass()), factory, options.reporter);
+ String signature = id.signature;
+ return signature == null
+ ? DexAnnotationSet.empty()
+ : new DexAnnotationSet(
+ new DexAnnotation[]{DexAnnotation.createSignatureAnnotation(signature, factory)});
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupIdFactory.java b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupIdFactory.java
index 5a90f80..049748f 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupIdFactory.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupIdFactory.java
@@ -91,6 +91,9 @@
public static boolean hasValidAnnotations(Kotlin kotlin, DexClass lambda) {
for (DexAnnotation annotation : lambda.annotations().annotations) {
+ if (DexAnnotation.isSignatureAnnotation(annotation, kotlin.factory)) {
+ continue;
+ }
if (annotation.annotation.type == kotlin.factory.kotlinMetadataType) {
continue;
}
@@ -101,7 +104,13 @@
String validateAnnotations(AppView<AppInfoWithLiveness> appView, Kotlin kotlin, DexClass lambda)
throws LambdaStructureError {
+ String signature = null;
for (DexAnnotation annotation : lambda.liveAnnotations(appView).annotations) {
+ if (DexAnnotation.isSignatureAnnotation(annotation, kotlin.factory)) {
+ signature = DexAnnotation.getSignature(annotation);
+ continue;
+ }
+
if (annotation.annotation.type == appView.dexItemFactory().kotlinMetadataType) {
// Ignore kotlin metadata on lambda classes. Metadata on synthetic
// classes exists but is not used in the current Kotlin version (1.2.21)
@@ -114,7 +123,7 @@
"unexpected annotation: " + annotation.annotation.type.toSourceString());
}
assert hasValidAnnotations(kotlin, lambda);
- return lambda.getClassSignature().toString();
+ return signature;
}
void validateStaticFields(Kotlin kotlin, DexClass lambda) throws LambdaStructureError {
diff --git a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
index 7d00f29..e28734b 100644
--- a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
@@ -179,7 +179,7 @@
}
String desc = namingLens.lookupDescriptor(clazz.type).toString();
String name = namingLens.lookupInternalName(clazz.type);
- String signature = clazz.getClassSignature().toRenamedString(namingLens);
+ String signature = getSignature(clazz.annotations());
String superName =
clazz.type == options.itemFactory.objectType
? null
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 e1a49d8..92b4402 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
@@ -13,8 +13,6 @@
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
-import com.android.tools.r8.graph.GenericSignatureTypeRewriter;
import com.android.tools.r8.naming.NamingLens;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.InternalOptions;
@@ -29,7 +27,7 @@
import java.util.function.Predicate;
import java.util.function.Supplier;
-// TODO(b/169516860): We should generalize this to handle rewriting of attributes in general.
+// TODO(b/129925954): Reimplement this by using the internal encoding and transformation logic.
public class GenericSignatureRewriter {
private final AppView<?> appView;
@@ -58,27 +56,17 @@
ThreadUtils.processItems(
classes,
clazz -> {
- GenericSignatureTypeRewriter genericSignatureTypeRewriter =
- new GenericSignatureTypeRewriter(appView, clazz);
GenericSignatureCollector genericSignatureCollector =
new GenericSignatureCollector(clazz);
GenericSignatureParser<DexType> genericSignatureParser =
new GenericSignatureParser<>(genericSignatureCollector);
- ClassSignature classSignature = clazz.getClassSignature();
- if (classSignature.hasSignature()) {
- // TODO(b/129925954): We still have to rewrite to capture the lastWrittenType.
- // The design is utterly broken.
- DexAnnotation classSignatureAnnotation =
- DexAnnotation.createSignatureAnnotation(
- classSignature.toString(), options.itemFactory);
- rewriteGenericSignatures(
- new DexAnnotationSet(new DexAnnotation[] {classSignatureAnnotation}),
- genericSignatureParser::parseClassSignature,
- genericSignatureCollector::getRenamedSignature,
- (signature, e) ->
- options.warningInvalidSignature(clazz, clazz.getOrigin(), signature, e));
- }
- clazz.setClassSignature(genericSignatureTypeRewriter.rewrite(classSignature));
+ clazz.setAnnotations(
+ rewriteGenericSignatures(
+ clazz.annotations(),
+ genericSignatureParser::parseClassSignature,
+ genericSignatureCollector::getRenamedSignature,
+ (signature, e) ->
+ options.warningInvalidSignature(clazz, clazz.getOrigin(), signature, e)));
clazz.forEachField(
field ->
field.setAnnotations(
@@ -103,7 +91,6 @@
executorService);
}
- // TODO(b/129925954): Remove this when using modeled signatures for methods and fields.
private DexAnnotationSet rewriteGenericSignatures(
DexAnnotationSet annotations,
Consumer<String> parser,
diff --git a/src/main/java/com/android/tools/r8/repackaging/RepackagingTreeFixer.java b/src/main/java/com/android/tools/r8/repackaging/RepackagingTreeFixer.java
index 6bde745..f519f01 100644
--- a/src/main/java/com/android/tools/r8/repackaging/RepackagingTreeFixer.java
+++ b/src/main/java/com/android/tools/r8/repackaging/RepackagingTreeFixer.java
@@ -73,7 +73,6 @@
fixupNestMemberAttributes(clazz.getNestMembersClassAttributes()),
fixupEnclosingMethodAttribute(clazz.getEnclosingMethodAttribute()),
fixupInnerClassAttributes(clazz.getInnerClasses()),
- clazz.getClassSignature(),
clazz.annotations(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
diff --git a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
index 4fa3212..5ae46e8 100644
--- a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
+++ b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
@@ -83,9 +83,6 @@
assert !DexAnnotation.isMemberClassesAnnotation(annotation, dexItemFactory);
assert !DexAnnotation.isEnclosingMethodAnnotation(annotation, dexItemFactory);
assert !DexAnnotation.isEnclosingClassAnnotation(annotation, dexItemFactory);
- // TODO(b/129925954): Signature is being represented as a class attribute.
- assert !holder.isDexClass()
- || !DexAnnotation.isSignatureAnnotation(annotation, dexItemFactory);
if (config.exceptions && DexAnnotation.isThrowingAnnotation(annotation, dexItemFactory)) {
return true;
}
@@ -187,6 +184,15 @@
}
}
+ private static boolean hasSignatureAnnotation(DexProgramClass clazz, DexItemFactory itemFactory) {
+ for (DexAnnotation annotation : clazz.annotations().annotations) {
+ if (DexAnnotation.isSignatureAnnotation(annotation, itemFactory)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public void run() {
for (DexProgramClass clazz : appView.appInfo().classes()) {
stripAttributes(clazz);
@@ -285,9 +291,6 @@
hasInnerClassesFromSet(clazz, classesToRetainInnerClassAttributeFor);
}
if (keptAnyway || keepForThisInnerClass || keepForThisEnclosingClass) {
- if (!keep.signature) {
- clazz.clearClassSignature();
- }
if (!keep.enclosingMethod) {
clazz.clearEnclosingMethodAttribute();
}
@@ -322,7 +325,6 @@
// reflection. (Note that clearing these attributes can enable more vertical class merging.)
clazz.clearEnclosingMethodAttribute();
clazz.clearInnerClasses();
- clazz.clearClassSignature();
}
}
@@ -366,7 +368,7 @@
Map<DexType, DexProgramClass> enclosingClasses = new IdentityHashMap<>();
Set<DexProgramClass> genericClasses = Sets.newIdentityHashSet();
for (DexProgramClass clazz : appView.appInfo().classes()) {
- if (clazz.getClassSignature().hasSignature()) {
+ if (hasSignatureAnnotation(clazz, appView.dexItemFactory())) {
genericClasses.add(clazz);
}
for (InnerClassAttribute innerClassAttribute : clazz.getInnerClasses()) {
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticClassBuilder.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticClassBuilder.java
index 80c47f2..1091d09 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticClassBuilder.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticClassBuilder.java
@@ -15,7 +15,6 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
import com.android.tools.r8.graph.EnclosingMethodAttribute;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.InnerClassAttribute;
import com.android.tools.r8.graph.NestHostClassAttribute;
import com.android.tools.r8.graph.NestMemberClassAttribute;
@@ -72,6 +71,7 @@
List<NestMemberClassAttribute> nestMembers = Collections.emptyList();
EnclosingMethodAttribute enclosingMembers = null;
List<InnerClassAttribute> innerClasses = Collections.emptyList();
+ DexAnnotationSet classAnnotations = DexAnnotationSet.empty();
DexEncodedField[] staticFields = DexEncodedField.EMPTY_ARRAY;
DexEncodedField[] instanceFields = DexEncodedField.EMPTY_ARRAY;
DexEncodedMethod[] directMethods = DexEncodedMethod.EMPTY_ARRAY;
@@ -106,8 +106,7 @@
nestMembers,
enclosingMembers,
innerClasses,
- ClassSignature.NO_CLASS_SIGNATURE,
- DexAnnotationSet.empty(),
+ classAnnotations,
staticFields,
instanceFields,
directMethods,
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 091325a..af11559 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1280,7 +1280,6 @@
public int verificationSizeLimitInBytesOverride = -1;
public boolean forceIRForCfToCfDesugar =
System.getProperty("com.android.tools.r8.forceIRForCfToCfDesugar") != null;
- public boolean disableMappingToOriginalProgramVerification = false;
// Flag to allow processing of resources in D8. A data resource consumer still needs to be
// specified.
diff --git a/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java b/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
index b3ff5a3..4baa16c 100644
--- a/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
+++ b/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.cf.bootstrap;
-import static com.android.tools.r8.graph.GenericSignatureIdentityTest.testParseSignaturesInJar;
import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
import static com.google.common.io.ByteStreams.toByteArray;
import static org.hamcrest.CoreMatchers.anyOf;
@@ -209,11 +208,6 @@
}
@Test
- public void testSignatures() throws Exception {
- testParseSignaturesInJar(r8R8Release.getFirst());
- }
-
- @Test
public void test() throws Exception {
expectThrowsWithHorizontalClassMerging();
Path helloJar = Paths.get(ToolHelper.EXAMPLES_BUILD_DIR, "hello" + JAR_EXTENSION);
diff --git a/src/test/java/com/android/tools/r8/dex/SharedClassWritingTest.java b/src/test/java/com/android/tools/r8/dex/SharedClassWritingTest.java
index b134ae5..b567056 100644
--- a/src/test/java/com/android/tools/r8/dex/SharedClassWritingTest.java
+++ b/src/test/java/com/android/tools/r8/dex/SharedClassWritingTest.java
@@ -25,7 +25,6 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
import com.android.tools.r8.graph.DirectMappedDexApplication;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.GraphLens;
import com.android.tools.r8.graph.InitClassLens;
import com.android.tools.r8.graph.LazyLoadedDexApplication;
@@ -113,7 +112,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
diff --git a/src/test/java/com/android/tools/r8/graph/GenericSignatureTest.java b/src/test/java/com/android/tools/r8/graph/GenericSignatureTest.java
index ddff057..366e98b 100644
--- a/src/test/java/com/android/tools/r8/graph/GenericSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/graph/GenericSignatureTest.java
@@ -43,28 +43,23 @@
@RunWith(Parameterized.class)
public class GenericSignatureTest extends TestBase {
- private final TestParameters parameters;
-
@Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build();
+ return getTestParameters().withNoneRuntime().build();
}
- public GenericSignatureTest(TestParameters parameters) {
- this.parameters = parameters;
- }
+ public GenericSignatureTest(TestParameters parameters) {}
@Test
public void test() throws Exception {
AndroidApp app =
- testForD8(parameters.getBackend())
+ testForD8()
.debug()
.addProgramClassesAndInnerClasses(
GenericSignatureTestClassA.class,
GenericSignatureTestClassB.class,
GenericSignatureTestClassCY.class,
GenericSignatureTestClassCYY.class)
- .setMinApi(parameters.getApiLevel())
.compile()
.app;
AppView<AppInfoWithLiveness> appView = computeAppViewWithLiveness(app);
@@ -108,7 +103,13 @@
// class <T:GenericSignatureTestClassA<T>.Y>CYY<T extends A<T>.Y> extends CY<T>
DexClass clazz = cyy.getDexProgramClass();
assertNotNull(clazz);
- classSignature = clazz.classSignature;
+ classSignature =
+ GenericSignature.parseClassSignature(
+ clazz.getType().getName(),
+ getGenericSignature(clazz, appView),
+ clazz.origin,
+ appView.dexItemFactory(),
+ appView.options().reporter);
assertNotNull(classSignature);
assertEquals(1, classSignature.formalTypeParameters.size());
diff --git a/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java b/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java
index 99b186f..0465bc5 100644
--- a/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java
+++ b/src/test/java/com/android/tools/r8/ir/conversion/CallGraphTestBase.java
@@ -12,7 +12,6 @@
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexTypeList;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.MethodAccessFlags;
import com.android.tools.r8.graph.ParameterAnnotationsList;
import com.android.tools.r8.graph.ProgramMethod;
@@ -36,7 +35,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
index fd09ef3..e03e056 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
@@ -46,7 +46,6 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexTypeList;
import com.android.tools.r8.graph.DirectMappedDexApplication;
-import com.android.tools.r8.graph.GenericSignature.ClassSignature;
import com.android.tools.r8.graph.GraphLens;
import com.android.tools.r8.graph.InitClassLens;
import com.android.tools.r8.graph.MethodAccessFlags;
@@ -831,7 +830,6 @@
Collections.emptyList(),
null,
Collections.emptyList(),
- ClassSignature.NO_CLASS_SIGNATURE,
DexAnnotationSet.empty(),
DexEncodedField.EMPTY_ARRAY,
DexEncodedField.EMPTY_ARRAY,
diff --git a/src/test/java/com/android/tools/r8/naming/MinifierClassSignatureTest.java b/src/test/java/com/android/tools/r8/naming/MinifierClassSignatureTest.java
index e3e965c..b2ec374 100644
--- a/src/test/java/com/android/tools/r8/naming/MinifierClassSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/naming/MinifierClassSignatureTest.java
@@ -322,9 +322,6 @@
ProguardKeepAttributes.SIGNATURE)
.addKeepAllClassesRuleWithAllowObfuscation()
.allowDiagnosticMessages()
- .addOptionsModification(
- internalOptions ->
- internalOptions.testing.disableMappingToOriginalProgramVerification = true)
.compile();
compileResult.assertNoInfoMessages();
diff --git a/src/test/java/com/android/tools/r8/naming/signature/SignatureOfMergedClassesTest.java b/src/test/java/com/android/tools/r8/naming/signature/SignatureOfMergedClassesTest.java
index 7511e28..01a95ba 100644
--- a/src/test/java/com/android/tools/r8/naming/signature/SignatureOfMergedClassesTest.java
+++ b/src/test/java/com/android/tools/r8/naming/signature/SignatureOfMergedClassesTest.java
@@ -58,7 +58,7 @@
L.class,
ImplL.class)
.addKeepMainRule(Main.class)
- .addKeepClassRules(InterfaceToKeep.class, ImplI.class, K.class)
+ .addKeepClassRules(InterfaceToKeep.class)
.addKeepAttributes("Signature, InnerClasses, EnclosingMethod, *Annotation*")
.setMinApi(parameters.getApiLevel())
.noMinification()
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java b/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
index d1e934f..6a5b949 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
@@ -245,10 +245,12 @@
}
public String getOriginalSignatureAttribute(
- String finalSignature, BiConsumer<GenericSignatureParser, String> parse) {
+ DexAnnotationSet annotations, BiConsumer<GenericSignatureParser, String> parse) {
+ String finalSignature = getFinalSignatureAttribute(annotations);
if (finalSignature == null || mapping == null) {
return finalSignature;
}
+
GenericSignatureGenerator rewriter = new GenericSignatureGenerator();
GenericSignatureParser<String> parser = new GenericSignatureParser<>(rewriter);
parse.accept(parser, finalSignature);
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
index 8e961c7..ab1d03b 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
@@ -359,12 +359,12 @@
@Override
public String getOriginalSignatureAttribute() {
return codeInspector.getOriginalSignatureAttribute(
- dexClass.getClassSignature().toString(), GenericSignatureParser::parseClassSignature);
+ dexClass.annotations(), GenericSignatureParser::parseClassSignature);
}
@Override
public String getFinalSignatureAttribute() {
- return dexClass.getClassSignature().toString();
+ return codeInspector.getFinalSignatureAttribute(dexClass.annotations());
}
@Override
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
index 9ef7938..411dad2 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
@@ -134,8 +134,7 @@
@Override
public String getOriginalSignatureAttribute() {
return codeInspector.getOriginalSignatureAttribute(
- codeInspector.getFinalSignatureAttribute(dexField.annotations()),
- GenericSignatureParser::parseFieldSignature);
+ dexField.annotations(), GenericSignatureParser::parseFieldSignature);
}
@Override
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
index 4e49582..536aa5e3 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
@@ -186,8 +186,7 @@
@Override
public String getOriginalSignatureAttribute() {
return codeInspector.getOriginalSignatureAttribute(
- codeInspector.getFinalSignatureAttribute(dexMethod.annotations()),
- GenericSignatureParser::parseMethodSignature);
+ dexMethod.annotations(), GenericSignatureParser::parseMethodSignature);
}
public DexMethod getOriginalDexMethod(DexItemFactory dexItemFactory) {