Support for overriding new -keepattributes behavior

This adds a system property for temporarily being able to tweak parsing
of -keepattributes rules such that wildcards can be used to keep runtime
invisible annotations.

Bug: b/492169125
Change-Id: I2ed4a15e14eff7d452418c9e732ac7af872f66e0
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 6fccf6d..28f76f7 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -935,7 +935,8 @@
       ProguardConfigurationParserOptions parserOptions =
           parserOptionsBuilder
               .setCanMatchRuntimeInvisibleAnnotationsWithWildcards(
-                  getProgramConsumer() instanceof ClassFileConsumer)
+                  getProgramConsumer() instanceof ClassFileConsumer
+                      && parserOptionsBuilder.getCanMatchRuntimeInvisibleAnnotationsWithWildcards())
               .setForceProguardCompatibility(forceProguardCompatibility)
               .build();
       ProguardConfiguration.Builder configurationBuilder =
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserOptions.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserOptions.java
index 80ea398..0289a30 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserOptions.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserOptions.java
@@ -59,6 +59,9 @@
     private boolean forceProguardCompatibility = false;
 
     public Builder readEnvironment() {
+      canMatchRuntimeInvisibleAnnotationsWithWildcards =
+          parseSystemPropertyOrDefault(
+              "com.android.tools.r8.canMatchRuntimeInvisibleAnnotationsWithWildcards", true);
       enableLegacyFullModeForKeepRules =
           parseSystemPropertyOrDefault(
               "com.android.tools.r8.enableLegacyFullModeForKeepRules", true);
@@ -70,6 +73,10 @@
       return this;
     }
 
+    public boolean getCanMatchRuntimeInvisibleAnnotationsWithWildcards() {
+      return canMatchRuntimeInvisibleAnnotationsWithWildcards;
+    }
+
     public Builder setCanMatchRuntimeInvisibleAnnotationsWithWildcards(
         boolean canMatchRuntimeInvisibleAnnotationsWithWildcards) {
       this.canMatchRuntimeInvisibleAnnotationsWithWildcards =