Fix concurrent additions to liveNonProgramTypes

Bug: b/235454746
Change-Id: Ic4bf7d12e10da29fa3a133d7f13be3b5d9f43576
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 3addb2d..c731f7d 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -460,6 +460,8 @@
 
   private final InterfaceProcessor interfaceProcessor;
 
+  private final Thread mainThreadForTesting = Thread.currentThread();
+
   Enqueuer(
       AppView<? extends AppInfoWithClassHierarchy> appView,
       ExecutorService executorService,
@@ -686,6 +688,7 @@
       ProgramDerivedContext context,
       BiConsumer<DexClass, ProgramDerivedContext> foundClassConsumer,
       BiConsumer<DexType, ProgramDerivedContext> missingClassConsumer) {
+    assert verifyIsMainThread();
     return internalDefinitionFor(type, context, foundClassConsumer, missingClassConsumer)
         .toSingleClassWithProgramOverLibrary();
   }
@@ -1958,6 +1961,11 @@
   // Actual actions performed.
   //
 
+  private boolean verifyIsMainThread() {
+    assert Thread.currentThread() == mainThreadForTesting;
+    return true;
+  }
+
   private boolean verifyMethodIsTargeted(ProgramMethod method) {
     DexEncodedMethod definition = method.getDefinition();
     assert !definition.isClassInitializer() : "Class initializers are never targeted";
@@ -3943,7 +3951,7 @@
           lambdaCallback.andThen(
               (clazz, context) -> {
                 for (DexType itf : clazz.getLambdaProgramClass().getInterfaces()) {
-                  if (definitionFor(itf, context) == null) {
+                  if (appInfo().definitionFor(itf, context) == null) {
                     for (ProgramMethod method :
                         clazz.getLambdaProgramClass().virtualProgramMethods()) {
                       synchronized (additions) {