Keep rules are not needed for Record when compiling to dex
Bug: 197081367
Change-Id: I473ff8539b36fa6752d724c24cd1c7332e8fc0c1
diff --git a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordAnnotationTest.java b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordAnnotationTest.java
index 16e1269..736d8c2 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/EmptyRecordAnnotationTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.desugar.records;
-import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE;
+import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE_R8_CF_TO_CF;
import static com.android.tools.r8.utils.InternalOptions.TestingOptions;
import com.android.tools.r8.TestBase;
@@ -69,9 +69,8 @@
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
.setMinApi(parameters.getApiLevel())
- .addKeepRules("-keepattributes *Annotation*")
.addKeepRules("-keep class records.EmptyRecordAnnotation { *; }")
- .addKeepRules(RECORD_KEEP_RULE)
+ .addKeepRules(RECORD_KEEP_RULE_R8_CF_TO_CF)
.addKeepMainRule(MAIN_TYPE)
.addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
@@ -87,8 +86,8 @@
.setMinApi(parameters.getApiLevel())
.addKeepRules("-keepattributes *Annotation*")
.addKeepRules("-keep class records.EmptyRecordAnnotation { *; }")
+ .addKeepRules("-keep class records.EmptyRecordAnnotation$Empty")
.addKeepRules("-keep class java.lang.Record")
- .addKeepRules(RECORD_KEEP_RULE)
.addKeepMainRule(MAIN_TYPE)
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
.compile()
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 97d9f66..1e3e87a 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,7 +4,7 @@
package com.android.tools.r8.desugar.records;
-import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE;
+import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE_R8_CF_TO_CF;
import static com.android.tools.r8.utils.InternalOptions.TestingOptions;
import com.android.tools.r8.TestBase;
@@ -64,7 +64,7 @@
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
+ .addKeepRules(RECORD_KEEP_RULE_R8_CF_TO_CF)
.addKeepMainRule(MAIN_TYPE)
.addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
@@ -78,7 +78,6 @@
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
.addKeepMainRule(MAIN_TYPE)
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
.compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordInstanceOfTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordInstanceOfTest.java
index 0c9715e..520e3ff 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordInstanceOfTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordInstanceOfTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.desugar.records;
-import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE;
+import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE_R8_CF_TO_CF;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -64,7 +64,7 @@
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
+ .addKeepRules(RECORD_KEEP_RULE_R8_CF_TO_CF)
.addKeepMainRule(MAIN_TYPE)
.addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
@@ -78,7 +78,6 @@
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
.addKeepMainRule(MAIN_TYPE)
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
.compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomSplitDesugaringTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomSplitDesugaringTest.java
index 0383285..2d771cc 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomSplitDesugaringTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomSplitDesugaringTest.java
@@ -4,8 +4,6 @@
package com.android.tools.r8.desugar.records;
-import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE;
-
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.InternalOptions.TestingOptions;
@@ -79,7 +77,6 @@
testForR8(parameters.getBackend())
.addProgramFiles(desugared)
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
.addKeepMainRule(MAIN_TYPE)
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
.compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomTest.java
index 0e6e6cd..c3da934 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.desugar.records;
-import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE;
+import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE_R8_CF_TO_CF;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -77,7 +77,7 @@
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
+ .addKeepRules(RECORD_KEEP_RULE_R8_CF_TO_CF)
.addKeepMainRule(MAIN_TYPE)
.addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
@@ -91,7 +91,6 @@
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
.addKeepMainRule(MAIN_TYPE)
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
.compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordReflectionTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordReflectionTest.java
index 0529a9f..beced4d 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordReflectionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordReflectionTest.java
@@ -4,8 +4,9 @@
package com.android.tools.r8.desugar.records;
-import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE;
+import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE_R8_CF_TO_CF;
+import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestRuntime.CfRuntime;
@@ -57,14 +58,16 @@
@Test
public void testR8Cf() throws Exception {
- testForR8(parameters.getBackend())
- .addProgramClassFileData(PROGRAM_DATA)
- .setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
- .addKeepMainRule(MAIN_TYPE)
- .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
- .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
- .compile()
+ R8TestCompileResult compile =
+ testForR8(parameters.getBackend())
+ .addProgramClassFileData(PROGRAM_DATA)
+ .setMinApi(parameters.getApiLevel())
+ .addKeepMainRule(MAIN_TYPE)
+ .addKeepRules(RECORD_KEEP_RULE_R8_CF_TO_CF)
+ .addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
+ .addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
+ .compile();
+ compile
.inspect(RecordTestUtils::assertRecordsAreRecords)
.enableJVMPreview()
.run(parameters.getRuntime(), MAIN_TYPE)
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordTestUtils.java b/src/test/java/com/android/tools/r8/desugar/records/RecordTestUtils.java
index 2d4d6fd..3f8adcc 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordTestUtils.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordTestUtils.java
@@ -40,8 +40,11 @@
return Paths.get(ToolHelper.TESTS_BUILD_DIR, EXAMPLE_FOLDER, RECORD_FOLDER + ".jar");
}
- // TODO(b/169645628): Consider if that keep rule should be required or not.
- public static final String RECORD_KEEP_RULE =
+ // TODO(b/197081367): Rediscuss if we want to maintain the toString() method.
+ // In R8 Cf to Cf we need to maintain the record component attributes, the class name and fields
+ // so the mapping between the record components and fields is valid and the toString() prints
+ // the record as specified (including the class name).
+ public static final String RECORD_KEEP_RULE_R8_CF_TO_CF =
"-keepattributes *\n" + "-keep class * extends java.lang.Record { private final <fields>; }";
public static Path[] getJdk15LibraryFiles(TemporaryFolder temp) throws IOException {
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordWithMembersTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordWithMembersTest.java
index a513579..a88ea33 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordWithMembersTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordWithMembersTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.desugar.records;
-import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE;
+import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE_R8_CF_TO_CF;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -66,7 +66,7 @@
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
+ .addKeepRules(RECORD_KEEP_RULE_R8_CF_TO_CF)
.addKeepMainRule(MAIN_TYPE)
.addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
@@ -80,7 +80,6 @@
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
.addKeepMainRule(MAIN_TYPE)
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
.compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/records/SimpleRecordTest.java b/src/test/java/com/android/tools/r8/desugar/records/SimpleRecordTest.java
index 3c41bae..c820122 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/SimpleRecordTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/SimpleRecordTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.desugar.records;
-import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE;
+import static com.android.tools.r8.desugar.records.RecordTestUtils.RECORD_KEEP_RULE_R8_CF_TO_CF;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -68,7 +68,7 @@
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
+ .addKeepRules(RECORD_KEEP_RULE_R8_CF_TO_CF)
.addKeepMainRule(MAIN_TYPE)
.addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
@@ -82,7 +82,6 @@
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
.addKeepMainRule(MAIN_TYPE)
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
.compile()
@@ -100,7 +99,7 @@
.addProgramClassFileData(PROGRAM_DATA)
.noMinification()
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
+ .addKeepRules(RECORD_KEEP_RULE_R8_CF_TO_CF)
.addKeepMainRule(MAIN_TYPE)
.addLibraryFiles(RecordTestUtils.getJdk15LibraryFiles(temp))
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
@@ -115,7 +114,6 @@
.addProgramClassFileData(PROGRAM_DATA)
.noMinification()
.setMinApi(parameters.getApiLevel())
- .addKeepRules(RECORD_KEEP_RULE)
.addKeepMainRule(MAIN_TYPE)
.addOptionsModification(TestingOptions::allowExperimentClassFileVersion)
.compile()