Ignore Proguard option -keepdirectories
This doesn't apply since there are no directories in dex files.
Change-Id: I70932a110ab3c23e69c3e7698a0674cfa7d48154
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 c37948c..860fc45 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -40,6 +40,8 @@
.of("protomapping",
"optimizationpasses",
"target");
+ private static final List<String> ignoredOptionalSingleArgOptions = ImmutableList
+ .of("keepdirectories");
private static final List<String> ignoredFlagOptions = ImmutableList
.of("forceprocessing", "dontusemixedcaseclassnames",
"dontpreverify", "experimentalshrinkunusedprotofields",
@@ -121,6 +123,7 @@
expectChar('-');
String option;
if (Iterables.any(ignoredSingleArgOptions, this::skipOptionWithSingleArg)
+ || Iterables.any(ignoredOptionalSingleArgOptions, this::skipOptionWithOptionalSingleArg)
|| Iterables.any(ignoredFlagOptions, this::skipFlag)
|| Iterables.any(ignoredClassDescriptorOptions, this::skipOptionWithClassSpec)
|| parseOptimizationOption()) {
@@ -261,6 +264,20 @@
return false;
}
+ private boolean skipOptionWithOptionalSingleArg(String name) {
+ if (acceptString(name)) {
+ if (Log.ENABLED) {
+ Log.debug(ProguardConfigurationParser.class, "Skipping '-%s` option", name);
+ }
+ skipWhitespace();
+ if (!eof() && peekChar() != '-') {
+ skipSingleArgument();
+ }
+ return true;
+ }
+ return false;
+ }
+
private boolean skipOptionWithClassSpec(String name) {
if (acceptString(name)) {
if (Log.ENABLED) {
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 727d533..5d5bc17 100644
--- a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
@@ -51,6 +51,8 @@
VALID_PROGUARD_DIR + "seeds-2.flags";
private static final String VERBOSE =
VALID_PROGUARD_DIR + "verbose.flags";
+ private static final String KEEPDIRECTORIES =
+ VALID_PROGUARD_DIR + "keepdirectories.flags";
private static final String DONT_OBFUSCATE =
VALID_PROGUARD_DIR + "dontobfuscate.flags";
private static final String DONT_SKIP_NON_PUBLIC_LIBRARY_CLASSES =
@@ -310,6 +312,12 @@
}
@Test
+ public void parseKeepdirectories() throws IOException, ProguardRuleParserException {
+ ProguardConfigurationParser parser = new ProguardConfigurationParser(new DexItemFactory());
+ parser.parse(Paths.get(KEEPDIRECTORIES));
+ }
+
+ @Test
public void parseDontSkipNonPublicLibraryClasses()
throws IOException, ProguardRuleParserException {
ProguardConfigurationParser parser = new ProguardConfigurationParser(new DexItemFactory());
diff --git a/src/test/proguard/valid/keepdirectories.flags b/src/test/proguard/valid/keepdirectories.flags
new file mode 100644
index 0000000..b78e3aa
--- /dev/null
+++ b/src/test/proguard/valid/keepdirectories.flags
@@ -0,0 +1,9 @@
+# Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+-keepdirectories
+
+-keepdirectories toto/titi
+-keepdirectories **
+-keepdirectories
+