Add API and change default for missing library API modeling.
Bug: b/231547906
Change-Id: Iafc7031557535bc5af6cfa53b3d2b48006a1ab85
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 4e3e190..4e7ca32 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -114,6 +114,7 @@
private final List<FeatureSplit> featureSplits = new ArrayList<>();
private String synthesizedClassPrefix = "";
private boolean skipDump = false;
+ private boolean enableMissingLibraryApiModeling = false;
private boolean allowTestProguardOptions =
System.getProperty("com.android.tools.r8.allowTestProguardOptions") != null;
@@ -431,6 +432,18 @@
return self();
}
+ /**
+ * Enable experimental/pre-release support for modeling missing library APIs.
+ *
+ * <p>This allows enabling the feature while it is still default disabled by the compiler. Once
+ * the feature is default enabled, calling this method will have no affect.
+ */
+ @Deprecated
+ public Builder setEnableExperimentalMissingLibraryApiModeling(boolean enable) {
+ this.enableMissingLibraryApiModeling = enable;
+ return self();
+ }
+
@Override
protected InternalProgramOutputPathConsumer createProgramOutputConsumer(
Path path,
@@ -619,7 +632,8 @@
getThreadCount(),
getDumpInputFlags(),
getMapIdProvider(),
- getSourceFileProvider());
+ getSourceFileProvider(),
+ enableMissingLibraryApiModeling);
if (inputDependencyGraphConsumer != null) {
inputDependencyGraphConsumer.finished();
@@ -704,6 +718,7 @@
private final FeatureSplitConfiguration featureSplitConfiguration;
private final String synthesizedClassPrefix;
private final boolean skipDump;
+ private final boolean enableMissingLibraryApiModeling;
/** Get a new {@link R8Command.Builder}. */
public static Builder builder() {
@@ -792,7 +807,8 @@
int threadCount,
DumpInputFlags dumpInputFlags,
MapIdProvider mapIdProvider,
- SourceFileProvider sourceFileProvider) {
+ SourceFileProvider sourceFileProvider,
+ boolean enableMissingLibraryApiModeling) {
super(
inputApp,
mode,
@@ -831,6 +847,7 @@
this.featureSplitConfiguration = featureSplitConfiguration;
this.synthesizedClassPrefix = synthesizedClassPrefix;
this.skipDump = skipDump;
+ this.enableMissingLibraryApiModeling = enableMissingLibraryApiModeling;
}
private R8Command(boolean printHelp, boolean printVersion) {
@@ -854,6 +871,7 @@
featureSplitConfiguration = null;
synthesizedClassPrefix = null;
skipDump = false;
+ enableMissingLibraryApiModeling = false;
}
public DexItemFactory getDexItemFactory() {
@@ -960,6 +978,10 @@
internal.outputInspections = InspectorImpl.wrapInspections(getOutputInspections());
+ if (!enableMissingLibraryApiModeling) {
+ internal.apiModelingOptions().disableMissingApiModeling();
+ }
+
// Default is to remove all javac generated assertion code when generating dex.
assert internal.assertionsConfiguration == null;
AssertionsConfiguration.Builder builder = AssertionsConfiguration.builder(getReporter());