Passthrough -maximumremovedandroidloglevel in rule filtering

Change-Id: Ide6a775af6170e05c69db0cd2b4cca01279c1fb4
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 6370019..be434e7 100644
--- a/src/main/java/com/android/tools/r8/processkeeprules/FilteredKeepRulesBuilder.java
+++ b/src/main/java/com/android/tools/r8/processkeeprules/FilteredKeepRulesBuilder.java
@@ -287,6 +287,15 @@
   }
 
   @Override
+  public void joinMaxRemovedAndroidLogLevel(
+      int maxRemovedAndroidLogLevel,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart) {
+    ensureNewlineAfterComment();
+    write(parser, positionStart);
+  }
+
+  @Override
   public void setApplyMappingFile(
       Path applyMappingFile,
       ProguardConfigurationSourceParser parser,
@@ -351,9 +360,6 @@
   }
 
   @Override
-  public void joinMaxRemovedAndroidLogLevel(int maxRemovedAndroidLogLevel) {}
-
-  @Override
   public PackageObfuscationMode getPackageObfuscationMode() {
     return null;
   }
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 2d3eac6..38ca5f8 100644
--- a/src/main/java/com/android/tools/r8/processkeeprules/ValidateLibraryConsumerRulesKeepRuleProcessor.java
+++ b/src/main/java/com/android/tools/r8/processkeeprules/ValidateLibraryConsumerRulesKeepRuleProcessor.java
@@ -269,7 +269,10 @@
       TextPosition positionStart) {}
 
   @Override
-  public void joinMaxRemovedAndroidLogLevel(int maxRemovedAndroidLogLevel) {}
+  public void joinMaxRemovedAndroidLogLevel(
+      int maxRemovedAndroidLogLevel,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart) {}
 
   @Override
   public PackageObfuscationMode getPackageObfuscationMode() {
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 e4be63a..9c24322 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfiguration.java
@@ -256,7 +256,10 @@
     }
 
     @Override
-    public void joinMaxRemovedAndroidLogLevel(int maxRemovedAndroidLogLevel) {
+    public void joinMaxRemovedAndroidLogLevel(
+        int maxRemovedAndroidLogLevel,
+        ProguardConfigurationSourceParser parser,
+        TextPosition positionStart) {
       assert maxRemovedAndroidLogLevel >= MaximumRemovedAndroidLogLevelRule.NONE;
       if (this.maxRemovedAndroidLogLevel == MaximumRemovedAndroidLogLevelRule.NOT_SET) {
         this.maxRemovedAndroidLogLevel = maxRemovedAndroidLogLevel;
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 3cceb7d..6b453e5 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -936,45 +936,46 @@
           "Expecting '-keep' option after '-if' option.", origin, getPosition(optionStart)));
     }
 
-    private boolean parseMaximumRemovedAndroidLogLevelRule(Position start)
+    private boolean parseMaximumRemovedAndroidLogLevelRule(TextPosition optionStart)
         throws ProguardRuleParserException {
-      if (acceptString("maximumremovedandroidloglevel")) {
-        skipWhitespace();
-        // First parse the mandatory log level int.
-        Integer maxRemovedAndroidLogLevel = acceptInteger();
-        if (maxRemovedAndroidLogLevel == null
-            || maxRemovedAndroidLogLevel < MaximumRemovedAndroidLogLevelRule.NONE) {
-          throw parseError("Expected integer greater than or equal to 1", getPosition());
-        }
-        MaximumRemovedAndroidLogLevelRule.Builder builder =
-            MaximumRemovedAndroidLogLevelRule.builder()
-                .setMaxRemovedAndroidLogLevel(maxRemovedAndroidLogLevel)
-                .setOrigin(origin)
-                .setStart(start);
-        // Check if we can parse any class annotations or flag.
-        if (parseClassAnnotationsAndFlags(builder)) {
-          // Parse the remainder of the class specification.
-          parseClassSpecFromClassTypeInclusive(builder, false);
-        } else {
-          // Otherwise check if we can parse a class name.
-          parseClassType(
-              builder,
-              // Parse the remainder of the class specification.
-              () -> parseClassSpecFromClassNameInclusive(builder, false),
-              // In case of an error, move position back to the place we expected an (optional)
-              // class type.
-              expectedClassTypeStart -> position = expectedClassTypeStart.getOffsetAsInt());
-        }
-        if (builder.hasClassType()) {
-          Position end = getPosition();
-          configurationConsumer.addRule(
-              builder.setEnd(end).setSource(getSourceSnippet(contents, start, end)).build());
-        } else {
-          configurationConsumer.joinMaxRemovedAndroidLogLevel(maxRemovedAndroidLogLevel);
-        }
-        return true;
+      if (!acceptString("maximumremovedandroidloglevel")) {
+        return false;
       }
-      return false;
+      skipWhitespace();
+      // First parse the mandatory log level int.
+      Integer maxRemovedAndroidLogLevel = acceptInteger();
+      if (maxRemovedAndroidLogLevel == null
+          || maxRemovedAndroidLogLevel < MaximumRemovedAndroidLogLevelRule.NONE) {
+        throw parseError("Expected integer greater than or equal to 1", getPosition());
+      }
+      MaximumRemovedAndroidLogLevelRule.Builder builder =
+          MaximumRemovedAndroidLogLevelRule.builder()
+              .setMaxRemovedAndroidLogLevel(maxRemovedAndroidLogLevel)
+              .setOrigin(origin)
+              .setStart(optionStart);
+      // Check if we can parse any class annotations or flag.
+      if (parseClassAnnotationsAndFlags(builder)) {
+        // Parse the remainder of the class specification.
+        parseClassSpecFromClassTypeInclusive(builder, false);
+      } else {
+        // Otherwise check if we can parse a class name.
+        parseClassType(
+            builder,
+            // Parse the remainder of the class specification.
+            () -> parseClassSpecFromClassNameInclusive(builder, false),
+            // In case of an error, move position back to the place we expected an (optional)
+            // class type.
+            expectedClassTypeStart -> position = expectedClassTypeStart.getOffsetAsInt());
+      }
+      if (builder.hasClassType()) {
+        Position end = getPosition();
+        configurationConsumer.addRule(
+            builder.setEnd(end).setSource(getSourceSnippet(contents, optionStart, end)).build());
+      } else {
+        configurationConsumer.joinMaxRemovedAndroidLogLevel(
+            maxRemovedAndroidLogLevel, this, optionStart);
+      }
+      return true;
     }
 
     void verifyAndLinkBackReferences(Iterable<ProguardWildcard> wildcards) {
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 29260bd..1cc11a4 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserConsumer.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParserConsumer.java
@@ -142,7 +142,10 @@
       ProguardConfigurationSourceParser parser,
       TextPosition positionStart);
 
-  void joinMaxRemovedAndroidLogLevel(int maxRemovedAndroidLogLevel);
+  void joinMaxRemovedAndroidLogLevel(
+      int maxRemovedAndroidLogLevel,
+      ProguardConfigurationSourceParser parser,
+      TextPosition positionStart);
 
   PackageObfuscationMode getPackageObfuscationMode();