Fix record rewriting with repacking without obfuscation
Fixes: b/299446046
Change-Id: If3a8676bb49636641ccf9691400e05a0fd3fbe8d
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 3b492ed..1f751b2 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -761,14 +761,11 @@
timing.begin("Minification");
appView.setNamingLens(new Minifier(appView.withLiveness()).run(executorService, timing));
timing.end();
- }
- appView.appInfo().notifyMinifierFinished();
-
- if (!options.isMinifying()
- && appView.appInfo().app().getFlags().hasReadRecordReferenceFromProgramClass()) {
+ } else {
new Minifier(appView.withLiveness())
.replaceDexItemBasedConstString(executorService, timing);
}
+ appView.appInfo().notifyMinifierFinished();
assert verifyMovedMethodsHaveOriginalMethodPosition(appView, getDirectApp(appView));
diff --git a/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java b/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java
index fce5c53..e3affd7 100644
--- a/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java
@@ -23,7 +23,6 @@
import com.android.tools.r8.graph.DexValue.DexValueString;
import com.android.tools.r8.graph.ProgramMethod;
import com.android.tools.r8.ir.desugar.records.RecordCfToCfRewriter;
-import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.shaking.ProguardClassFilter;
import com.android.tools.r8.utils.ArrayUtils;
import com.android.tools.r8.utils.DescriptorUtils;
@@ -39,12 +38,12 @@
*/
class IdentifierMinifier {
- private final AppView<AppInfoWithLiveness> appView;
+ private final AppView<?> appView;
private final ProguardClassFilter adaptClassStrings;
private final RecordCfToCfRewriter recordCfToCfRewriter;
private final NamingLens lens;
- IdentifierMinifier(AppView<AppInfoWithLiveness> appView, NamingLens lens) {
+ IdentifierMinifier(AppView<?> appView, NamingLens lens) {
this.appView = appView;
this.adaptClassStrings = appView.options().getProguardConfiguration().getAdaptClassStrings();
this.recordCfToCfRewriter = RecordCfToCfRewriter.create(appView);
diff --git a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
index 862728b..88bb9a8 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordTest.java
@@ -4,11 +4,9 @@
package com.android.tools.r8.desugar.records;
-import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;
-import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestRuntime.CfVm;
@@ -76,32 +74,25 @@
@Test
public void testR8() throws Exception {
- try {
- // TODO(b/288360309): Correctly deal with non-identity lenses in R8 record rewriting.
- assumeTrue(parameters.isDexRuntime());
- parameters.assumeR8TestParameters();
- testForR8(parameters.getBackend())
- .addProgramClassFileData(PROGRAM_DATA)
- .addKeepMainRule(MAIN_TYPE)
- .applyIf(
- parameters.isCfRuntime(),
- testBuilder ->
- testBuilder.addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp)))
- .minification(enableMinification)
- .applyIf(enableRepackaging, b -> b.addKeepRules("-repackageclasses p"))
- .setMinApi(parameters)
- .compile()
- .applyIf(
- parameters.isCfRuntime(),
- compileResult -> compileResult.inspect(RecordTestUtils::assertRecordsAreRecords))
- .run(parameters.getRuntime(), MAIN_TYPE)
- .assertSuccessWithOutput(
- enableMinification
- ? EXPECTED_RESULT_R8_MINIFICATION
- : EXPECTED_RESULT_R8_NO_MINIFICATION);
- assertTrue(!enableRepackaging || enableMinification);
- } catch (CompilationFailedException e) {
- assertTrue(enableRepackaging && !enableMinification);
- }
+ assumeTrue(parameters.isDexRuntime());
+ parameters.assumeR8TestParameters();
+ testForR8(parameters.getBackend())
+ .addProgramClassFileData(PROGRAM_DATA)
+ .addKeepMainRule(MAIN_TYPE)
+ .applyIf(
+ parameters.isCfRuntime(),
+ testBuilder -> testBuilder.addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp)))
+ .minification(enableMinification)
+ .applyIf(enableRepackaging, b -> b.addKeepRules("-repackageclasses p"))
+ .setMinApi(parameters)
+ .compile()
+ .applyIf(
+ parameters.isCfRuntime(),
+ compileResult -> compileResult.inspect(RecordTestUtils::assertRecordsAreRecords))
+ .run(parameters.getRuntime(), MAIN_TYPE)
+ .assertSuccessWithOutput(
+ enableMinification
+ ? EXPECTED_RESULT_R8_MINIFICATION
+ : EXPECTED_RESULT_R8_NO_MINIFICATION);
}
}