Refactor ObjectAllocationInfoCollectionImpl, share duplicate code

Change-Id: If4681499d016656a1a2e2a6625a6b36cb1de97da
diff --git a/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java b/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java
index 669e86b..77e5389 100644
--- a/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java
+++ b/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java
@@ -491,16 +491,13 @@
         GraphLens lens,
         GraphLens appliedLens) {
       instantiatedHierarchy = null;
-      objectAllocationInfos.classesWithoutAllocationSiteTracking.forEach(
-          clazz -> {
-            DexType type = lens.lookupType(clazz.type, appliedLens);
-            if (type.isPrimitiveType()) {
-              return;
-            }
-            DexProgramClass rewrittenClass = asProgramClassOrNull(definitions.definitionFor(type));
-            assert rewrittenClass != null;
-            classesWithoutAllocationSiteTracking.add(rewrittenClass);
-          });
+      rewrittenWithLens(
+          objectAllocationInfos.classesWithoutAllocationSiteTracking,
+          definitions,
+          lens,
+          appliedLens,
+          classesWithoutAllocationSiteTracking,
+          true);
       objectAllocationInfos.classesWithAllocationSiteTracking.forEach(
           (clazz, allocationSitesForClass) -> {
             DexType type = lens.lookupType(clazz.type, appliedLens);
@@ -520,30 +517,20 @@
                     LensUtils.rewrittenWithRenamedSignature(
                         allocationSitesForClass, definitions, lens));
           });
-      for (DexProgramClass abstractType :
-          objectAllocationInfos.interfacesWithUnknownSubtypeHierarchy) {
-        DexType type = lens.lookupType(abstractType.type, appliedLens);
-        if (type.isPrimitiveType()) {
-          assert false;
-          continue;
-        }
-        DexProgramClass rewrittenClass = asProgramClassOrNull(definitions.definitionFor(type));
-        assert rewrittenClass != null;
-        assert !interfacesWithUnknownSubtypeHierarchy.contains(rewrittenClass);
-        interfacesWithUnknownSubtypeHierarchy.add(rewrittenClass);
-      }
-      for (DexProgramClass abstractType :
-          objectAllocationInfos.annotationsWithUnknownSubtypeHierarchy) {
-        DexType type = lens.lookupType(abstractType.type, appliedLens);
-        if (type.isPrimitiveType()) {
-          assert false;
-          continue;
-        }
-        DexProgramClass rewrittenClass = asProgramClassOrNull(definitions.definitionFor(type));
-        assert rewrittenClass != null;
-        assert !annotationsWithUnknownSubtypeHierarchy.contains(rewrittenClass);
-        annotationsWithUnknownSubtypeHierarchy.add(rewrittenClass);
-      }
+      rewrittenWithLens(
+          objectAllocationInfos.interfacesWithUnknownSubtypeHierarchy,
+          definitions,
+          lens,
+          appliedLens,
+          interfacesWithUnknownSubtypeHierarchy,
+          false);
+      rewrittenWithLens(
+          objectAllocationInfos.annotationsWithUnknownSubtypeHierarchy,
+          definitions,
+          lens,
+          appliedLens,
+          annotationsWithUnknownSubtypeHierarchy,
+          false);
       LensCodeRewriterUtils rewriter = new LensCodeRewriterUtils(definitions, lens, appliedLens);
       objectAllocationInfos.instantiatedLambdas.forEach(
           (iface, lambdas) -> {
@@ -561,6 +548,26 @@
       return this;
     }
 
+    private void rewrittenWithLens(
+        Set<DexProgramClass> toRewrite,
+        DexDefinitionSupplier definitions,
+        GraphLens lens,
+        GraphLens appliedLens,
+        Set<DexProgramClass> rewritten,
+        boolean allowCollissionsAndPrimitives) {
+      for (DexProgramClass clazz : toRewrite) {
+        DexType type = lens.lookupType(clazz.type, appliedLens);
+        if (type.isPrimitiveType()) {
+          assert allowCollissionsAndPrimitives;
+          continue;
+        }
+        DexProgramClass rewrittenClass = asProgramClassOrNull(definitions.definitionFor(type));
+        assert rewrittenClass != null;
+        boolean added = rewritten.add(rewrittenClass);
+        assert allowCollissionsAndPrimitives || added;
+      }
+    }
+
     // Validation that all types are linked in the instantiated hierarchy map.
     boolean validate(DexDefinitionSupplier definitions) {
       classesWithAllocationSiteTracking.forEach(