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