diff --git a/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorVerifier.java b/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorVerifier.java
index 0e6c73a..e2a7197 100644
--- a/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorVerifier.java
+++ b/src/main/java/com/android/tools/r8/GlobalSyntheticsGeneratorVerifier.java
@@ -6,7 +6,6 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexItemFactory;
 import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.ir.desugar.LambdaClass;
 import com.android.tools.r8.utils.InternalOptions;
 import java.util.function.Consumer;
 
@@ -18,7 +17,7 @@
     consumer.accept(dexItemFactory.methodHandlesLookupType);
     consumer.accept(dexItemFactory.recordType);
     consumer.accept(dexItemFactory.varHandleType);
-    if (LambdaClass.isEmitLambdaMethodAnnotations(options)) {
+    if (options.emitLambdaMethodAnnotations) {
       consumer.accept(dexItemFactory.lambdaMethodAnnotation);
     }
   }
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 3f795a8..5734a3e 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
@@ -42,7 +42,6 @@
 import com.android.tools.r8.ir.desugar.lambda.LambdaInstructionDesugaring.DesugarInvoke;
 import com.android.tools.r8.ir.desugar.lambda.SyntheticLambdaAccessorMethodConsumer;
 import com.android.tools.r8.synthesis.SyntheticProgramClassBuilder;
-import com.android.tools.r8.utils.InternalOptions;
 import com.google.common.collect.ImmutableList;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -256,13 +255,8 @@
     builder.setInstanceFields(fields);
   }
 
-  public static boolean isEmitLambdaMethodAnnotations(InternalOptions options) {
-    return options.emitLambdaMethodAnnotations
-        || (options.debug && (!options.intermediate || options.hasGlobalSyntheticsConsumer()));
-  }
-
   private void synthesizeAnnotations(SyntheticProgramClassBuilder builder) {
-    if (isEmitLambdaMethodAnnotations(appView.options())) {
+    if (appView.options().emitLambdaMethodAnnotations) {
       builder.addAnnotation(target.getLambdaMethodAnnotation(builder.getFactory()));
     }
   }
@@ -271,7 +265,7 @@
       AppView<?> appView,
       LambdaDesugaringEventConsumer eventConsumer,
       Collection<? extends ProgramDefinition> contexts) {
-    if (!isEmitLambdaMethodAnnotations(appView.options())) {
+    if (!appView.options().emitLambdaMethodAnnotations) {
       return;
     }
     DexType lambdaClassAnnotationType = appView.dexItemFactory().lambdaMethodAnnotation;
diff --git a/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaCallTargetAnnotationTest.java b/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaCallTargetAnnotationTest.java
index 000bedd..a4b9d3c 100644
--- a/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaCallTargetAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/lambdas/LambdaCallTargetAnnotationTest.java
@@ -3,12 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.desugar.lambdas;
 
-import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentIf;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.GlobalSyntheticsTestingConsumer;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -31,19 +30,15 @@
   public TestParameters parameters;
 
   @Parameter(1)
-  public CompilationMode mode;
-
-  @Parameter(2)
   public boolean intermediate;
 
-  @Parameter(3)
+  @Parameter(2)
   public boolean forceLambdaAccessor;
 
-  @Parameterized.Parameters(name = "{0}, mode = {1}, intermediate = {2}, forceLambdaAccessor = {3}")
+  @Parameterized.Parameters(name = "{0}, intermediate = {1}, forceLambdaAccessor = {2}")
   public static List<Object[]> data() {
     return buildParameters(
         getTestParameters().withNoneRuntime().build(),
-        CompilationMode.values(),
         BooleanUtils.values(),
         BooleanUtils.values());
   }
@@ -58,10 +53,7 @@
 
   private void checkAnnotation(
       AnnotationSubject lambdaMethodAnnotation, String holder, String method, String proto) {
-    assertThat(lambdaMethodAnnotation, isPresentIf(mode.isDebug()));
-    if (mode.isRelease()) {
-      return;
-    }
+    assertThat(lambdaMethodAnnotation, isPresent());
     DexEncodedAnnotation encodedAnnotation = lambdaMethodAnnotation.getAnnotation();
     assertEquals(3, encodedAnnotation.getNumberOfElements());
 
@@ -78,8 +70,9 @@
     testForD8(Backend.DEX)
         .addInnerClasses(LambdaCallTargetAnnotationTest.class)
         .setMinApi(AndroidApiLevel.L)
-        .setMode(mode)
-        .setIntermediate(mode.isDebug() && intermediate)
+        .debug()
+        .setIntermediate(intermediate)
+        .addOptionsModification(options -> options.emitLambdaMethodAnnotations = true)
         .applyIf(intermediate, b -> b.getBuilder().setGlobalSyntheticsConsumer(globals))
         .addOptionsModification(
             options -> options.testing.forceLambdaAccessorInD8 = forceLambdaAccessor)
