Add finished callback to the desugar graph consumer.

Bug: 138988172
Change-Id: Id040dfcc044b23f8821e4f64eccb05c816253d08
diff --git a/src/main/java/com/android/tools/r8/DesugarGraphConsumer.java b/src/main/java/com/android/tools/r8/DesugarGraphConsumer.java
index d75b2b0..2210490 100644
--- a/src/main/java/com/android/tools/r8/DesugarGraphConsumer.java
+++ b/src/main/java/com/android/tools/r8/DesugarGraphConsumer.java
@@ -21,4 +21,11 @@
    * @param dependency Origin of code that is a dependency to compile {@code dependent}.
    */
   void accept(Origin dependent, Origin dependency);
+
+  /**
+   * Callback indicating no more dependency edges for the active compilation unit.
+   *
+   * <p>Note: this callback places no other guarantees on number of calls or on which threads.
+   */
+  void finished();
 }
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 9b47305..cf2844f 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -366,6 +366,9 @@
         }
       }
     }
+    if (desugarGraphConsumer != null) {
+      desugarGraphConsumer.finished();
+    }
   }
 
   public boolean shouldDesugarNests() {
diff --git a/src/test/java/com/android/tools/r8/desugar/graph/DesugarGraphTestConsumer.java b/src/test/java/com/android/tools/r8/desugar/graph/DesugarGraphTestConsumer.java
index 2111b7d..186b01b 100644
--- a/src/test/java/com/android/tools/r8/desugar/graph/DesugarGraphTestConsumer.java
+++ b/src/test/java/com/android/tools/r8/desugar/graph/DesugarGraphTestConsumer.java
@@ -3,6 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.desugar.graph;
 
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import com.android.tools.r8.DesugarGraphConsumer;
 import com.android.tools.r8.origin.Origin;
 import java.util.Collections;
@@ -13,13 +16,16 @@
 
 public class DesugarGraphTestConsumer implements DesugarGraphConsumer {
 
+  private boolean finished = false;
   private Map<Origin, Set<Origin>> edges = new HashMap<>();
 
   public boolean contains(Origin dependency, Origin dependent) {
+    assertTrue(finished);
     return edges.getOrDefault(dependency, Collections.emptySet()).contains(dependent);
   }
 
   public int totalEdgeCount() {
+    assertTrue(finished);
     int count = 0;
     for (Set<Origin> dependents : edges.values()) {
       count += dependents.size();
@@ -29,6 +35,13 @@
 
   @Override
   public synchronized void accept(Origin dependent, Origin dependency) {
+    assertFalse(finished);
     edges.computeIfAbsent(dependency, s -> new HashSet<>()).add(dependent);
   }
+
+  @Override
+  public void finished() {
+    assertFalse(finished);
+    finished = true;
+  }
 }