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);
-  }
-}
