Revert "Check for inner class attribute before writing kotlin class name"
This reverts commit e2f2d30887b263417bc4e2b09488ba30e4beca9d.
Reason for revert: Failing kotlin coroutines test runner
Change-Id: I76017db49578ef6b68dd9501dd9a89632f9139d0
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
index 5b10234..e440049 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
@@ -16,7 +16,6 @@
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.naming.NamingLens;
-import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.Pair;
import com.android.tools.r8.utils.Reporter;
@@ -222,24 +221,14 @@
// Set potentially renamed class name.
DexString originalDescriptor = clazz.type.descriptor;
DexString rewrittenDescriptor = namingLens.lookupDescriptor(clazz.type);
- String rewrittenName = null;
- // When the class has an anonymousObjectOrigin and the name equals the identifier there, we
- // keep the name tied to the anonymousObjectOrigin.
- if (anonymousObjectOrigin != null
- && name.equals(anonymousObjectOrigin.toKotlinClassifier(true))) {
- Box<String> rewrittenOrigin = new Box<>();
- anonymousObjectOrigin.toRenamedBinaryNameOrDefault(
- rewrittenOrigin::set, appView, namingLens, null);
- if (rewrittenOrigin.isSet()) {
- rewrittenName = "." + rewrittenOrigin.get();
- }
- }
- if (rewrittenName == null) {
- rewrittenName = KotlinMetadataUtils.getKotlinClassName(clazz, rewrittenDescriptor.toString());
- }
- kmClass.setName(rewrittenName);
- boolean rewritten =
- !originalDescriptor.equals(rewrittenDescriptor) || !name.equals(rewrittenName);
+ // If the original descriptor equals the rewritten descriptor, we pick the original name
+ // to preserve potential errors in the original name. As an example, the kotlin stdlib has
+ // name: .kotlin/collections/CollectionsKt___CollectionsKt$groupingBy$1, which seems incorrect.
+ boolean rewritten = !originalDescriptor.equals(rewrittenDescriptor);
+ kmClass.setName(
+ !rewritten
+ ? this.name
+ : DescriptorUtils.getBinaryNameFromDescriptor(rewrittenDescriptor.toString()));
// Find a companion object.
for (DexEncodedField field : clazz.fields()) {
if (field.getKotlinInfo().isCompanion()) {
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassifierInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassifierInfo.java
index 9b2939e..5f5b696 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassifierInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassifierInfo.java
@@ -4,8 +4,6 @@
package com.android.tools.r8.kotlin;
-import static com.android.tools.r8.kotlin.KotlinMetadataUtils.getKotlinLocalOrAnonymousNameFromDescriptor;
-
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexDefinitionSupplier;
import com.android.tools.r8.graph.DexItemFactory;
@@ -70,8 +68,13 @@
boolean rewrite(KmTypeVisitor visitor, AppView<?> appView, NamingLens namingLens) {
return type.toRenamedDescriptorOrDefault(
descriptor -> {
- visitor.visitClass(
- getKotlinLocalOrAnonymousNameFromDescriptor(descriptor, isLocalOrAnonymous));
+ // For local or anonymous classes, the classifier is prefixed with '.' and inner classes
+ // are separated with '$'.
+ if (isLocalOrAnonymous) {
+ visitor.visitClass("." + DescriptorUtils.getBinaryNameFromDescriptor(descriptor));
+ } else {
+ visitor.visitClass(DescriptorUtils.descriptorToKotlinClassifier(descriptor));
+ }
},
appView,
namingLens,
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataUtils.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataUtils.java
index 2d6f39a..7eb45f6 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataUtils.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataUtils.java
@@ -13,7 +13,6 @@
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.InnerClassAttribute;
import com.android.tools.r8.naming.NamingLens;
import com.android.tools.r8.shaking.ProguardConfiguration;
import com.android.tools.r8.shaking.ProguardConfigurationRule;
@@ -202,27 +201,4 @@
// Check if the type is matched
return proguardKeepRule.getClassNames().matches(factory.kotlinMetadataType);
}
-
- static String getKotlinClassName(DexClass clazz, String descriptor) {
- InnerClassAttribute innerClassAttribute = clazz.getInnerClassAttributeForThisClass();
- if (innerClassAttribute != null && innerClassAttribute.getOuter() != null) {
- return DescriptorUtils.descriptorToKotlinClassifier(descriptor);
- } else if (clazz.isLocalClass() || clazz.isAnonymousClass()) {
- return getKotlinLocalOrAnonymousNameFromDescriptor(descriptor, true);
- } else {
- // We no longer have an innerclass relationship to maintain and we therefore return a binary
- // name.
- return DescriptorUtils.getBinaryNameFromDescriptor(descriptor);
- }
- }
-
- static String getKotlinLocalOrAnonymousNameFromDescriptor(
- String descriptor, boolean isLocalOrAnonymous) {
- // For local or anonymous classes, the classifier is prefixed with '.' and inner classes
- // are separated with '$'.
- if (isLocalOrAnonymous) {
- return "." + DescriptorUtils.getBinaryNameFromDescriptor(descriptor);
- }
- return DescriptorUtils.descriptorToKotlinClassifier(descriptor);
- }
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinTypeReference.java b/src/main/java/com/android/tools/r8/kotlin/KotlinTypeReference.java
index c166103..4d0d990 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinTypeReference.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinTypeReference.java
@@ -4,8 +4,6 @@
package com.android.tools.r8.kotlin;
-import static com.android.tools.r8.kotlin.KotlinMetadataUtils.getKotlinLocalOrAnonymousNameFromDescriptor;
-
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexDefinitionSupplier;
import com.android.tools.r8.graph.DexItemFactory;
@@ -83,14 +81,6 @@
return !known.toDescriptorString().equals(renamedString);
}
- String toKotlinClassifier(boolean isLocalOrAnonymous) {
- if (known == null) {
- return unknown;
- }
- return getKotlinLocalOrAnonymousNameFromDescriptor(
- known.toDescriptorString(), isLocalOrAnonymous);
- }
-
boolean toRenamedBinaryNameOrDefault(
Consumer<String> rewrittenConsumer,
AppView<?> appView,
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInnerClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInnerClassTest.java
index 48007f1..c38a3d7 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInnerClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInnerClassTest.java
@@ -26,19 +26,17 @@
@RunWith(Parameterized.class)
public class MetadataRewriteInnerClassTest extends KotlinMetadataTestBase {
- private static final String PKG_NESTED_REFLECT = PKG + ".nested_reflect";
private static final String EXPECTED =
StringUtils.lines(
- "fun <init>(kotlin.Int): " + PKG_NESTED_REFLECT + ".Outer.Nested",
- "fun "
- + PKG_NESTED_REFLECT
- + ".Outer.Inner.<init>(kotlin.Int): "
- + PKG_NESTED_REFLECT
- + ".Outer.Inner");
+ "fun <init>(kotlin.Int):"
+ + " com.android.tools.r8.kotlin.metadata.nested_reflect.Outer.Nested",
+ "fun com.android.tools.r8.kotlin.metadata.nested_reflect.Outer.Inner.<init>(kotlin.Int):"
+ + " com.android.tools.r8.kotlin.metadata.nested_reflect.Outer.Inner");
private static final String EXPECTED_OUTER_RENAMED =
StringUtils.lines(
- "fun <init>(kotlin.Int): " + PKG_NESTED_REFLECT + ".`Outer$Nested`",
- "fun <init>(kotlin.Int): " + PKG_NESTED_REFLECT + ".`Outer$Inner`");
+ "fun <init>(kotlin.Int): com.android.tools.r8.kotlin.metadata.nested_reflect.Nested",
+ "fun <init>(kotlin.Int): com.android.tools.r8.kotlin.metadata.nested_reflect.Inner");
+ private static final String PKG_NESTED_REFLECT = PKG + ".nested_reflect";
private final TestParameters parameters;
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java
index 2c378c6..605b16c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java
@@ -93,10 +93,7 @@
.addProgramFiles(kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
.addClasspathFiles(getKotlinStdlibJar(kotlinc), getKotlinAnnotationJar(kotlinc))
.addKeepAllClassesRule()
- .addKeepAttributes(
- ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS,
- ProguardKeepAttributes.INNER_CLASSES,
- ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
index 44092e7..80578a3 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
@@ -77,10 +77,7 @@
.setMinApi(parameters.getApiLevel())
.addKeepAllClassesRule()
.addKeepKotlinMetadata()
- .addKeepAttributes(
- ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS,
- ProguardKeepAttributes.INNER_CLASSES,
- ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.allowDiagnosticWarningMessages()
.compile()
.assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))