Rewrite AppInfoWithLiveness using LambdaRewriterLens
Bug: 161735546
Change-Id: I5be59f19a40a1455810bd22c2de95d4e50159354
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 93f229c..fa6c0f3 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -702,7 +702,7 @@
timing)
.withEnumValueInfoMaps(enumValueInfoMapCollection));
// Rerunning the enqueuer should not give rise to any method rewritings.
- assert enqueuer.buildGraphLens(appView) == appView.graphLens();
+ assert enqueuer.buildGraphLens(appView) == null;
appView.withGeneratedMessageLiteBuilderShrinker(
shrinker ->
shrinker.rewriteDeadBuilderReferencesFromDynamicMethods(
@@ -979,7 +979,14 @@
options.getProguardConfiguration().getDontWarnPatterns(),
executorService,
timing));
- appView.setGraphLens(enqueuer.buildGraphLens(appView));
+ NestedGraphLens lens = enqueuer.buildGraphLens(appView);
+ if (lens != null) {
+ appView.setGraphLens(lens);
+ appViewWithLiveness.setAppInfo(
+ appViewWithLiveness
+ .appInfo()
+ .rewrittenWithLens(appView.appInfo().app().asDirect(), lens));
+ }
if (InternalOptions.assertionsEnabled()) {
// Register the dead proto types. These are needed to verify that no new missing types are
// reported and that no dead proto types are referenced in the generated application.
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
index 6e41b1a..3709176 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
@@ -347,9 +347,9 @@
return knownLambdaClasses;
}
- public GraphLens buildMappingLens(AppView<?> appView) {
+ public NestedGraphLens buildMappingLens(AppView<?> appView) {
if (originalMethodSignatures.isEmpty()) {
- return appView.graphLens();
+ return null;
}
return new LambdaRewriterLens(
originalMethodSignatures, appView.graphLens(), appView.dexItemFactory());
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 281561b..f2cdfea 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -57,7 +57,7 @@
import com.android.tools.r8.graph.FieldAccessInfoCollectionImpl;
import com.android.tools.r8.graph.FieldAccessInfoImpl;
import com.android.tools.r8.graph.FieldResolutionResult;
-import com.android.tools.r8.graph.GraphLens;
+import com.android.tools.r8.graph.GraphLens.NestedGraphLens;
import com.android.tools.r8.graph.InnerClassAttribute;
import com.android.tools.r8.graph.LookupLambdaTarget;
import com.android.tools.r8.graph.LookupTarget;
@@ -2733,8 +2733,8 @@
return appInfoWithLiveness;
}
- public GraphLens buildGraphLens(AppView<?> appView) {
- return lambdaRewriter != null ? lambdaRewriter.buildMappingLens(appView) : appView.graphLens();
+ public NestedGraphLens buildGraphLens(AppView<?> appView) {
+ return lambdaRewriter != null ? lambdaRewriter.buildMappingLens(appView) : null;
}
private void keepClassWithRules(DexProgramClass clazz, Set<ProguardKeepRuleBase> rules) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/B161735546.java b/src/test/java/com/android/tools/r8/ir/optimize/B161735546.java
index 1d880e6..ce969b7 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/B161735546.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/B161735546.java
@@ -4,10 +4,6 @@
package com.android.tools.r8.ir.optimize;
-import static org.junit.Assert.assertTrue;
-
-import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -31,21 +27,11 @@
@Test
public void test() throws Exception {
- R8TestCompileResult compileResult = null;
- try {
- compileResult =
- testForR8(parameters.getBackend())
- .addInnerClasses(B161735546.class)
- .addKeepMainRule(TestClass.class)
- .setMinApi(parameters.getApiLevel())
- .compile();
- } catch (CompilationFailedException e) {
- // TODO(b/161735546): Fix NPE.
- assertTrue(parameters.isDexRuntime());
- return;
- }
-
- compileResult
+ testForR8(parameters.getBackend())
+ .addInnerClasses(B161735546.class)
+ .addKeepMainRule(TestClass.class)
+ .setMinApi(parameters.getApiLevel())
+ .compile()
.run(parameters.getRuntime(), TestClass.class)
.assertSuccessWithOutputLines("1", "2", "3");
}