Proguard config parser: Allow space after comma in class name list.
Bug: 124181032
Change-Id: I742b50500d06b907c5f3905f9d70509cfb1208ee
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 709d27a..e3a8273 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -1635,6 +1635,7 @@
ProguardTypeMatcher.create(parseClassName(), ClassOrType.CLASS, dexItemFactory));
skipWhitespace();
while (acceptChar(',')) {
+ skipWhitespace();
negated = acceptChar('!');
builder.addClassName(negated,
ProguardTypeMatcher.create(parseClassName(), ClassOrType.CLASS, dexItemFactory));
diff --git a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
index 26e5356..f3aba75 100644
--- a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
@@ -2399,4 +2399,22 @@
assertThat(result.stderr, containsString(expectedMessage));
}
}
+
+ @Test
+ public void b124181032() throws Exception {
+ ProguardConfigurationParser parser;
+ parser = new ProguardConfigurationParser(new DexItemFactory(), reporter);
+ parser.parse(
+ createConfigurationForTesting(
+ ImmutableList.of(
+ "-keepclassmembers class a.b.c.**, !**Client, !**Interceptor {",
+ "<fields>;",
+ "<init>();",
+ "}")));
+ List<ProguardConfigurationRule> rules = parser.getConfig().getRules();
+ assertEquals(1, rules.size());
+ ProguardConfigurationRule rule = rules.get(0);
+ assertEquals(ProguardKeepRuleType.KEEP_CLASS_MEMBERS.toString(), rule.typeString());
+ assertEquals("a.b.c.**,!**Client,!**Interceptor", rule.getClassNames().toString());
+ }
}