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 2a50b33..c1f0b40 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -456,6 +456,8 @@
 
   private final InterfaceProcessor interfaceProcessor;
 
+  private final Thread mainThreadForTesting = Thread.currentThread();
+
   Enqueuer(
       AppView<? extends AppInfoWithClassHierarchy> appView,
       ExecutorService executorService,
@@ -672,6 +674,7 @@
       ProgramDerivedContext context,
       BiConsumer<DexClass, ProgramDerivedContext> foundClassConsumer,
       BiConsumer<DexType, ProgramDerivedContext> missingClassConsumer) {
+    assert verifyIsMainThread();
     return internalDefinitionFor(type, context, foundClassConsumer, missingClassConsumer);
   }
 
@@ -1913,6 +1916,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";
@@ -3835,7 +3843,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) {