Make build properties available to DumpInputFlags for filtering
Bug: b/236449152
Change-Id: Icb779cba32f1de7fe091c6e2036b89ad50a03a56
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
index c5f80d7..5c6f166 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
@@ -16,6 +16,7 @@
import com.android.tools.r8.ProgramResourceProvider;
import com.android.tools.r8.ResourceException;
import com.android.tools.r8.StringResource;
+import com.android.tools.r8.dump.DumpOptions;
import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.errors.UnsupportedMainDexListUsageDiagnostic;
import com.android.tools.r8.graph.ApplicationReaderMap;
@@ -182,12 +183,13 @@
}
private void dumpApplication(DumpInputFlags dumpInputFlags) {
- if (dumpInputFlags.isNoDump()) {
+ DumpOptions dumpOptions = options.dumpOptions;
+ if (dumpOptions == null || !dumpInputFlags.shouldDump(dumpOptions)) {
return;
}
Path dumpOutput = dumpInputFlags.getDumpPath();
timing.begin("ApplicationReader.dump");
- inputApp.dump(dumpOutput, options.dumpOptions, options.reporter, options.dexItemFactory());
+ inputApp.dump(dumpOutput, dumpOptions, options.reporter, options.dexItemFactory());
timing.end();
Diagnostic message = new StringDiagnostic("Dumped compilation inputs to: " + dumpOutput);
if (dumpInputFlags.shouldFailCompilation()) {
diff --git a/src/main/java/com/android/tools/r8/dump/DumpOptions.java b/src/main/java/com/android/tools/r8/dump/DumpOptions.java
index da85b0e..55d4411 100644
--- a/src/main/java/com/android/tools/r8/dump/DumpOptions.java
+++ b/src/main/java/com/android/tools/r8/dump/DumpOptions.java
@@ -14,8 +14,10 @@
import com.android.tools.r8.utils.ThreadUtils;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Optional;
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
@@ -109,34 +111,45 @@
this.dumpInputToFile = dumpInputToFile;
}
- public String dumpOptions() {
+ public String getBuildPropertiesFileContent() {
StringBuilder builder = new StringBuilder();
- addDumpEntry(builder, TOOL_KEY, tool.name());
+ getBuildProperties()
+ .forEach((key, value) -> builder.append(key).append("=").append(value).append("\n"));
+ return builder.toString();
+ }
+
+ private Map<String, String> getBuildProperties() {
+ Map<String, String> buildProperties = new LinkedHashMap<>();
+ addDumpEntry(buildProperties, TOOL_KEY, tool.name());
// We keep the following values for backward compatibility.
addDumpEntry(
- builder,
+ buildProperties,
MODE_KEY,
compilationMode == CompilationMode.DEBUG ? DEBUG_MODE_VALUE : RELEASE_MODE_VALUE);
- addDumpEntry(builder, MIN_API_KEY, minApi);
- addDumpEntry(builder, OPTIMIZE_MULTIDEX_FOR_LINEAR_ALLOC_KEY, optimizeMultidexForLinearAlloc);
+ addDumpEntry(buildProperties, MIN_API_KEY, minApi);
+ addDumpEntry(
+ buildProperties, OPTIMIZE_MULTIDEX_FOR_LINEAR_ALLOC_KEY, optimizeMultidexForLinearAlloc);
if (threadCount != ThreadUtils.NOT_SPECIFIED) {
- addDumpEntry(builder, THREAD_COUNT_KEY, threadCount);
+ addDumpEntry(buildProperties, THREAD_COUNT_KEY, threadCount);
}
- addDumpEntry(builder, DESUGAR_STATE_KEY, desugarState);
- addDumpEntry(builder, ENABLE_MISSING_LIBRARY_API_MODELING, enableMissingLibraryApiModeling);
+ addDumpEntry(buildProperties, DESUGAR_STATE_KEY, desugarState);
+ addDumpEntry(
+ buildProperties, ENABLE_MISSING_LIBRARY_API_MODELING, enableMissingLibraryApiModeling);
if (isAndroidPlatformBuild) {
- addDumpEntry(builder, ANDROID_PLATFORM_BUILD, isAndroidPlatformBuild);
+ addDumpEntry(buildProperties, ANDROID_PLATFORM_BUILD, isAndroidPlatformBuild);
}
- addOptionalDumpEntry(builder, INTERMEDIATE_KEY, intermediate);
- addOptionalDumpEntry(builder, INCLUDE_DATA_RESOURCES_KEY, includeDataResources);
- addOptionalDumpEntry(builder, TREE_SHAKING_KEY, treeShaking);
- addOptionalDumpEntry(builder, MINIFICATION_KEY, minification);
- addOptionalDumpEntry(builder, FORCE_PROGUARD_COMPATIBILITY_KEY, forceProguardCompatibility);
+ addOptionalDumpEntry(buildProperties, INTERMEDIATE_KEY, intermediate);
+ addOptionalDumpEntry(buildProperties, INCLUDE_DATA_RESOURCES_KEY, includeDataResources);
+ addOptionalDumpEntry(buildProperties, TREE_SHAKING_KEY, treeShaking);
+ addOptionalDumpEntry(buildProperties, MINIFICATION_KEY, minification);
+ addOptionalDumpEntry(
+ buildProperties, FORCE_PROGUARD_COMPATIBILITY_KEY, forceProguardCompatibility);
ArrayList<String> sortedKeys = new ArrayList<>(systemProperties.keySet());
sortedKeys.sort(String::compareTo);
sortedKeys.forEach(
- key -> addDumpEntry(builder, SYSTEM_PROPERTY_PREFIX + key, systemProperties.get(key)));
- return builder.toString();
+ key ->
+ addDumpEntry(buildProperties, SYSTEM_PROPERTY_PREFIX + key, systemProperties.get(key)));
+ return buildProperties;
}
public static void parse(String content, DumpOptions.Builder builder) {
@@ -219,12 +232,13 @@
return minApi;
}
- private void addOptionalDumpEntry(StringBuilder builder, String key, Optional<?> optionalValue) {
- optionalValue.ifPresent(bool -> addDumpEntry(builder, key, bool));
+ private void addOptionalDumpEntry(
+ Map<String, String> buildProperties, String key, Optional<?> optionalValue) {
+ optionalValue.ifPresent(bool -> addDumpEntry(buildProperties, key, bool));
}
- private void addDumpEntry(StringBuilder builder, String key, Object value) {
- builder.append(key).append("=").append(value).append("\n");
+ private void addDumpEntry(Map<String, String> buildProperties, String key, Object value) {
+ buildProperties.put(key, Objects.toString(value));
}
private boolean hasDesugaredLibraryConfiguration() {
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApp.java b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
index a013ba6..fbf344b 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApp.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
@@ -467,9 +467,6 @@
}
public void dump(Path output, DumpOptions options, Reporter reporter, DexItemFactory factory) {
- if (options == null) {
- return;
- }
int nextDexIndex = 0;
OpenOption[] openOptions =
new OpenOption[] {StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING};
@@ -477,7 +474,10 @@
writeToZipStream(
out, dumpVersionFileName, Version.getVersionString().getBytes(), ZipEntry.DEFLATED);
writeToZipStream(
- out, dumpBuildPropertiesFileName, options.dumpOptions().getBytes(), ZipEntry.DEFLATED);
+ out,
+ dumpBuildPropertiesFileName,
+ options.getBuildPropertiesFileContent().getBytes(),
+ ZipEntry.DEFLATED);
if (options.getDesugaredLibraryJsonSource() != null) {
writeToZipStream(
out,
diff --git a/src/main/java/com/android/tools/r8/utils/DumpInputFlags.java b/src/main/java/com/android/tools/r8/utils/DumpInputFlags.java
index 905ba91..8414589 100644
--- a/src/main/java/com/android/tools/r8/utils/DumpInputFlags.java
+++ b/src/main/java/com/android/tools/r8/utils/DumpInputFlags.java
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.utils;
+import com.android.tools.r8.dump.DumpOptions;
import com.android.tools.r8.errors.Unreachable;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -34,8 +35,8 @@
}
@Override
- public boolean isNoDump() {
- return true;
+ public boolean shouldDump(DumpOptions options) {
+ return false;
}
@Override
@@ -54,6 +55,13 @@
}
@Override
+ public boolean shouldDump(DumpOptions options) {
+ // TODO(b/236449152): Add support for dumping only with specific build properties (e.g.,
+ // 'tool=R8').
+ return true;
+ }
+
+ @Override
public boolean shouldFailCompilation() {
return true;
}
@@ -69,6 +77,13 @@
}
@Override
+ public boolean shouldDump(DumpOptions options) {
+ // TODO(b/236449152): Add support for dumping only with specific build properties (e.g.,
+ // 'tool=R8').
+ return true;
+ }
+
+ @Override
public boolean shouldFailCompilation() {
return false;
}
@@ -77,9 +92,7 @@
public abstract Path getDumpPath();
- public boolean isNoDump() {
- return false;
- }
+ public abstract boolean shouldDump(DumpOptions options);
public abstract boolean shouldFailCompilation();
}