Revert "Move rewriting of Kotlin Metadata out of minifiers"
This reverts commit a4439bc8eff988e247de43a112eb876f60955ab0.
Reason for revert: ClassCastException due to implicit cast.
Change-Id: I4bb9e5ec53580baf4c2cc19aa0187f3a82305649
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 903e8b5..8f6bcca 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -51,7 +51,6 @@
import com.android.tools.r8.ir.optimize.enums.EnumValueInfoMapCollector;
import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackSimple;
import com.android.tools.r8.jar.CfApplicationWriter;
-import com.android.tools.r8.kotlin.KotlinMetadataRewriter;
import com.android.tools.r8.kotlin.KotlinMetadataUtils;
import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.naming.Minifier;
@@ -806,10 +805,6 @@
namingLens = NamingLens.getIdentityLens();
}
- timing.begin("MinifyKotlinMetadata");
- new KotlinMetadataRewriter(appView.withLiveness(), namingLens).run(executorService);
- timing.end();
-
timing.begin("Line number remapping");
// When line number optimization is turned off the identity mapping for line numbers is
// used. We still run the line number optimizer to collect line numbers and inline frame
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 2ee7485..182de8d 100644
--- a/src/main/java/com/android/tools/r8/naming/Minifier.java
+++ b/src/main/java/com/android/tools/r8/naming/Minifier.java
@@ -17,6 +17,7 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.ProgramField;
import com.android.tools.r8.graph.SubtypingInfo;
+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,6 +89,10 @@
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 57f63fa..515d21f 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
@@ -19,6 +19,7 @@
import com.android.tools.r8.graph.ProgramField;
import com.android.tools.r8.graph.SubtypingInfo;
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;
@@ -174,6 +175,10 @@
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/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java
index 2a33484..39e9d12 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java
@@ -6,13 +6,15 @@
import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static junit.framework.TestCase.assertEquals;
+import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
+import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -83,23 +85,24 @@
Path libJar =
testForR8(parameters.getBackend())
.addProgramFiles(libJars.get(targetVersion))
- .addKeepRules("-keep class " + PKG_LIB + ".Sub { <init>(); *** kept(); }")
+ .addKeepRules("-keep class " + PKG_LIB + ".Sub { *** kept(); }")
.addKeepRuntimeVisibleAnnotations()
.noMinification()
.compile()
.inspect(this::checkPruned)
.writeToZip();
- Path output =
+ // TODO(b/158766557): This should work.
+ ProcessResult mainResult =
kotlinc(parameters.getRuntime().asCf(), KOTLINC, targetVersion)
.addClasspathFiles(libJar)
.addSourceFiles(
getKotlinFileInTest(DescriptorUtils.getBinaryNameFromJavaType(PKG_APP), "main"))
- .compile();
- testForJvm()
- .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(), libJar)
- .addProgramFiles(output)
- .run(parameters.getRuntime(), PKG_APP + ".MainKt")
- .assertSuccessWithOutput(EXPECTED);
+ .setOutputPath(temp.newFolder().toPath())
+ .compileRaw();
+ assertEquals(1, mainResult.exitCode);
+ assertThat(
+ mainResult.stderr,
+ containsString("cannot access 'com.android.tools.r8.kotlin.metadata.pruned_lib.Base'"));
}
private void checkPruned(CodeInspector inspector) {
@@ -109,7 +112,6 @@
assertThat(sub, isPresent());
KmClassSubject kmClass = sub.getKmClass();
assertThat(kmClass, isPresent());
- assertEquals(0, kmClass.getSuperTypes().size());
- assertThat(kmClass.kmFunctionWithUniqueName("notKept"), not(isPresent()));
+ // TODO(b/158766557): Assert that things are indeed removed.
}
}