Revert recent changes to update Kotlin metadata
Still failures on the bots.
Revert "Remove dead supertype in kotlin metadata."
This reverts commit 6bb0c532984c05ad74dd97c60ce7f2616a108366.
Revert "Add a unified way to remove kotlin metadata from renamed classes."
This reverts commit df71f23720081c3a932dcadf2bc5c3a551f4f396.
Bug: 143687784, 70169921
Change-Id: Ic1ab551fd2a5b15656134c4a706b8ce92ea73948
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
index a83c407..92ba6a0 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
@@ -4,22 +4,11 @@
package com.android.tools.r8.kotlin;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.naming.NamingLens;
-import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import com.android.tools.r8.utils.Box;
-import com.android.tools.r8.utils.DescriptorUtils;
-import kotlinx.metadata.KmClass;
-import kotlinx.metadata.KmTypeVisitor;
-import kotlinx.metadata.jvm.KotlinClassHeader;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public class KotlinClass extends KotlinInfo<KotlinClassMetadata.Class> {
- private KmClass kmClass;
-
static KotlinClass fromKotlinClassMetadata(
KotlinClassMetadata kotlinClassMetadata, DexClass clazz) {
assert kotlinClassMetadata instanceof KotlinClassMetadata.Class;
@@ -35,35 +24,7 @@
void processMetadata() {
assert !isProcessed;
isProcessed = true;
- kmClass = metadata.toKmClass();
- }
-
- @Override
- void rewrite(AppView<AppInfoWithLiveness> appView, NamingLens lens) {
- kmClass.getSupertypes().removeIf(
- kmType -> {
- Box<Boolean> isLive = new Box<>(false);
- kmType.accept(new KmTypeVisitor() {
- @Override
- public void visitClass(String name) {
- String descriptor = DescriptorUtils.javaTypeToDescriptorIfValidJavaType(name);
- if (descriptor != null) {
- DexType type = appView.dexItemFactory().createType(name);
- DexType renamedType = lens.lookupType(type, appView.dexItemFactory());
- isLive.set(appView.appInfo().isLiveProgramType(renamedType));
- }
- }
- });
- return !isLive.get();
- }
- );
- }
-
- @Override
- KotlinClassHeader createHeader() {
- KotlinClassMetadata.Class.Writer writer = new KotlinClassMetadata.Class.Writer();
- kmClass.accept(writer);
- return writer.write().getHeader();
+ // TODO(b/70169921): once migration is complete, use #toKmClass and store a mutable model.
}
@Override
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
index 6429a50..0bd545c 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
@@ -4,11 +4,6 @@
package com.android.tools.r8.kotlin;
-import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.naming.NamingLens;
-import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import kotlinx.metadata.jvm.KotlinClassHeader;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public final class KotlinClassFacade extends KotlinInfo<KotlinClassMetadata.MultiFileClassFacade> {
@@ -32,16 +27,6 @@
}
@Override
- void rewrite(AppView<AppInfoWithLiveness> appView, NamingLens lens) {
- throw new Unreachable(toString());
- }
-
- @Override
- KotlinClassHeader createHeader() {
- throw new Unreachable(toString());
- }
-
- @Override
public Kind getKind() {
return Kind.Facade;
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java
index dc3161c..6004201 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java
@@ -79,11 +79,11 @@
if (kMetadata instanceof KotlinClassMetadata.Class) {
return KotlinClass.fromKotlinClassMetadata(kMetadata, clazz);
} else if (kMetadata instanceof KotlinClassMetadata.FileFacade) {
- return KotlinFile.fromKotlinClassMetadata(kMetadata, clazz);
+ return KotlinFile.fromKotlinClassMetadata(kMetadata);
} else if (kMetadata instanceof KotlinClassMetadata.MultiFileClassFacade) {
return KotlinClassFacade.fromKotlinClassMetadata(kMetadata);
} else if (kMetadata instanceof KotlinClassMetadata.MultiFileClassPart) {
- return KotlinClassPart.fromKotlinClassMetadata(kMetadata);
+ return KotlinClassPart.fromKotlinClassMetdata(kMetadata);
} else if (kMetadata instanceof KotlinClassMetadata.SyntheticClass) {
return KotlinSyntheticClass.fromKotlinClassMetadata(kMetadata, kotlin, clazz);
} else {
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
index 96c1022..1ae3db8 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
@@ -4,18 +4,11 @@
package com.android.tools.r8.kotlin;
-import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.naming.NamingLens;
-import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import kotlinx.metadata.KmPackage;
-import kotlinx.metadata.jvm.KotlinClassHeader;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public final class KotlinClassPart extends KotlinInfo<KotlinClassMetadata.MultiFileClassPart> {
- private KmPackage kmPackage;
-
- static KotlinClassPart fromKotlinClassMetadata(KotlinClassMetadata kotlinClassMetadata) {
+ static KotlinClassPart fromKotlinClassMetdata(KotlinClassMetadata kotlinClassMetadata) {
assert kotlinClassMetadata instanceof KotlinClassMetadata.MultiFileClassPart;
KotlinClassMetadata.MultiFileClassPart multiFileClassPart =
(KotlinClassMetadata.MultiFileClassPart) kotlinClassMetadata;
@@ -30,20 +23,7 @@
void processMetadata() {
assert !isProcessed;
isProcessed = true;
- kmPackage = metadata.toKmPackage();
- }
-
- @Override
- void rewrite(AppView<AppInfoWithLiveness> appView, NamingLens lens) {
- // TODO(b/70169921): no idea yet!
- assert lens.lookupType(clazz.type, appView.dexItemFactory()) == clazz.type
- : toString();
- }
-
- @Override
- KotlinClassHeader createHeader() {
- // TODO(b/70169921): may need to update if `rewrite` is implemented.
- return metadata.getHeader();
+ // TODO(b/70169921): once migration is complete, use #toKmPackage and store a mutable model.
}
@Override
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
index e2bb332..c22dcdb 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
@@ -4,48 +4,26 @@
package com.android.tools.r8.kotlin;
-import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.naming.NamingLens;
-import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import kotlinx.metadata.KmPackage;
-import kotlinx.metadata.jvm.KotlinClassHeader;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public final class KotlinFile extends KotlinInfo<KotlinClassMetadata.FileFacade> {
- private KmPackage kmPackage;
-
- static KotlinFile fromKotlinClassMetadata(
- KotlinClassMetadata kotlinClassMetadata, DexClass clazz) {
+ static KotlinFile fromKotlinClassMetadata(KotlinClassMetadata kotlinClassMetadata) {
assert kotlinClassMetadata instanceof KotlinClassMetadata.FileFacade;
KotlinClassMetadata.FileFacade fileFacade =
(KotlinClassMetadata.FileFacade) kotlinClassMetadata;
- return new KotlinFile(fileFacade, clazz);
+ return new KotlinFile(fileFacade);
}
- private KotlinFile(KotlinClassMetadata.FileFacade metadata, DexClass clazz) {
- super(metadata, clazz);
+ private KotlinFile(KotlinClassMetadata.FileFacade metadata) {
+ super(metadata);
}
@Override
void processMetadata() {
assert !isProcessed;
isProcessed = true;
- kmPackage = metadata.toKmPackage();
- }
-
- @Override
- void rewrite(AppView<AppInfoWithLiveness> appView, NamingLens lens) {
- // TODO(b/70169921): no idea yet!
- assert lens.lookupType(clazz.type, appView.dexItemFactory()) == clazz.type
- : toString();
- }
-
- @Override
- KotlinClassHeader createHeader() {
- // TODO(b/70169921): may need to update if `rewrite` is implemented.
- return metadata.getHeader();
+ // TODO(b/70169921): once migration is complete, use #toKmPackage and store a mutable model.
}
@Override
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
index ac69eff..6603357 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
@@ -4,11 +4,7 @@
package com.android.tools.r8.kotlin;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.naming.NamingLens;
-import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import kotlinx.metadata.jvm.KotlinClassHeader;
import kotlinx.metadata.jvm.KotlinClassMetadata;
// Provides access to kotlin information.
@@ -24,17 +20,11 @@
KotlinInfo(MetadataKind metadata, DexClass clazz) {
this.metadata = metadata;
this.clazz = clazz;
- processMetadata();
}
// Subtypes will define how to process the given metadata.
abstract void processMetadata();
- // Subtypes will define how to rewrite metadata after shrinking and minification.
- abstract void rewrite(AppView<AppInfoWithLiveness> appView, NamingLens lens);
-
- abstract KotlinClassHeader createHeader();
-
public enum Kind {
Class, File, Synthetic, Part, Facade
}
@@ -80,9 +70,4 @@
public KotlinClassFacade asClassFacade() {
return null;
}
-
- @Override
- public String toString() {
- return clazz.toSourceString() + ": " + metadata.toString();
- }
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
deleted file mode 100644
index bf03584..0000000
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright (c) 2019, 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.kotlin;
-
-import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexAnnotation;
-import com.android.tools.r8.graph.DexAnnotationElement;
-import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.graph.DexEncodedAnnotation;
-import com.android.tools.r8.graph.DexItemFactory;
-import com.android.tools.r8.graph.DexValue;
-import com.android.tools.r8.graph.DexValue.DexValueArray;
-import com.android.tools.r8.graph.DexValue.DexValueInt;
-import com.android.tools.r8.graph.DexValue.DexValueString;
-import com.android.tools.r8.naming.NamingLens;
-import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import com.android.tools.r8.utils.ThreadUtils;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import kotlinx.metadata.jvm.KotlinClassHeader;
-
-public class KotlinMetadataRewriter {
-
- private final AppView<AppInfoWithLiveness> appView;
- private final NamingLens lens;
- private final DexItemFactory factory;
- private final Kotlin kotlin;
-
- public KotlinMetadataRewriter(AppView<AppInfoWithLiveness> appView, NamingLens lens) {
- this.appView = appView;
- this.lens = lens;
- this.factory = appView.dexItemFactory();
- this.kotlin = factory.kotlin;
- }
-
- public static void removeKotlinMetadataFromRenamedClass(AppView<?> appView, DexClass clazz) {
- // Remove @Metadata in DexAnnotation form if a class is renamed.
- clazz.annotations = clazz.annotations.keepIf(anno -> isNotKotlinMetadata(appView, anno));
- // Clear associated {@link KotlinInfo} to avoid accidentally deserialize it back to
- // DexAnnotation we've just removed above.
- if (clazz.isProgramClass()) {
- clazz.asProgramClass().setKotlinInfo(null);
- }
- }
-
- private static boolean isNotKotlinMetadata(AppView<?> appView, DexAnnotation annotation) {
- return annotation.annotation.type
- != appView.dexItemFactory().kotlin.metadata.kotlinMetadataType;
- }
-
- public void run(ExecutorService executorService) throws ExecutionException {
- ThreadUtils.processItems(
- appView.appInfo().classes(),
- clazz -> {
- KotlinInfo<?> kotlinInfo = clazz.getKotlinInfo();
- if (kotlinInfo != null) {
- assert kotlinInfo.isClass()
- || kotlinInfo.isSyntheticClass()
- || kotlinInfo.isFile(); // e.g., B.kt becomes class `BKt`
- // If @Metadata is still associated, this class should not be renamed
- // (by {@link ClassNameMinifier} of course).
- assert lens.lookupType(clazz.type, appView.dexItemFactory()) == clazz.type
- : clazz.toSourceString() + " != "
- + lens.lookupType(clazz.type, appView.dexItemFactory());
-
- DexAnnotation oldMeta =
- clazz.annotations.getFirstMatching(kotlin.metadata.kotlinMetadataType);
- // If @Metadata is already gone, e.g., by {@link AnnotationRemover} if type Metadata is
- // determined as dead (e.g., due to no keep rule), nothing to do.
- if (oldMeta == null) {
- return;
- }
-
- kotlinInfo.rewrite(appView, lens);
-
- DexAnnotation newMeta = createKotlinMetadataAnnotation(kotlinInfo.createHeader());
- clazz.annotations = clazz.annotations.rewrite(anno -> anno == oldMeta ? newMeta : anno);
- }
- },
- executorService
- );
- }
-
- private DexAnnotation createKotlinMetadataAnnotation(KotlinClassHeader header) {
- List<DexAnnotationElement> elements = new ArrayList<>();
- elements.add(
- new DexAnnotationElement(kotlin.metadata.kind, DexValueInt.create(header.getKind())));
- elements.add(
- new DexAnnotationElement(
- kotlin.metadata.metadataVersion, createIntArray(header.getMetadataVersion())));
- elements.add(
- new DexAnnotationElement(
- kotlin.metadata.bytecodeVersion, createIntArray(header.getBytecodeVersion())));
- elements.add(
- new DexAnnotationElement(kotlin.metadata.data1, createStringArray(header.getData1())));
- elements.add(
- new DexAnnotationElement(kotlin.metadata.data2, createStringArray(header.getData2())));
- elements.add(
- new DexAnnotationElement(
- kotlin.metadata.extraString,
- new DexValueString(factory.createString(header.getExtraString()))));
- elements.add(
- new DexAnnotationElement(
- kotlin.metadata.packageName,
- new DexValueString(factory.createString(header.getPackageName()))));
- elements.add(
- new DexAnnotationElement(
- kotlin.metadata.extraInt, DexValueInt.create(header.getExtraInt())));
- DexEncodedAnnotation encodedAnnotation =
- new DexEncodedAnnotation(
- kotlin.metadata.kotlinMetadataType, elements.toArray(DexAnnotationElement.EMPTY_ARRAY));
- return new DexAnnotation(DexAnnotation.VISIBILITY_RUNTIME, encodedAnnotation);
- }
-
- private DexValueArray createIntArray(int[] data) {
- DexValue[] values = new DexValue[data.length];
- for (int i = 0; i < data.length; i++) {
- values[i] = DexValueInt.create(data[i]);
- }
- return new DexValueArray(values);
- }
-
- private DexValueArray createStringArray(String[] data) {
- DexValue[] values = new DexValue[data.length];
- for (int i = 0; i < data.length; i++) {
- values[i] = new DexValueString(factory.createString(data[i]));
- }
- return new DexValueArray(values);
- }
-}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
index e732d04..fa65464 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
@@ -4,11 +4,7 @@
package com.android.tools.r8.kotlin;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.naming.NamingLens;
-import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import kotlinx.metadata.jvm.KotlinClassHeader;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public final class KotlinSyntheticClass extends KotlinInfo<KotlinClassMetadata.SyntheticClass> {
@@ -44,23 +40,10 @@
assert !isProcessed;
isProcessed = true;
if (metadata.isLambda()) {
- // TODO(b/70169921): Use #toKmLambda to store a mutable model if needed.
+ // TODO(b/70169921): once migration is complete, use #toKmLambda and store a mutable model.
}
}
- @Override
- void rewrite(AppView<AppInfoWithLiveness> appView, NamingLens lens) {
- // TODO(b/70169921): no idea yet!
- assert lens.lookupType(clazz.type, appView.dexItemFactory()) == clazz.type
- : toString();
- }
-
- @Override
- KotlinClassHeader createHeader() {
- // TODO(b/70169921): may need to update if `rewrite` is implemented.
- return metadata.getHeader();
- }
-
public boolean isLambda() {
return isKotlinStyleLambda() || isJavaStyleLambda();
}
diff --git a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
index b953376..ada50fa 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
@@ -10,6 +10,7 @@
import static com.android.tools.r8.utils.DescriptorUtils.getPackageBinaryNameFromJavaType;
import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexAnnotation;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexEncodedField;
import com.android.tools.r8.graph.DexEncodedMethod;
@@ -17,7 +18,6 @@
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.InnerClassAttribute;
-import com.android.tools.r8.kotlin.KotlinMetadataRewriter;
import com.android.tools.r8.naming.signature.GenericSignatureRewriter;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.shaking.ProguardPackageNameList;
@@ -110,24 +110,16 @@
timing.begin("rename-classes");
for (DexClass clazz : classes) {
if (!renaming.containsKey(clazz.type)) {
+ clazz.annotations = clazz.annotations.keepIf(this::isNotKotlinMetadata);
DexString renamed = computeName(clazz.type);
renaming.put(clazz.type, renamed);
- KotlinMetadataRewriter.removeKotlinMetadataFromRenamedClass(appView, clazz);
// If the class is a member class and it has used $ separator, its renamed name should have
// the same separator (as long as inner-class attribute is honored).
assert !keepInnerClassStructure
|| !clazz.isMemberClass()
|| !clazz.type.getInternalName().contains(String.valueOf(INNER_CLASS_SEPARATOR))
|| renamed.toString().contains(String.valueOf(INNER_CLASS_SEPARATOR))
- || classNamingStrategy.isRenamedByApplyMapping(clazz.type)
- : clazz.toSourceString() + " -> " + renamed;
- } else if (renaming.get(clazz.type) != clazz.type.descriptor) {
- // This (outer) class could have been renamed to compute renamed prefix for inner classes.
- assert !clazz.getInnerClasses().isEmpty()
- // Or simply coming from -applymapping.
- || classNamingStrategy.isRenamedByApplyMapping(clazz.type)
- : clazz.toSourceString() + " -> " + renaming.get(clazz.type);
- KotlinMetadataRewriter.removeKotlinMetadataFromRenamedClass(appView, clazz);
+ || classNamingStrategy.isRenamedByApplyMapping(clazz.type);
}
}
timing.end();
@@ -450,4 +442,9 @@
}
return packagePrefix.substring(0, i);
}
+
+ private boolean isNotKotlinMetadata(DexAnnotation annotation) {
+ return annotation.annotation.type
+ != appView.dexItemFactory().kotlin.metadata.kotlinMetadataType;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/naming/Minifier.java b/src/main/java/com/android/tools/r8/naming/Minifier.java
index eb3a614..8dfe02c 100644
--- a/src/main/java/com/android/tools/r8/naming/Minifier.java
+++ b/src/main/java/com/android/tools/r8/naming/Minifier.java
@@ -17,7 +17,6 @@
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.kotlin.KotlinMetadataRewriter;
import com.android.tools.r8.naming.ClassNameMinifier.ClassNamingStrategy;
import com.android.tools.r8.naming.ClassNameMinifier.ClassRenaming;
import com.android.tools.r8.naming.ClassNameMinifier.PackageNamingStrategy;
@@ -88,11 +87,6 @@
timing.begin("MinifyIdentifiers");
new IdentifierMinifier(appView, lens).run(executorService);
timing.end();
-
- timing.begin("MinifyKotlinMetadata");
- new KotlinMetadataRewriter(appView, lens).run(executorService);
- timing.end();
-
return lens;
}
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
index 92df84f..8db8e01 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
@@ -17,7 +17,6 @@
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.ir.desugar.InterfaceMethodRewriter;
-import com.android.tools.r8.kotlin.KotlinMetadataRewriter;
import com.android.tools.r8.naming.ClassNameMinifier.ClassRenaming;
import com.android.tools.r8.naming.FieldNameMinifier.FieldRenaming;
import com.android.tools.r8.naming.MemberNaming.FieldSignature;
@@ -166,10 +165,6 @@
new IdentifierMinifier(appView, lens).run(executorService);
timing.end();
- timing.begin("MinifyKotlinMetadata");
- new KotlinMetadataRewriter(appView, lens).run(executorService);
- timing.end();
-
return lens;
}
@@ -185,12 +180,9 @@
Map<DexReference, MemberNaming> nonPrivateMembers = new IdentityHashMap<>();
if (classNaming != null) {
- // TODO(b/133091438) assert that !dexClass.isLibraryClass();
+ // TODO(b/133091438) assert that !dexClass.isLibaryClass();
DexString mappedName = factory.createString(classNaming.renamedName);
checkAndAddMappedNames(type, mappedName, classNaming.position);
- if (dexClass != null) {
- KotlinMetadataRewriter.removeKotlinMetadataFromRenamedClass(appView, dexClass);
- }
classNaming.forAllMemberNaming(
memberNaming -> addMemberNamings(type, memberNaming, nonPrivateMembers, false));
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRenameTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRenameTest.java
index c7ba86e..7ca821f 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRenameTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRenameTest.java
@@ -100,26 +100,26 @@
// API entry is kept, hence the presence of Metadata.
DexAnnotation metadata = retrieveMetadata(impl.getDexClass());
assertNotNull(metadata);
- assertThat(metadata.toString(), not(containsString("internal")));
- assertThat(metadata.toString(), not(containsString("Itf")));
+ // TODO(b/143687784): test its metadata doesn't point to shrunken itf.
});
Path r8ProcessedLibZip = temp.newFile("r8-lib.zip").toPath();
compileResult.writeToZip(r8ProcessedLibZip);
String appFolder = PKG_PREFIX + "/supertype_app";
- Path output =
+ ProcessResult kotlinTestCompileResult =
kotlinc(parameters.getRuntime().asCf())
.addClasspathFiles(r8ProcessedLibZip)
.addSourceFiles(getKotlinFileInTest(appFolder, "main"))
+ // TODO(b/143687784): update to just .compile() once fixed.
.setOutputPath(temp.newFolder().toPath())
- .compile();
+ .compileRaw();
- testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), r8ProcessedLibZip)
- .addClasspath(output)
- .run(parameters.getRuntime(), pkg + ".supertype_app.MainKt")
- .assertSuccessWithOutputLines("Impl::foo", "Program::foo");
+ // TODO(b/143687784): should be able to compile!
+ assertNotEquals(0, kotlinTestCompileResult.exitCode);
+ assertThat(
+ kotlinTestCompileResult.stderr,
+ containsString("unresolved supertypes: " + pkg + ".supertype_lib.internal.Itf"));
}
@Test
@@ -150,7 +150,7 @@
// API entry is kept, hence the presence of Metadata.
DexAnnotation metadata = retrieveMetadata(impl.getDexClass());
assertNotNull(metadata);
- assertThat(metadata.toString(), not(containsString("Super")));
+ // TODO(b/143687784): test its metadata doesn't point to shrunken Super.
});
Path r8ProcessedLibZip = temp.newFile("r8-lib.zip").toPath();
@@ -166,6 +166,9 @@
.compileRaw();
// TODO(b/143687784): should be able to compile!
assertNotEquals(0, kotlinTestCompileResult.exitCode);
+ assertThat(
+ kotlinTestCompileResult.stderr,
+ containsString("unresolved supertypes: " + pkg + ".extension_lib.Super"));
assertThat(kotlinTestCompileResult.stderr, containsString("unresolved reference: doStuff"));
}
}