Passthrough directives accepting ProguardClassNameList in rule filtering

Change-Id: I3b2cf8a839238ceacd1d964f628c7fe6b979d3bb
diff --git a/src/main/java/com/android/tools/r8/processkeeprules/FilteredKeepRulesBuilder.java b/src/main/java/com/android/tools/r8/processkeeprules/FilteredKeepRulesBuilder.java
index 5a7210b..6deb177 100644
--- a/src/main/java/com/android/tools/r8/processkeeprules/FilteredKeepRulesBuilder.java
+++ b/src/main/java/com/android/tools/r8/processkeeprules/FilteredKeepRulesBuilder.java
@@ -79,6 +79,33 @@
   }
 
   @Override
+  public void addAdaptClassStringsPattern(
+      ProguardClassNameList pattern,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart) {
+    ensureNewlineAfterComment();
+    write(parser, positionStart);
+  }
+
+  @Override
+  public void addDontNotePattern(
+      ProguardClassNameList pattern,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart) {
+    ensureNewlineAfterComment();
+    write(parser, positionStart);
+  }
+
+  @Override
+  public void addDontWarnPattern(
+      ProguardClassNameList pattern,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart) {
+    ensureNewlineAfterComment();
+    write(parser, positionStart);
+  }
+
+  @Override
   public void addKeepAttributePatterns(
       List<String> attributesPatterns,
       ProguardConfigurationSourceParser parser,
@@ -89,6 +116,15 @@
   }
 
   @Override
+  public void addKeepPackageNamesPattern(
+      ProguardClassNameList proguardClassNameList,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart) {
+    ensureNewlineAfterComment();
+    write(parser, positionStart);
+  }
+
+  @Override
   public void addRule(ProguardConfigurationRule rule) {
     ensureNewlineAfterComment();
     write(rule.getSource());
@@ -198,21 +234,12 @@
   }
 
   @Override
-  public void addKeepPackageNamesPattern(ProguardClassNameList proguardClassNameList) {}
-
-  @Override
   public void setKeepParameterNames(ProguardConfigurationSourceParser parser, Position position) {}
 
   @Override
   public void addParsedConfiguration(String s) {}
 
   @Override
-  public void addDontWarnPattern(ProguardClassNameList pattern) {}
-
-  @Override
-  public void addDontNotePattern(ProguardClassNameList pattern) {}
-
-  @Override
   public void setApplyMappingFile(
       Path path, ProguardConfigurationSourceParser parser, Position position) {}
 
@@ -241,9 +268,6 @@
       Path path, ProguardConfigurationSourceParser parser, Position position) {}
 
   @Override
-  public void addAdaptClassStringsPattern(ProguardClassNameList pattern) {}
-
-  @Override
   public void addAdaptResourceFileContents(ProguardPathList pattern) {}
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/processkeeprules/ValidateLibraryConsumerRulesKeepRuleProcessor.java b/src/main/java/com/android/tools/r8/processkeeprules/ValidateLibraryConsumerRulesKeepRuleProcessor.java
index f02a248..e83fe7d 100644
--- a/src/main/java/com/android/tools/r8/processkeeprules/ValidateLibraryConsumerRulesKeepRuleProcessor.java
+++ b/src/main/java/com/android/tools/r8/processkeeprules/ValidateLibraryConsumerRulesKeepRuleProcessor.java
@@ -111,7 +111,10 @@
   }
 
   @Override
-  public void addKeepPackageNamesPattern(ProguardClassNameList proguardClassNameList) {}
+  public void addKeepPackageNamesPattern(
+      ProguardClassNameList proguardClassNameList,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart) {}
 
   @Override
   public void setKeepParameterNames(ProguardConfigurationSourceParser parser, Position position) {}
@@ -131,10 +134,16 @@
       ProguardConfigurationSourceParser parser, TextPosition positionStart) {}
 
   @Override
-  public void addDontWarnPattern(ProguardClassNameList pattern) {}
+  public void addDontWarnPattern(
+      ProguardClassNameList pattern,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart) {}
 
   @Override
-  public void addDontNotePattern(ProguardClassNameList pattern) {}
+  public void addDontNotePattern(
+      ProguardClassNameList pattern,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart) {}
 
   @Override
   public void enablePrintConfiguration(
@@ -213,7 +222,10 @@
   }
 
   @Override
-  public void addAdaptClassStringsPattern(ProguardClassNameList pattern) {}
+  public void addAdaptClassStringsPattern(
+      ProguardClassNameList pattern,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart) {}
 
   @Override
   public void addAdaptResourceFileContents(ProguardPathList pattern) {}
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
index e8b2089..0148092 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
@@ -221,7 +221,10 @@
     }
 
     @Override
-    public void addKeepPackageNamesPattern(ProguardClassNameList pattern) {
+    public void addKeepPackageNamesPattern(
+        ProguardClassNameList pattern,
+        ProguardConfigurationSourceParser parser,
+        TextPosition positionStart) {
       keepPackageNamesPatterns.addPattern(pattern);
     }
 
@@ -270,12 +273,18 @@
     }
 
     @Override
