Move class conflict resolver into internal options.
Bug: b/241063980
Change-Id: Ie3ff481895b8b09336f37defbc4782deb509c27f
diff --git a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
index ad3bf13..e5447b3 100644
--- a/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
+++ b/src/main/java/com/android/tools/r8/DexFileMergerHelper.java
@@ -61,17 +61,14 @@
D8Command command, Boolean minimalMainDex, Map<String, Integer> inputOrdering)
throws CompilationFailedException {
InternalOptions options = command.getInternalOptions();
+ options.programClassConflictResolver =
+ new DexFileMergerHelper(inputOrdering)::keepFirstProgramClassConflictResolver;
ExceptionUtils.withD8CompilationHandler(
- options.reporter,
- () -> runInternal(command.getInputApp(), options, minimalMainDex, inputOrdering));
+ options.reporter, () -> runInternal(command.getInputApp(), options, minimalMainDex));
}
private static void runInternal(
- AndroidApp inputApp,
- InternalOptions options,
- Boolean minimalMainDex,
- Map<String, Integer> inputOrdering)
- throws IOException {
+ AndroidApp inputApp, InternalOptions options, Boolean minimalMainDex) throws IOException {
options.desugarState = DesugarState.OFF;
options.enableMainDexListCheck = false;
options.minimalMainDex = minimalMainDex;
@@ -84,11 +81,7 @@
try {
Timing timing = new Timing("DexFileMerger");
ApplicationReader applicationReader = new ApplicationReader(inputApp, options, timing);
- DexApplication app =
- applicationReader.read(
- null,
- executor,
- new DexFileMergerHelper(inputOrdering)::keepFirstProgramClassConflictResolver);
+ DexApplication app = applicationReader.read(null, executor);
AppView<AppInfo> appView =
AppView.createForD8(
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 e351e57..31967b1 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
@@ -46,7 +46,6 @@
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.LibraryClassCollection;
import com.android.tools.r8.utils.MainDexListParser;
-import com.android.tools.r8.utils.ProgramClassCollection;
import com.android.tools.r8.utils.StringDiagnostic;
import com.android.tools.r8.utils.ThreadUtils;
import com.android.tools.r8.utils.Timing;
@@ -98,46 +97,25 @@
}
}
- public final LazyLoadedDexApplication read(
- ExecutorService executorService)
- throws IOException {
- return read(
- inputApp.getProguardMapInputData(),
- executorService,
- ProgramClassCollection.defaultConflictResolver(options.reporter));
+ public final LazyLoadedDexApplication read(ExecutorService executorService) throws IOException {
+ return read(inputApp.getProguardMapInputData(), executorService);
}
public final LazyLoadedDexApplication readWithoutDumping(ExecutorService executorService)
throws IOException {
- return read(
- inputApp.getProguardMapInputData(),
- executorService,
- ProgramClassCollection.defaultConflictResolver(options.reporter),
- DumpInputFlags.noDump());
+ return read(inputApp.getProguardMapInputData(), executorService, DumpInputFlags.noDump());
}
public final LazyLoadedDexApplication read(
StringResource proguardMap,
ExecutorService executorService)
throws IOException {
- return read(
- proguardMap,
- executorService,
- ProgramClassCollection.defaultConflictResolver(options.reporter));
+ return read(proguardMap, executorService, options.getDumpInputFlags());
}
public final LazyLoadedDexApplication read(
StringResource proguardMap,
ExecutorService executorService,
- ProgramClassConflictResolver resolver)
- throws IOException {
- return read(proguardMap, executorService, resolver, options.getDumpInputFlags());
- }
-
- public final LazyLoadedDexApplication read(
- StringResource proguardMap,
- ExecutorService executorService,
- ProgramClassConflictResolver resolver,
DumpInputFlags dumpInputFlags)
throws IOException {
assert verifyMainDexOptionsCompatible(inputApp, options);
@@ -148,8 +126,7 @@
}
timing.begin("DexApplication.read");
- final LazyLoadedDexApplication.Builder builder =
- DexApplication.builder(options, timing, resolver);
+ final LazyLoadedDexApplication.Builder builder = DexApplication.builder(options, timing);
try {
List<Future<?>> futures = new ArrayList<>();
// Still preload some of the classes, primarily for two reasons:
diff --git a/src/main/java/com/android/tools/r8/graph/DexApplication.java b/src/main/java/com/android/tools/r8/graph/DexApplication.java
index 5dd4a97..49bfc86 100644
--- a/src/main/java/com/android/tools/r8/graph/DexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DexApplication.java
@@ -7,12 +7,10 @@
package com.android.tools.r8.graph;
import com.android.tools.r8.DataResourceProvider;
-import com.android.tools.r8.dex.ApplicationReader.ProgramClassConflictResolver;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.synthesis.SyntheticDefinitionsProvider;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.ProgramClassCollection;
import com.android.tools.r8.utils.Timing;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
@@ -265,13 +263,7 @@
}
public static LazyLoadedDexApplication.Builder builder(InternalOptions options, Timing timing) {
- return builder(
- options, timing, ProgramClassCollection.defaultConflictResolver(options.reporter));
- }
-
- public static LazyLoadedDexApplication.Builder builder(
- InternalOptions options, Timing timing, ProgramClassConflictResolver resolver) {
- return new LazyLoadedDexApplication.Builder(resolver, options, timing);
+ return new LazyLoadedDexApplication.Builder(options, timing);
}
public DirectMappedDexApplication asDirect() {
diff --git a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
index 584729a..80bb4cf 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
@@ -271,18 +271,15 @@
private ClasspathClassCollection classpathClasses;
private LibraryClassCollection libraryClasses;
- private final ProgramClassConflictResolver resolver;
- Builder(ProgramClassConflictResolver resolver, InternalOptions options, Timing timing) {
+ Builder(InternalOptions options, Timing timing) {
super(options, timing);
- this.resolver = resolver;
this.classpathClasses = ClasspathClassCollection.empty();
this.libraryClasses = null;
}
private Builder(LazyLoadedDexApplication application) {
super(application);
- this.resolver = ProgramClassCollection.defaultConflictResolver(application.options.reporter);
this.classpathClasses = application.classpathClasses;
this.libraryClasses = application.libraryClasses;
}
@@ -311,6 +308,10 @@
@Override
public LazyLoadedDexApplication build() {
+ ProgramClassConflictResolver resolver =
+ options.programClassConflictResolver == null
+ ? ProgramClassCollection.defaultConflictResolver(options.reporter)
+ : options.programClassConflictResolver;
return new LazyLoadedDexApplication(
proguardMap,
flags,
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 71260a7..1ffb413 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -23,6 +23,7 @@
import com.android.tools.r8.androidapi.ComputedApiLevel;
import com.android.tools.r8.cf.CfVersion;
import com.android.tools.r8.debuginfo.DebugRepresentation;
+import com.android.tools.r8.dex.ApplicationReader.ProgramClassConflictResolver;
import com.android.tools.r8.dex.Marker;
import com.android.tools.r8.dex.Marker.Backend;
import com.android.tools.r8.dex.Marker.Tool;
@@ -170,6 +171,8 @@
// TODO(zerny): Make this private-final once we have full program-consumer support.
public ProgramConsumer programConsumer = null;
+ public ProgramClassConflictResolver programClassConflictResolver = null;
+
private GlobalSyntheticsConsumer globalSyntheticsConsumer = null;
public DataResourceConsumer dataResourceConsumer;