Allow using committed items in definitionsFor lookup.

Change-Id: Ia96c49832e3b611aa1679e9d764fe4f535cd3f5f
diff --git a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
index 08e5190..d803a42 100644
--- a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
@@ -73,12 +73,13 @@
     return classpathClasses;
   }
 
-  public DexDefinitionSupplier getDefinitionsSupplier(SyntheticItems syntheticItems) {
+  public DexDefinitionSupplier getDefinitionsSupplier(
+      SyntheticDefinitionsProvider syntheticDefinitionsProvider) {
     DirectMappedDexApplication self = this;
     return new DexDefinitionSupplier() {
       @Override
       public DexClass definitionFor(DexType type) {
-        return syntheticItems.definitionFor(type, self::definitionFor);
+        return syntheticDefinitionsProvider.definitionFor(type, self::definitionFor);
       }
 
       @Override
diff --git a/src/main/java/com/android/tools/r8/graph/SyntheticDefinitionsProvider.java b/src/main/java/com/android/tools/r8/graph/SyntheticDefinitionsProvider.java
new file mode 100644
index 0000000..82e37ab
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/graph/SyntheticDefinitionsProvider.java
@@ -0,0 +1,10 @@
+// Copyright (c) 2020, 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.graph;
+
+import java.util.function.Function;
+
+public interface SyntheticDefinitionsProvider {
+  DexClass definitionFor(DexType type, Function<DexType, DexClass> baseDefinitionFor);
+}
diff --git a/src/main/java/com/android/tools/r8/graph/SyntheticItems.java b/src/main/java/com/android/tools/r8/graph/SyntheticItems.java
index 20c073a..3df048f 100644
--- a/src/main/java/com/android/tools/r8/graph/SyntheticItems.java
+++ b/src/main/java/com/android/tools/r8/graph/SyntheticItems.java
@@ -11,9 +11,9 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
 
-public class SyntheticItems {
+public class SyntheticItems implements SyntheticDefinitionsProvider {
 
-  public static class CommittedItems {
+  public static class CommittedItems implements SyntheticDefinitionsProvider {
     // Set of all types that represent synthesized items.
     private final ImmutableSet<DexType> syntheticTypes;
 
@@ -24,6 +24,11 @@
     SyntheticItems toSyntheticItems() {
       return new SyntheticItems(syntheticTypes);
     }
+
+    @Override
+    public DexClass definitionFor(DexType type, Function<DexType, DexClass> baseDefinitionFor) {
+      return baseDefinitionFor.apply(type);
+    }
   }
 
   // Thread safe collection of synthesized classes that are not yet committed to the application.
@@ -48,6 +53,7 @@
     return Collections.unmodifiableCollection(pendingClasses.values());
   }
 
+  @Override
   public DexClass definitionFor(DexType type, Function<DexType, DexClass> baseDefinitionFor) {
     DexProgramClass pending = pendingClasses.get(type);
     if (pending != null) {
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index 167d577..05c6f6c 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -42,6 +42,7 @@
 import com.android.tools.r8.graph.ResolutionResult.SingleResolutionResult;
 import com.android.tools.r8.graph.SubtypingInfo;
 import com.android.tools.r8.graph.SyntheticItems;
+import com.android.tools.r8.graph.SyntheticItems.CommittedItems;
 import com.android.tools.r8.ir.analysis.type.ClassTypeElement;
 import com.android.tools.r8.ir.code.Invoke.Type;
 import com.android.tools.r8.ir.desugar.DesugaredLibraryAPIConverter;
@@ -999,11 +1000,11 @@
             .map(FieldResolutionResult::getResolvedField)
             .collect(Collectors.toList()));
 
-    DexDefinitionSupplier definitionSupplier =
-        application.getDefinitionsSupplier(SyntheticItems.createInitialSyntheticItems());
+    CommittedItems committedItems = getSyntheticItems().commit(application, lens);
+    DexDefinitionSupplier definitionSupplier = application.getDefinitionsSupplier(committedItems);
     return new AppInfoWithLiveness(
         application,
-        getSyntheticItems().commit(application, lens),
+        committedItems,
         deadProtoTypes,
         missingTypes,
         lens.rewriteTypes(liveTypes),