Clear nest attributes after desugaring
Bug: 188075969
Change-Id: I5ba177ee11184cbb878818144914b3e3b1a06702
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 13dab34..0243104 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -367,6 +367,11 @@
D8NestBasedAccessDesugaring::reportDesugarDependencies);
}
+ private void clearNestAttributes() {
+ instructionDesugaring.withD8NestBasedAccessDesugaring(
+ D8NestBasedAccessDesugaring::clearNestAttributes);
+ }
+
private void staticizeClasses(
OptimizationFeedback feedback, ExecutorService executorService, GraphLens applied)
throws ExecutionException {
@@ -424,6 +429,7 @@
convertClasses(executor);
reportNestDesugarDependencies();
+ clearNestAttributes();
if (appView.getSyntheticItems().hasPendingSyntheticClasses()) {
appView.setAppInfo(
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/nest/D8NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/nest/D8NestBasedAccessDesugaring.java
index b622057..430d8ad 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/nest/D8NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/nest/D8NestBasedAccessDesugaring.java
@@ -55,6 +55,17 @@
});
}
+ public void clearNestAttributes() {
+ forEachNest(
+ nest -> {
+ nest.getHostClass().clearNestMembers();
+ nest.getMembers().forEach(DexClass::clearNestHost);
+ },
+ classWithoutHost -> {
+ // Do Nothing
+ });
+ }
+
public void synthesizeBridgesForNestBasedAccessesOnClasspath(
MethodProcessor methodProcessor, ExecutorService executorService) throws ExecutionException {
List<DexClasspathClass> classpathClassesInNests = new ArrayList<>();
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11D8CompilationTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11D8CompilationTest.java
index 4a4a861..a4c0ca7 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11D8CompilationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11D8CompilationTest.java
@@ -8,6 +8,7 @@
import static com.android.tools.r8.utils.InternalOptions.ASM_VERSION;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertTrue;
+import static junit.framework.TestCase.fail;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -64,8 +65,7 @@
.addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.setMinApi(AndroidApiLevel.B)
.compile()
- // TODO(b/188075969): Enable this. Left out for now to enable the iteration below.
- // .inspect(Java11D8CompilationTest::assertNoNests)
+ .inspect(Java11D8CompilationTest::assertNoNests)
.writeToZip();
// Check that the desugared classes has the expected class file versions and that no nest
@@ -116,16 +116,16 @@
@Override
public void visitNestHost(String nestHost) {
- // ASM will report the NestHost attribute independently of class file version.
- // TODO(b/188075969): Enable this.
- // assert false;
+ // ASM will always report the NestHost attribute if present (independently of class
+ // file version).
+ fail();
}
@Override
public void visitNestMember(String nestMember) {
- // ASM will report the NestMembers attribute independently of class file version.
- // TODO(b/188075969): Enable this.
- // assert false;
+ // ASM will always report the NestHost attribute if present (independently of class
+ // file version).
+ fail();
}
}