Create the source file provider when initializing options.
Change-Id: If0d439a0d35986ffa0ec473903225368588f7862
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 1483137..72c0cbb 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -69,7 +69,6 @@
import com.android.tools.r8.naming.ProguardMapMinifier;
import com.android.tools.r8.naming.ProguardMapSupplier;
import com.android.tools.r8.naming.RecordRewritingNamingLens;
-import com.android.tools.r8.naming.SourceFileRewriter;
import com.android.tools.r8.naming.signature.GenericSignatureRewriter;
import com.android.tools.r8.optimize.ClassAndMemberPublicizer;
import com.android.tools.r8.optimize.MemberRebindingAnalysis;
@@ -796,11 +795,6 @@
LineNumberOptimizer.run(appView, getDirectApp(appView), inputApp, namingLens);
timing.end();
- // Overwrite SourceFile if specified. This step should be done after IR conversion.
- timing.begin("Rename SourceFile");
- new SourceFileRewriter(appView).run();
- timing.end();
-
// If a method filter is present don't produce output since the application is likely partial.
if (options.hasMethodsFilter()) {
System.out.println("Finished compilation with method filter: ");
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 4923f93..cec2d83 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -15,6 +15,7 @@
import com.android.tools.r8.inspector.Inspector;
import com.android.tools.r8.inspector.internal.InspectorImpl;
import com.android.tools.r8.ir.desugar.desugaredlibrary.DesugaredLibraryConfiguration;
+import com.android.tools.r8.naming.SourceFileRewriter;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.shaking.ProguardConfiguration;
@@ -868,9 +869,6 @@
internal.enableVerticalClassMerging = false;
}
- internal.mapIdProvider = getMapIdProvider();
- internal.sourceFileProvider = getSourceFileProvider();
-
// Amend the proguard-map consumer with options from the proguard configuration.
internal.proguardMapConsumer =
wrapStringConsumer(
@@ -940,6 +938,13 @@
internal.synthesizedClassPrefix = synthesizedClassPrefix;
internal.desugaredLibraryKeepRuleConsumer = desugaredLibraryKeepRuleConsumer;
+ // Set up the map and source file providers.
+ // Note that minify/optimize settings must be set on internal options before doing this.
+ internal.mapIdProvider = getMapIdProvider();
+ internal.sourceFileProvider =
+ SourceFileRewriter.computeSourceFileProvider(
+ getSourceFileProvider(), proguardConfiguration, internal);
+
if (!DETERMINISTIC_DEBUGGING) {
assert internal.threadCount == ThreadUtils.NOT_SPECIFIED;
internal.threadCount = getThreadCount();
diff --git a/src/main/java/com/android/tools/r8/naming/SourceFileRewriter.java b/src/main/java/com/android/tools/r8/naming/SourceFileRewriter.java
index 13d7fc6..5302787 100644
--- a/src/main/java/com/android/tools/r8/naming/SourceFileRewriter.java
+++ b/src/main/java/com/android/tools/r8/naming/SourceFileRewriter.java
@@ -5,38 +5,31 @@
import com.android.tools.r8.SourceFileEnvironment;
import com.android.tools.r8.SourceFileProvider;
-import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.shaking.ProguardConfiguration;
+import com.android.tools.r8.utils.InternalOptions;
/** Computes the source file provider based on the proguard configuration if none is set. */
public class SourceFileRewriter {
- private final AppView<?> appView;
-
- public SourceFileRewriter(AppView<?> appView) {
- this.appView = appView;
+ public static SourceFileProvider computeSourceFileProvider(
+ SourceFileProvider provider, ProguardConfiguration configuration, InternalOptions options) {
+ if (provider != null) {
+ return provider;
+ }
+ if (!configuration.getKeepAttributes().sourceFile) {
+ return rewriteToDefaultSourceFile(options.dexItemFactory());
+ }
+ if (options.forceProguardCompatibility) {
+ return computeCompatProvider(options);
+ }
+ return computeNonCompatProvider(options);
}
- public void run() {
- if (appView.options().sourceFileProvider != null) {
- return;
- }
- appView.options().sourceFileProvider = computeSourceFileProvider();
- }
-
- public SourceFileProvider computeSourceFileProvider() {
- if (!appView.options().getProguardConfiguration().getKeepAttributes().sourceFile) {
- return rewriteToDefaultSourceFile();
- }
- if (appView.options().forceProguardCompatibility) {
- return computeCompatProvider();
- }
- return computeNonCompatProvider();
- }
-
- private SourceFileProvider computeCompatProvider() {
+ private static SourceFileProvider computeCompatProvider(InternalOptions options) {
// Compatibility mode will only apply -renamesourcefileattribute when minifying names.
- if (appView.options().isMinifying()) {
- String renaming = getRenameSourceFileAttribute();
+ if (options.isMinifying()) {
+ String renaming = getRenameSourceFileAttribute(options);
if (renaming != null) {
return rewriteTo(renaming);
}
@@ -44,26 +37,26 @@
return null;
}
- private SourceFileProvider computeNonCompatProvider() {
- String renaming = getRenameSourceFileAttribute();
+ private static SourceFileProvider computeNonCompatProvider(InternalOptions options) {
+ String renaming = getRenameSourceFileAttribute(options);
if (renaming != null) {
return rewriteTo(renaming);
}
- if (appView.options().isMinifying() || appView.options().isOptimizing()) {
- return rewriteToDefaultSourceFile();
+ if (options.isMinifying() || options.isOptimizing()) {
+ return rewriteToDefaultSourceFile(options.dexItemFactory());
}
return null;
}
- private String getRenameSourceFileAttribute() {
- return appView.options().getProguardConfiguration().getRenameSourceFileAttribute();
+ private static String getRenameSourceFileAttribute(InternalOptions options) {
+ return options.getProguardConfiguration().getRenameSourceFileAttribute();
}
- private SourceFileProvider rewriteToDefaultSourceFile() {
- return rewriteTo(appView.dexItemFactory().defaultSourceFileAttributeString);
+ private static SourceFileProvider rewriteToDefaultSourceFile(DexItemFactory factory) {
+ return rewriteTo(factory.defaultSourceFileAttributeString);
}
- private SourceFileProvider rewriteTo(String renaming) {
+ private static SourceFileProvider rewriteTo(String renaming) {
return new SourceFileProvider() {
@Override
public String get(SourceFileEnvironment environment) {