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()