Use a keepclasseswithmembers rule in Gson reproduction

Change-Id: I99d6abc7082907df62c5dacd6d5fddb22990be8a
Bug: 150189783
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/KeepClassesWithAnnotatedFieldsReferencedFromGetterTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/KeepClassesWithAnnotatedFieldsReferencedFromGetterTest.java
index 5a213fa..6811351 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/KeepClassesWithAnnotatedFieldsReferencedFromGetterTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/KeepClassesWithAnnotatedFieldsReferencedFromGetterTest.java
@@ -4,8 +4,10 @@
 
 package com.android.tools.r8.shaking.ifrule;
 
-import static org.hamcrest.core.AllOf.allOf;
-import static org.hamcrest.core.StringContains.containsString;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NeverPropagateValue;
@@ -40,27 +42,28 @@
         .addInnerClasses(KeepClassesWithAnnotatedFieldsReferencedFromGetterTest.class)
         .addKeepMainRule(TestClass.class)
         .addKeepRules(
-            "-if class * { @" + typeName(MyAnnotation.class) + " <fields>; }",
-            "-keep class <1> { <init>(); }",
-            "-keepclassmembers class * {",
+            "-if class *",
+            "-keepclasseswithmembers class <1> {",
+            "  <init>(...);",
             "  @" + typeName(MyAnnotation.class) + " <fields>;",
             "}")
-        // TODO(b/150189783): Should not have unused rules.
-        .allowUnusedProguardConfigurationRules()
         .enableInliningAnnotations()
         .enableMemberValuePropagationAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
+        .inspect(
+            inspector -> {
+              assertThat(inspector.clazz(LiveDataClass.class), isPresent());
+              assertThat(inspector.clazz(DeadDataClass.class), not(isPresent()));
+            })
         .run(parameters.getRuntime(), TestClass.class)
-        // TODO(b/150189783): Should succeed.
-        .assertFailureWithErrorThatMatches(
-            allOf(containsString("java.lang.NoSuchMethodException"), containsString("<init>")));
+        .assertSuccessWithOutputLines("Hello world!");
   }
 
   static class TestClass {
 
     public static void main(String[] args) throws Exception {
-      DataClass obj = (DataClass) getDataClass().getDeclaredConstructor().newInstance();
+      LiveDataClass obj = (LiveDataClass) getDataClass().getDeclaredConstructor().newInstance();
       setField(obj, "Hello world!");
       System.out.println(obj.getField());
     }
@@ -68,7 +71,7 @@
     @NeverInline
     @NeverPropagateValue
     static Class<?> getDataClass() {
-      return DataClass.class;
+      return LiveDataClass.class;
     }
 
     @NeverInline
@@ -77,7 +80,16 @@
     }
   }
 
-  static class DataClass {
+  static class LiveDataClass {
+
+    @MyAnnotation String field;
+
+    String getField() {
+      return field;
+    }
+  }
+
+  static class DeadDataClass {
 
     @MyAnnotation String field;