-    public void addDontWarnPattern(ProguardClassNameList pattern) {
+    public void addDontWarnPattern(
+        ProguardClassNameList pattern,
+        ProguardConfigurationSourceParser parser,
+        TextPosition positionStart) {
       dontWarnPatterns.addPattern(pattern);
     }
 
     @Override
-    public void addDontNotePattern(ProguardClassNameList pattern) {
+    public void addDontNotePattern(
+        ProguardClassNameList pattern,
+        ProguardConfigurationSourceParser parser,
+        TextPosition positionStart) {
       dontNotePatterns.addPattern(pattern);
     }
 
@@ -319,7 +328,10 @@
     }
 
     @Override
-    public void addAdaptClassStringsPattern(ProguardClassNameList pattern) {
+    public void addAdaptClassStringsPattern(
+        ProguardClassNameList pattern,
+        ProguardConfigurationSourceParser parser,
+        TextPosition positionStart) {
       adaptClassStrings.addPattern(pattern);
     }
 
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
index 97dc3b3..7616e02 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -312,7 +312,9 @@
       } else if (acceptString("keepattributes")) {
         parseKeepAttributes(optionStart);
       } else if (acceptString("keeppackagenames")) {
-        parseClassFilter(configurationConsumer::addKeepPackageNamesPattern);
+        ProguardClassNameList keepPackageNamePatterns = parseOptionalClassFilter();
+        configurationConsumer.addKeepPackageNamesPattern(
+            keepPackageNamePatterns, this, optionStart);
       } else if (acceptString("keepparameternames")) {
         configurationConsumer.setKeepParameterNames(this, getPosition(optionStart));
       } else if (acceptString("checkdiscard")) {
@@ -355,9 +357,11 @@
       } else if (acceptString("ignorewarnings")) {
         configurationConsumer.setIgnoreWarnings(this, optionStart);
       } else if (acceptString("dontwarn")) {
-        parseClassFilter(configurationConsumer::addDontWarnPattern);
+        ProguardClassNameList dontWarnPattern = parseOptionalClassFilter();
+        configurationConsumer.addDontWarnPattern(dontWarnPattern, this, optionStart);
       } else if (acceptString("dontnote")) {
-        parseClassFilter(configurationConsumer::addDontNotePattern);
+        ProguardClassNameList dontNotePattern = parseOptionalClassFilter();
+        configurationConsumer.addDontNotePattern(dontNotePattern, this, optionStart);
       } else if (acceptString(REPACKAGE_CLASSES)) {
         if (configurationConsumer.getPackageObfuscationMode() == PackageObfuscationMode.FLATTEN) {
           warnOverridingOptions(REPACKAGE_CLASSES, FLATTEN_PACKAGE_HIERARCHY, optionStart);
@@ -466,7 +470,9 @@
                 optionStart, InlineRule.builder().setType(InlineRuleType.ALWAYS));
         configurationConsumer.addRule(rule);
       } else if (acceptString("adaptclassstrings")) {
-        parseClassFilter(configurationConsumer::addAdaptClassStringsPattern);
+        ProguardClassNameList adaptClassStringsPattern = parseOptionalClassFilter();
+        configurationConsumer.addAdaptClassStringsPattern(
+            adaptClassStringsPattern, this, optionStart);
       } else if (acceptString("adaptresourcefilenames")) {
         parsePathFilter(configurationConsumer::addAdaptResourceFilenames);
       } else if (acceptString("adaptresourcefilecontents")) {
@@ -2093,15 +2099,11 @@
       }
     }
 
-    private void parseClassFilter(Consumer<ProguardClassNameList> consumer)
-        throws ProguardRuleParserException {
+    private ProguardClassNameList parseOptionalClassFilter() throws ProguardRuleParserException {
       skipWhitespace();
-      if (isOptionalArgumentGiven()) {
-        consumer.accept(parseClassNames());
-      } else {
-        consumer.accept(
-            ProguardClassNameList.singletonList(ProguardTypeMatcher.defaultAllMatcher()));
-      }
+      return isOptionalArgumentGiven()
+          ? parseClassNames()
+          : ProguardClassNameList.singletonList(ProguardTypeMatcher.defaultAllMatcher());
     }
 
     private void parseClassNameAddToBuilder(ProguardClassNameList.Builder builder)
@@ -2153,12 +2155,7 @@
 
     private void parsePathFilter(Consumer<ProguardPathList> consumer)
         throws ProguardRuleParserException {
-      skipWhitespace();
-      if (isOptionalArgumentGiven()) {
-        consumer.accept(parsePathFilter());
-      } else {
-        consumer.accept(ProguardPathList.emptyList());
-      }
+      consumer.accept(parseOptionalPathFilter());
     }
 
     private ProguardPathList parsePathFilter() throws ProguardRuleParserException {
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserConsumer.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserConsumer.java
index c5ad0d6..42e5107 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserConsumer.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserConsumer.java
@@ -22,7 +22,10 @@
       Position position,
       TextPosition positionStart);
 
-  void addKeepPackageNamesPattern(ProguardClassNameList proguardClassNameList);
+  void addKeepPackageNamesPattern(
+      ProguardClassNameList proguardClassNameList,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart);
 
   void setKeepParameterNames(ProguardConfigurationSourceParser parser, Position position);
 
@@ -71,9 +74,15 @@
 
   void setIgnoreWarnings(ProguardConfigurationSourceParser parser, TextPosition positionStart);
 
-  void addDontWarnPattern(ProguardClassNameList pattern);
+  void addDontWarnPattern(
+      ProguardClassNameList pattern,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart);
 
-  void addDontNotePattern(ProguardClassNameList pattern);
+  void addDontNotePattern(
+      ProguardClassNameList pattern,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart);
 
   void enableAllowAccessModification(
       ProguardConfigurationSourceParser parser, Position position, TextPosition positionStart);
@@ -99,7 +108,10 @@
   void setPackageObfuscationDictionary(
       Path path, ProguardConfigurationSourceParser parser, Position position);
 
-  void addAdaptClassStringsPattern(ProguardClassNameList pattern);
+  void addAdaptClassStringsPattern(
+      ProguardClassNameList pattern,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart);
 
   void addAdaptResourceFileContents(ProguardPathList pattern);