Revert "Report errors when options -outjars/adaptresourcefilecontents are used."
This reverts commit 1e21890a7acfce3e6e59b0352453ee3ce4a4321b.
Reason for revert: breaks performance benchmarks.
Change-Id: I3ab36facdf6e506dc20f32e264a0ba29203685a9
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index f3605d9..564aa9c 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -137,14 +137,6 @@
/**
* Add proguard configuration.
*/
- public Builder addProguardConfiguration(ProguardConfigurationSource configuration) {
- proguardConfigs.add(configuration);
- return self();
- }
-
- /**
- * Add proguard configuration as strings.
- */
public Builder addProguardConfiguration(List<String> lines) {
proguardConfigs.add(new ProguardConfigurationSourceStrings(lines));
return self();
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 092cce6..36f7efd 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -40,12 +40,12 @@
private final DiagnosticsHandler diagnosticsHandler;
- private static final List<String> IGNORED_SINGLE_ARG_OPTIONS = ImmutableList
+ private static final List<String> ignoredSingleArgOptions = ImmutableList
.of("protomapping",
"target");
- private static final List<String> IGNORED_OPTIONAL_SINGLE_ARG_OPTIONS = ImmutableList
+ private static final List<String> ignoredOptionalSingleArgOptions = ImmutableList
.of("keepdirectories", "runtype", "laststageoutput");
- private static final List<String> IGNORED_FLAG_OPTIONS = ImmutableList
+ private static final List<String> ignoredFlagOptions = ImmutableList
.of("forceprocessing", "dontusemixedcaseclassnames",
"dontpreverify", "experimentalshrinkunusedprotofields",
"filterlibraryjarswithorginalprogramjars",
@@ -53,22 +53,24 @@
"dontskipnonpubliclibraryclassmembers",
"overloadaggressively",
"invokebasemethod");
- private static final List<String> IGNORED_CLASS_DESCRIPTOR_OPTIONS = ImmutableList
+ private static final List<String> ignoredClassDescriptorOptions = ImmutableList
.of("isclassnamestring",
"whyarenotsimple");
- private static final List<String> WARNED_SINGLE_ARG_OPTIONS = ImmutableList
+ private static final List<String> warnedSingleArgOptions = ImmutableList
.of("dontnote",
- "printconfiguration");
- private static final List<String> WARNED_FLAG_OPTIONS = ImmutableList
+ "printconfiguration",
+ // TODO -outjars (http://b/37137994) and -adaptresourcefilecontents (http://b/37139570)
+ // should be reported as errors, not just as warnings!
+ "outjars",
+ "adaptresourcefilecontents");
+ private static final List<String> warnedFlagOptions = ImmutableList
.of();
// Those options are unsupported and are treated as compilation errors.
// Just ignoring them would produce outputs incompatible with user expectations.
- public static final List<String> UNSUPPORTED_FLAG_OPTIONS = ImmutableList
- .of("adaptresourcefilecontents",
- "outjars",
- "skipnonpubliclibraryclasses");
+ private static final List<String> unsupportedFlagOptions = ImmutableList
+ .of("skipnonpubliclibraryclasses");
public ProguardConfigurationParser(
DexItemFactory dexItemFactory, DiagnosticsHandler diagnosticsHandler) {
@@ -105,26 +107,17 @@
public void parse(List<ProguardConfigurationSource> sources)
throws ProguardRuleParserException, IOException {
for (ProguardConfigurationSource source : sources) {
- new ProguardConfigurationSourceParser(source).parse();
+ new ProguardFileParser(source, diagnosticsHandler).parse();
}
}
- private void warnIgnoringOptions(String optionName) {
- diagnosticsHandler.warning(new StringDiagnostic("Ignoring option: -" + optionName));
- }
-
- private void warnOverridingOptions(String optionName, String victim) {
- diagnosticsHandler.warning(
- new StringDiagnostic("Option -" + optionName + " overrides -" + victim));
- }
-
- private class ProguardConfigurationSourceParser {
+ private class ProguardFileParser {
private final String name;
private final String contents;
private int position = 0;
private Path baseDirectory;
- ProguardConfigurationSourceParser(ProguardConfigurationSource source)
+ ProguardFileParser(ProguardConfigurationSource source, DiagnosticsHandler diagnosticsHandler)
throws IOException {
contents = source.get();
baseDirectory = source.getBaseDirectory();
@@ -147,20 +140,18 @@
}
expectChar('-');
String option;
- if (Iterables.any(IGNORED_SINGLE_ARG_OPTIONS, this::skipOptionWithSingleArg)
- || Iterables.any(
- IGNORED_OPTIONAL_SINGLE_ARG_OPTIONS, this::skipOptionWithOptionalSingleArg)
- || Iterables.any(IGNORED_FLAG_OPTIONS, this::skipFlag)
- || Iterables.any(IGNORED_CLASS_DESCRIPTOR_OPTIONS, this::skipOptionWithClassSpec)
+ if (Iterables.any(ignoredSingleArgOptions, this::skipOptionWithSingleArg)
+ || Iterables.any(ignoredOptionalSingleArgOptions, this::skipOptionWithOptionalSingleArg)
+ || Iterables.any(ignoredFlagOptions, this::skipFlag)
+ || Iterables.any(ignoredClassDescriptorOptions, this::skipOptionWithClassSpec)
|| parseOptimizationOption()) {
// Intentionally left empty.
} else if (
- (option = Iterables.find(WARNED_SINGLE_ARG_OPTIONS,
+ (option = Iterables.find(warnedSingleArgOptions,
this::skipOptionWithSingleArg, null)) != null
- || (option = Iterables.find(WARNED_FLAG_OPTIONS, this::skipFlag, null)) != null) {
+ || (option = Iterables.find(warnedFlagOptions, this::skipFlag, null)) != null) {
warnIgnoringOptions(option);
- } else if (
- (option = Iterables.find(UNSUPPORTED_FLAG_OPTIONS, this::skipFlag, null)) != null) {
+ } else if ((option = Iterables.find(unsupportedFlagOptions, this::skipFlag, null)) != null) {
throw parseError("Unsupported option: -" + option);
} else if (acceptString("renamesourcefileattribute")) {
skipWhitespace();
@@ -305,11 +296,19 @@
return true;
}
+ private void warnIgnoringOptions(String optionName) {
+ diagnosticsHandler.warning(new StringDiagnostic("Ignoring option: -" + optionName));
+ }
+
+ private void warnOverridingOptions(String optionName, String victim) {
+ diagnosticsHandler.warning(
+ new StringDiagnostic("Option -" + optionName + " overrides -" + victim));
+ }
private void parseInclude() throws ProguardRuleParserException {
Path included = parseFileName();
try {
- new ProguardConfigurationSourceParser(new ProguardConfigurationSourceFile(included))
+ new ProguardFileParser(new ProguardConfigurationSourceFile(included), diagnosticsHandler)
.parse();
} catch (FileNotFoundException | NoSuchFileException e) {
throw parseError("Included file '" + included.toString() + "' not found", e);
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java
index 4a62485..a4c89e0 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java
@@ -11,31 +11,20 @@
import joptsimple.internal.Strings;
public class ProguardConfigurationSourceStrings implements ProguardConfigurationSource {
- private final Path baseDirectory;
private final List<String> config;
public ProguardConfigurationSourceStrings(List<String> config) {
- this(Paths.get("."), config);
- }
-
- /**
- * Creates {@link ProguardConfigurationSource} with raw {@param config}, along with
- * {@param baseDirectory}, which allows all other options that use a relative path to reach out
- * to desired paths appropriately.
- */
- public ProguardConfigurationSourceStrings(Path baseDirectory, List<String> config) {
- this.baseDirectory = baseDirectory;
this.config = config;
}
@Override
public String get() throws IOException{
- return Strings.join(config, System.lineSeparator());
+ return Strings.join(config, "\n");
}
@Override
public Path getBaseDirectory() {
- return baseDirectory;
+ return Paths.get(".");
}
@Override
diff --git a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
index cf56c9e..3e4d129 100644
--- a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
+++ b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.internal;
-import static com.android.tools.r8.shaking.ProguardConfigurationParser.UNSUPPORTED_FLAG_OPTIONS;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -15,8 +14,7 @@
import com.android.tools.r8.R8RunArtTestsTest.CompilerUnderTest;
import com.android.tools.r8.Resource;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.shaking.ProguardConfigurationSourceFile;
-import com.android.tools.r8.shaking.ProguardConfigurationSourceStrings;
+import com.android.tools.r8.dex.Constants;
import com.android.tools.r8.shaking.ProguardRuleParserException;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
@@ -27,7 +25,6 @@
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.ListUtils;
import com.android.tools.r8.utils.OutputMode;
-import com.google.common.collect.ImmutableList;
import com.google.common.io.ByteStreams;
import com.google.common.io.Closer;
import java.io.File;
@@ -39,16 +36,12 @@
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.function.Consumer;
-import java.util.function.Predicate;
import org.junit.ComparisonFailure;
import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
public abstract class CompilationTestBase {
- private static final Predicate<String> BYPASSING_OPTIONS_FOR_TESTING =
- line -> UNSUPPORTED_FLAG_OPTIONS.stream().noneMatch(line::contains);
-
@Rule
public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
@@ -81,24 +74,16 @@
assertTrue(referenceApk == null || new File(referenceApk).exists());
AndroidApp outputApp;
if (compiler == CompilerUnderTest.R8) {
- R8Command.Builder builder =
- R8Command.builder()
- .addProgramFiles(ListUtils.map(inputs, Paths::get))
- .setMode(mode)
- .setMinApiLevel(AndroidApiLevel.L.getLevel());
+ R8Command.Builder builder = R8Command.builder();
+ builder.addProgramFiles(ListUtils.map(inputs, Paths::get));
if (pgMap != null) {
builder.setProguardMapFile(Paths.get(pgMap));
}
if (pgConf != null) {
- ProguardConfigurationSourceFile pgFile =
- new ProguardConfigurationSourceFile(Paths.get(pgConf));
- builder.addProguardConfiguration(
- new ProguardConfigurationSourceStrings(
- Paths.get(pgConf).getParent(),
- Arrays.stream(pgFile.get().split(System.lineSeparator()))
- .filter(BYPASSING_OPTIONS_FOR_TESTING)
- .collect(ImmutableList.toImmutableList())));
+ builder.addProguardConfigurationFiles(Paths.get(pgConf));
}
+ builder.setMode(mode);
+ builder.setMinApiLevel(AndroidApiLevel.L.getLevel());
builder.addProguardConfigurationConsumer(b -> {
b.setPrintSeeds(false);
});