Revert "Fix lambda desugaring using nest based access"
This reverts commit 44653ffdc517ce276e39d4e9a3dc3a9b3593a554.
Reason for revert: Breaking multiple test (Regress191296688, AppDeterminismTest)
Change-Id: Ib8e85782406e315e66ecac6b683291eced1851d5
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index e348356..ac5addd 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -690,8 +690,6 @@
assert !appView.options().isGeneratingClassFiles() || replacement.getCode().isCfCode();
assert !appView.options().isGeneratingDex() || replacement.getCode().isDexCode();
ProgramMethod newMethod = new ProgramMethod(implMethodHolder, replacement);
- // TODO(b/236937595): Investigate why processing is needed here only in desugared library
- // compilation.
if (appView.options().isDesugaredLibraryCompilation()) {
assert appView.options().isGeneratingClassFiles();
needsProcessingConsumer.accept(newMethod);
@@ -780,8 +778,6 @@
assert !appView.options().isGeneratingClassFiles() || replacement.getCode().isCfCode();
assert !appView.options().isGeneratingDex() || replacement.getCode().isDexCode();
ProgramMethod newMethod = new ProgramMethod(implMethodHolder, replacement);
- // TODO(b/236937595): Investigate why processing is needed here only in desugared library
- // compilation.
if (appView.options().isDesugaredLibraryCompilation()) {
assert appView.options().isGeneratingClassFiles();
needsProcessingConsumer.accept(newMethod);
@@ -850,7 +846,10 @@
.disableAndroidApiLevelCheck()
.build());
accessorClass.addDirectMethod(accessorMethod.getDefinition());
- needsProcessingConsumer.accept(accessorMethod);
+ if (appView.options().isDesugaredLibraryCompilation()
+ || appView.options().isGeneratingDex()) {
+ needsProcessingConsumer.accept(accessorMethod);
+ }
return accessorMethod;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
index 37451f0..4da9973 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
@@ -10,7 +10,6 @@
import com.android.tools.r8.cf.code.CfFieldInstruction;
import com.android.tools.r8.cf.code.CfInstruction;
import com.android.tools.r8.cf.code.CfInvoke;
-import com.android.tools.r8.cf.code.CfInvokeDynamic;
import com.android.tools.r8.contexts.CompilationContext.MethodProcessingContext;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.AppView;
@@ -35,7 +34,6 @@
import com.android.tools.r8.ir.desugar.CfInstructionDesugaringCollection;
import com.android.tools.r8.ir.desugar.CfInstructionDesugaringEventConsumer;
import com.android.tools.r8.ir.desugar.FreshLocalProvider;
-import com.android.tools.r8.ir.desugar.LambdaDescriptor;
import com.android.tools.r8.ir.desugar.LocalStackAllocator;
import com.android.tools.r8.ir.desugar.ProgramAdditions;
import com.android.tools.r8.utils.BooleanUtils;
@@ -148,20 +146,6 @@
if (needsDesugaring(invokedMethod, method)) {
prepareDesugarMethodInstruction(invokedMethod, method, programAdditions);
}
- } else if (instruction.isInvokeDynamic()) {
- // Starting from Java 17, lambda can use nest based access. We need to generate
- // bridges for the targeted lambda method.
- CfInvokeDynamic cfInvokeDynamic = instruction.asInvokeDynamic();
- LambdaDescriptor lambdaDescriptor =
- LambdaDescriptor.tryInfer(
- cfInvokeDynamic.getCallSite(), appView.appInfoForDesugaring(), method);
- if (lambdaDescriptor != null) {
- DexMember<?, ?> member = lambdaDescriptor.implHandle.member;
- if (needsDesugaring(member, method)) {
- assert member.isDexMethod();
- prepareDesugarMethodInstruction(member.asDexMethod(), method, programAdditions);
- }
- }
}
});
}
diff --git a/src/test/examplesJava17/nest/NestLambda.java b/src/test/examplesJava17/nest/NestLambda.java
deleted file mode 100644
index 2c690b5..0000000
--- a/src/test/examplesJava17/nest/NestLambda.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package nest;
-
-import java.util.function.Consumer;
-
-public class NestLambda {
-
- private void print(Object o) {
- System.out.println("printed: " + o);
- }
-
- Inner getInner() {
- return new Inner();
- }
-
- class Inner {
-
- void exec(Consumer<Object> consumer) {
- consumer.accept("inner");
- }
-
- void execLambda() {
- exec(NestLambda.this::print);
- }
- }
-
- public static void main(String[] args) {
- new NestLambda().getInner().execLambda();
- }
-}
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestLambdaJava17Test.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestLambdaJava17Test.java
deleted file mode 100644
index 94fbe71..0000000
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestLambdaJava17Test.java
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.desugar.nestaccesscontrol;
-
-import static com.android.tools.r8.utils.AndroidApiLevel.B;
-import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
-
-import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.TestRuntime.CfVm;
-import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ToolHelper.DexVm.Version;
-import com.android.tools.r8.utils.AndroidApiLevel;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import org.junit.Assume;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-@RunWith(Parameterized.class)
-public class NestLambdaJava17Test extends TestBase {
-
- public NestLambdaJava17Test(TestParameters parameters) {
- this.parameters = parameters;
- }
-
- private static final Path JDK17_JAR =
- Paths.get(ToolHelper.TESTS_BUILD_DIR, "examplesJava17").resolve("nest" + JAR_EXTENSION);
- private static final String MAIN = "nest.NestLambda";
- private static final String EXPECTED_RESULT = "printed: inner";
-
- private final TestParameters parameters;
-
- @Parameters(name = "{0}")
- public static TestParametersCollection data() {
- return getTestParameters()
- .withCfRuntimesStartingFromIncluding(CfVm.JDK17)
- // The test requires the java.util.function. package.
- .withDexRuntimesStartingFromIncluding(Version.V7_0_0)
- .withApiLevel(AndroidApiLevel.N)
- .enableApiLevelsForCf()
- .build();
- }
-
- @Test
- public void testReference() throws Exception {
- Assume.assumeTrue(parameters.isCfRuntime());
- testForJvm()
- .addProgramFiles(JDK17_JAR)
- .run(parameters.getRuntime(), MAIN)
- .assertSuccessWithOutputLines(EXPECTED_RESULT);
- }
-
- @Test
- public void testJavaD8() throws Exception {
- testForDesugaring(parameters)
- .addProgramFiles(JDK17_JAR)
- .run(parameters.getRuntime(), MAIN)
- .assertSuccessWithOutputLines(EXPECTED_RESULT);
- }
-
- @Test
- public void testR8() throws Exception {
- Assume.assumeTrue(parameters.isDexRuntime() || parameters.getApiLevel().equals(B));
- testForR8(parameters.getBackend())
- .addProgramFiles(JDK17_JAR)
- .applyIf(
- parameters.isCfRuntime(),
- // Alternatively we need to pass Jdk17 as library.
- b -> b.addKeepRules("-dontwarn java.lang.invoke.StringConcatFactory"))
- .setMinApi(parameters.getApiLevel())
- .addKeepMainRule(MAIN)
- .run(parameters.getRuntime(), MAIN)
- .assertSuccessWithOutputLines(EXPECTED_RESULT);
- }
-}