Add application builder to rewrite utility.
This CL reverts bf04e3271e21463c4f8fad0555eb6da761c4f41f which
removed the application builder and instead passes it to the
application rewrite ensuring the synthetic class is added.
Change-Id: I9d258d37ff67f8cbc6c82b31e3ef3fefef031ea9
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index c006eb5..66588be 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -31,6 +31,7 @@
import com.android.tools.r8.graph.DexReference;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DirectMappedDexApplication;
+import com.android.tools.r8.graph.DirectMappedDexApplication.Builder;
import com.android.tools.r8.graph.EnumValueInfoMapCollection;
import com.android.tools.r8.graph.GraphLens;
import com.android.tools.r8.graph.GraphLens.NestedGraphLens;
@@ -487,8 +488,11 @@
if (options.shouldDesugarNests()) {
timing.begin("NestBasedAccessDesugaring");
R8NestBasedAccessDesugaring analyzer = new R8NestBasedAccessDesugaring(appViewWithLiveness);
- NestedPrivateMethodLens lens = analyzer.run(executorService);
- appView.rewriteWithLens(lens);
+ Builder appBuilder = getDirectApp(appView).builder();
+ NestedPrivateMethodLens lens = analyzer.run(executorService, appBuilder);
+ if (lens != null) {
+ appView.rewriteWithLensAndApplication(lens, appBuilder.build());
+ }
timing.end();
} else {
timing.begin("NestReduction");
diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index 3bacf89..6431d85 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -470,16 +470,24 @@
}
public void rewriteWithLens(NestedGraphLens lens) {
- rewriteWithLens(lens, withLiveness());
+ if (lens != null) {
+ rewriteWithLens(lens, appInfo().app().asDirect(), withLiveness());
+ }
}
- private static void rewriteWithLens(NestedGraphLens lens, AppView<AppInfoWithLiveness> appView) {
- if (lens == null) {
- return;
- }
+ public void rewriteWithLensAndApplication(
+ NestedGraphLens lens, DirectMappedDexApplication application) {
+ assert lens != null;
+ assert application != null;
+ rewriteWithLens(lens, application, withLiveness());
+ }
+
+ private static void rewriteWithLens(
+ NestedGraphLens lens,
+ DirectMappedDexApplication application,
+ AppView<AppInfoWithLiveness> appView) {
boolean changed = appView.setGraphLens(lens);
assert changed;
- DirectMappedDexApplication application = appView.appInfo().app().asDirect();
assert application.verifyWithLens(lens);
appView.setAppInfo(appView.appInfo().rewrittenWithLens(application, lens));
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java
index c7f6f2c..42e3ec7 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/NestBasedAccessDesugaring.java
@@ -194,16 +194,10 @@
DexProgramClass::checksumFromType);
}
- void synthesizeNestConstructor() {
- synthesizeNestConstructor(null);
- }
-
void synthesizeNestConstructor(DexApplication.Builder<?> builder) {
if (nestConstructorUsed) {
appView.appInfo().addSynthesizedClass(nestConstructor);
- if (builder != null) {
- builder.addSynthesizedClass(nestConstructor, true);
- }
+ builder.addSynthesizedClass(nestConstructor, true);
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/R8NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/R8NestBasedAccessDesugaring.java
index d275f4a..e9ac116 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/R8NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/R8NestBasedAccessDesugaring.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.ir.desugar;
import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexApplication;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexProgramClass;
@@ -32,14 +33,16 @@
super(appView);
}
- public NestedPrivateMethodLens run(ExecutorService executorService) throws ExecutionException {
+ public NestedPrivateMethodLens run(
+ ExecutorService executorService, DexApplication.Builder<?> appBuilder)
+ throws ExecutionException {
assert !appView.options().canUseNestBasedAccess()
|| appView.options().testing.enableForceNestBasedAccessDesugaringForTest;
computeAndProcessNestsConcurrently(executorService);
NestedPrivateMethodLens.Builder lensBuilder = NestedPrivateMethodLens.builder();
addDeferredBridgesAndMapMethods(lensBuilder);
clearNestAttributes();
- synthesizeNestConstructor();
+ synthesizeNestConstructor(appBuilder);
return lensBuilder.build(appView, getNestConstructorType());
}