Revert "Introduce a consumer data abstraction for all program consumers."

This reverts commit 1d834576b0065e8a8e801362919f095a69b5db54.

The change to the program consumers is not backwards compatible.
A new API needs to be introduced to record the synthesized items graph.

Bug: b/241351268
Change-Id: I1f09551a58b0f9235ceba89415a5afd46cd39e42
diff --git a/src/main/java/com/android/tools/r8/ClassFileConsumer.java b/src/main/java/com/android/tools/r8/ClassFileConsumer.java
index 79330fb..fa3e5c4 100644
--- a/src/main/java/com/android/tools/r8/ClassFileConsumer.java
+++ b/src/main/java/com/android/tools/r8/ClassFileConsumer.java
@@ -4,7 +4,6 @@
 package com.android.tools.r8;
 
 import com.android.tools.r8.utils.ArchiveBuilder;
-import com.android.tools.r8.utils.ClassFileConsumerDataImpl;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.DirectoryBuilder;
 import com.android.tools.r8.utils.OutputBuilder;
@@ -37,28 +36,22 @@
    * {@param handler}. If an error is reported via {@param handler} and no exceptions are thrown,
    * then the compiler guaranties to exit with an error.
    *
-   * <p>The {@link ByteDataView} obtained by way of {@param data} object can only be assumed valid
-   * during the duration of the accept. If the bytes are needed beyond that, a copy must be made
-   * elsewhere.
+   * <p>The {@link ByteDataView} {@param data} object can only be assumed valid during the duration
+   * of the accept. If the bytes are needed beyond that, a copy must be made elsewhere.
    *
-   * @param data Java class-file encoded data and its meta-data.
+   * @param data Java class-file encoded data.
+   * @param descriptor Class descriptor of the class the data pertains to.
+   * @param handler Diagnostics handler for reporting.
    */
-  default void acceptClassFile(ClassFileConsumerData data) {
-    accept(data.getByteDataView(), data.getClassDescriptor(), data.getDiagnosticsHandler());
-  }
-
-  @Deprecated
-  default void accept(ByteDataView data, String descriptor, DiagnosticsHandler handler) {
-    acceptClassFile(new ClassFileConsumerDataImpl(data, descriptor, handler));
-  }
+  void accept(ByteDataView data, String descriptor, DiagnosticsHandler handler);
 
   /** Empty consumer to request the production of the resource but ignore its value. */
   static ClassFileConsumer emptyConsumer() {
     return ForwardingConsumer.EMPTY_CONSUMER;
   }
 
+  /** Forwarding consumer to delegate to an optional existing consumer. */
   @Keep
-  @Deprecated
   class ForwardingConsumer implements ClassFileConsumer {
 
     private static final ClassFileConsumer EMPTY_CONSUMER = new ForwardingConsumer(null);
@@ -75,9 +68,9 @@
     }
 
     @Override
-    public void acceptClassFile(ClassFileConsumerData data) {
+    public void accept(ByteDataView data, String descriptor, DiagnosticsHandler handler) {
       if (consumer != null) {
-        consumer.acceptClassFile(data);
+        consumer.accept(data, descriptor, handler);
       }
     }
 
@@ -124,12 +117,9 @@
     }
 
     @Override
-    public void acceptClassFile(ClassFileConsumerData data) {
-      super.acceptClassFile(data);
-      outputBuilder.addFile(
-          DescriptorUtils.getClassFileName(data.getClassDescriptor()),
-          data.getByteDataView(),
-          data.getDiagnosticsHandler());
+    public void accept(ByteDataView data, String descriptor, DiagnosticsHandler handler) {
+      super.accept(data, descriptor, handler);
+      outputBuilder.addFile(DescriptorUtils.getClassFileName(descriptor), data, handler);
     }
 
     @Override
@@ -204,12 +194,9 @@
     }
 
     @Override
-    public void acceptClassFile(ClassFileConsumerData data) {
-      super.acceptClassFile(data);
-      outputBuilder.addFile(
-          DescriptorUtils.getClassFileName(data.getClassDescriptor()),
-          data.getByteDataView(),
-          data.getDiagnosticsHandler());
+    public void accept(ByteDataView data, String descriptor, DiagnosticsHandler handler) {
+      super.accept(data, descriptor, handler);
+      outputBuilder.addFile(DescriptorUtils.getClassFileName(descriptor), data, handler);
     }
 
     @Override
diff --git a/src/main/java/com/android/tools/r8/ClassFileConsumerData.java b/src/main/java/com/android/tools/r8/ClassFileConsumerData.java
deleted file mode 100644
index eeef801..0000000
--- a/src/main/java/com/android/tools/r8/ClassFileConsumerData.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2023, 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;
-
-/** Data provided in the primary callback of {@link ClassFileConsumer}. */
-@Keep
-public interface ClassFileConsumerData {
-
-  /**
-   * View of the Java class-file encoded data.
-   *
-   * <p>The obtained {@link ByteDataView} object can only be assumed valid during the duration of
-   * the accept method. If the bytes are needed beyond that, a copy must be made elsewhere.
-   */
-  ByteDataView getByteDataView();
-
-  /** Copy of the bytes for the Java class-file encoded data. */
-  byte[] getByteDataCopy();
-
-  /** Class descriptor of the class the data pertains to. */
-  String getClassDescriptor();
-
-  /** Diagnostics handler for reporting. */
-  DiagnosticsHandler getDiagnosticsHandler();
-}
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index 85a0fbf..c57bc22 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -53,6 +53,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 
@@ -440,14 +441,12 @@
     private final List<ProgramResource> resources = new ArrayList<>();
 
     @Override
-    public synchronized void acceptDexIndexedFile(DexIndexedConsumerData data) {
+    public synchronized void accept(
+        int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {
       // TODO(b/154106502): Map Origin information.
       resources.add(
           ProgramResource.fromBytes(
-              Origin.unknown(),
-              ProgramResource.Kind.DEX,
-              data.getByteDataCopy(),
-              data.getClassDescriptors()));
+              Origin.unknown(), ProgramResource.Kind.DEX, data.copyByteData(), descriptors));
     }
 
     @Override
diff --git a/src/main/java/com/android/tools/r8/DexFilePerClassFileConsumer.java b/src/main/java/com/android/tools/r8/DexFilePerClassFileConsumer.java
index 68e6f12..1675cb2 100644
--- a/src/main/java/com/android/tools/r8/DexFilePerClassFileConsumer.java
+++ b/src/main/java/com/android/tools/r8/DexFilePerClassFileConsumer.java
@@ -34,7 +34,7 @@
 @KeepForSubclassing
 public interface DexFilePerClassFileConsumer extends ProgramConsumer, ByteBufferProvider {
 
-  boolean SHOULD_COMBINE_SYNTHETIC_CLASSES = true;
+  static final boolean SHOULD_COMBINE_SYNTHETIC_CLASSES = true;
 
   /**
    * Callback to receive DEX data for a single Java class-file input and its companion classes.
@@ -42,30 +42,24 @@
    * <p>There is no guaranteed order and files might be written concurrently.
    *
    * <p>The consumer is expected not to throw, but instead report any errors via the diagnostics
-   * {@link DiagnosticsHandler} in the callback data. If an error is reported via handler and no
-   * exceptions are thrown, then the compiler guaranties to exit with an error.
+   * {@param handler}. If an error is reported via {@param handler} and no exceptions are thrown,
+   * then the compiler guaranties to exit with an error.
    *
-   * <p>The {@link ByteDataView} obtained from the {@param data} object can only be assumed valid
-   * during the duration of the accept. If the bytes are needed beyond that, a copy must be made
-   * elsewhere.
+   * <p>The {@link ByteDataView} {@param data} object can only be assumed valid during the duration
+   * of the accept. If the bytes are needed beyond that, a copy must be made elsewhere.
+   *
+   * @param primaryClassDescriptor Class descriptor of the class from the input class-file.
+   * @param data DEX encoded data in a ByteDataView wrapper.
+   * @param descriptors Class descriptors for all classes defined in the DEX data.
+   * @param handler Diagnostics handler for reporting.
    */
-  default void acceptDexFile(DexFilePerClassFileConsumerData data) {
-    accept(
-        data.getPrimaryClassDescriptor(),
-        data.getByteDataView(),
-        data.getClassDescriptors(),
-        data.getDiagnosticsHandler());
-  }
-
-  // Any new implementation should not use or call the deprecated accept method.
-  @Deprecated
   default void accept(
       String primaryClassDescriptor,
       ByteDataView data,
       Set<String> descriptors,
       DiagnosticsHandler handler) {
-    // To avoid breaking binary compatibility, old consumers not implementing the new API will be
-    // forwarded to. New consumers must implement the accept method on the data object.
+    // To avoid breaking binary compatiblity, old consumers not implementing the new API will be
+    // forwarded to. New consumers must implement the accept on ByteDataView.
     accept(primaryClassDescriptor, data.copyByteData(), descriptors, handler);
   }
 
@@ -98,8 +92,8 @@
     return ForwardingConsumer.EMPTY_CONSUMER;
   }
 
+  /** Forwarding consumer to delegate to an optional existing consumer. */
   @Keep
-  @Deprecated
   class ForwardingConsumer implements DexFilePerClassFileConsumer {
 
     private static final DexFilePerClassFileConsumer EMPTY_CONSUMER = new ForwardingConsumer(null);
@@ -116,9 +110,13 @@
     }
 
     @Override
-    public void acceptDexFile(DexFilePerClassFileConsumerData data) {
+    public void accept(
+        String primaryClassDescriptor,
+        ByteDataView data,
+        Set<String> descriptors,
+        DiagnosticsHandler handler) {
       if (consumer != null) {
-        consumer.acceptDexFile(data);
+        consumer.accept(primaryClassDescriptor, data, descriptors, handler);
       }
     }
 
@@ -180,12 +178,13 @@
     }
 
     @Override
-    public void acceptDexFile(DexFilePerClassFileConsumerData data) {
-      super.acceptDexFile(data);
-      outputBuilder.addFile(
-          getDexFileName(data.getPrimaryClassDescriptor()),
-          data.getByteDataView(),
-          data.getDiagnosticsHandler());
+    public void accept(
+        String primaryClassDescriptor,
+        ByteDataView data,
+        Set<String> descriptors,
+        DiagnosticsHandler handler) {
+      super.accept(primaryClassDescriptor, data, descriptors, handler);
+      outputBuilder.addFile(getDexFileName(primaryClassDescriptor), data, handler);
     }
 
     @Override
@@ -263,12 +262,13 @@
     }
 
     @Override
-    public void acceptDexFile(DexFilePerClassFileConsumerData data) {
-      super.acceptDexFile(data);
-      outputBuilder.addFile(
-          getDexFileName(data.getPrimaryClassDescriptor()),
-          data.getByteDataView(),
-          data.getDiagnosticsHandler());
+    public void accept(
+        String primaryClassDescriptor,
+        ByteDataView data,
+        Set<String> descriptors,
+        DiagnosticsHandler handler) {
+      super.accept(primaryClassDescriptor, data, descriptors, handler);
+      outputBuilder.addFile(getDexFileName(primaryClassDescriptor), data, handler);
     }
 
     @Override
diff --git a/src/main/java/com/android/tools/r8/DexFilePerClassFileConsumerData.java b/src/main/java/com/android/tools/r8/DexFilePerClassFileConsumerData.java
index fba6b8d..e69de29 100644
--- a/src/main/java/com/android/tools/r8/DexFilePerClassFileConsumerData.java
+++ b/src/main/java/com/android/tools/r8/DexFilePerClassFileConsumerData.java
@@ -1,35 +0,0 @@
-// Copyright (c) 2023, 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;
-
-import java.util.Set;
-
-/** Data provided in the primary callback of {@link DexFilePerClassFileConsumer}. */
-@Keep
-public interface DexFilePerClassFileConsumerData {
-
-  /** Class descriptor of the class from the input class-file. */
-  String getPrimaryClassDescriptor();
-
-  /** DEX encoded data in a ByteDataView wrapper. */
-  ByteDataView getByteDataView();
-
-  /** Copy of the bytes for the DEX encoded data. */
-  byte[] getByteDataCopy();
-
-  /** Class descriptors for all classes defined in the DEX data. */
-  Set<String> getClassDescriptors();
-
-  /** Diagnostics handler for reporting. */
-  DiagnosticsHandler getDiagnosticsHandler();
-
-  /**
-   * Class descriptor of the primary-class's synthetic context.
-   *
-   * <p>If primary class is a compiler-synthesized class (i.e. it is an input that was synthesized
-   * by a prior D8 intermediate compilation) then the value is the descriptor of the class that
-   * caused the primary class to be synthesized. The value is null in all other cases.
-   */
-  String getSynthesizingContextForPrimaryClass();
-}
diff --git a/src/main/java/com/android/tools/r8/DexIndexedConsumer.java b/src/main/java/com/android/tools/r8/DexIndexedConsumer.java
index cbccf59..39f5b2e 100644
--- a/src/main/java/com/android/tools/r8/DexIndexedConsumer.java
+++ b/src/main/java/com/android/tools/r8/DexIndexedConsumer.java
@@ -46,22 +46,17 @@
    * <p>There is no guaranteed order and files might be written concurrently.
    *
    * <p>The consumer is expected not to throw, but instead report any errors via the diagnostics
-   * {@link DiagnosticsHandler} in the callback data. If an error is reported via handler and no
-   * exceptions are thrown, then the compiler guaranties to exit with an error.
+   * {@param handler}. If an error is reported via {@param handler} and no exceptions are thrown,
+   * then the compiler guaranties to exit with an error.
    *
-   * <p>The {@link ByteDataView} obtained from the {@param data} object can only be assumed valid
-   * during the duration of the accept. If the bytes are needed beyond that, a copy must be made
-   * elsewhere.
+   * <p>The {@link ByteDataView} {@param data} object can only be assumed valid during the duration
+   * of the accept. If the bytes are needed beyond that, a copy must be made elsewhere.
+   *
+   * @param fileIndex Index of the DEX file for multi-dexing. Files are zero-indexed.
+   * @param data DEX encoded data in a ByteDataView wrapper.
+   * @param descriptors Class descriptors for all classes defined in the DEX data.
+   * @param handler Diagnostics handler for reporting.
    */
-  default void acceptDexIndexedFile(DexIndexedConsumerData data) {
-    accept(
-        data.getFileIndex(),
-        data.getByteDataView(),
-        data.getClassDescriptors(),
-        data.getDiagnosticsHandler());
-  }
-
-  @Deprecated
   default void accept(
       int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {
     // To avoid breaking binary compatiblity, old consumers not implementing the new API will be
@@ -82,8 +77,8 @@
     return ForwardingConsumer.EMPTY_CONSUMER;
   }
 
+  /** Forwarding consumer to delegate to an optional existing consumer. */
   @Keep
-  @Deprecated
   class ForwardingConsumer implements DexIndexedConsumer {
 
     private static final DexIndexedConsumer EMPTY_CONSUMER = new ForwardingConsumer(null);
@@ -100,9 +95,10 @@
     }
 
     @Override
-    public void acceptDexIndexedFile(DexIndexedConsumerData data) {
+    public void accept(
+        int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {
       if (consumer != null) {
-        consumer.acceptDexIndexedFile(data);
+        consumer.accept(fileIndex, data, descriptors, handler);
       }
     }
 
@@ -154,13 +150,11 @@
     }
 
     @Override
-    public void acceptDexIndexedFile(DexIndexedConsumerData data) {
-      super.acceptDexIndexedFile(data);
+    public void accept(
+        int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {
+      super.accept(fileIndex, data, descriptors, handler);
       outputBuilder.addIndexedClassFile(
-          data.getFileIndex(),
-          DexUtils.getDefaultDexFileName(data.getFileIndex()),
-          data.getByteDataView(),
-          data.getDiagnosticsHandler());
+          fileIndex, DexUtils.getDefaultDexFileName(fileIndex), data, handler);
     }
 
     @Override
@@ -251,17 +245,15 @@
     }
 
     @Override
-    public void acceptDexIndexedFile(DexIndexedConsumerData data) {
-      super.acceptDexIndexedFile(data);
+    public void accept(
+        int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {
+      super.accept(fileIndex, data, descriptors, handler);
       try {
         prepareDirectory();
       } catch (IOException e) {
-        data.getDiagnosticsHandler().error(new ExceptionDiagnostic(e, new PathOrigin(directory)));
+        handler.error(new ExceptionDiagnostic(e, new PathOrigin(directory)));
       }
-      outputBuilder.addFile(
-          DexUtils.getDefaultDexFileName(data.getFileIndex()),
-          data.getByteDataView(),
-          data.getDiagnosticsHandler());
+      outputBuilder.addFile(DexUtils.getDefaultDexFileName(fileIndex), data, handler);
     }
 
     @Override
diff --git a/src/main/java/com/android/tools/r8/DexIndexedConsumerData.java b/src/main/java/com/android/tools/r8/DexIndexedConsumerData.java
deleted file mode 100644
index 1c46f8c..0000000
--- a/src/main/java/com/android/tools/r8/DexIndexedConsumerData.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2023, 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;
-
-import java.util.Set;
-
-/** Data provided in the primary callback of {@link DexIndexedConsumer}. */
-@Keep
-public interface DexIndexedConsumerData {
-
-  /** Index of the DEX file for multi-dexing (Files are zero-indexed). */
-  int getFileIndex();
-
-  /** DEX encoded data in a ByteDataView wrapper. */
-  ByteDataView getByteDataView();
-
-  /** Copy of the bytes for the DEX encoded data. */
-  byte[] getByteDataCopy();
-
-  /** Class descriptors for all classes defined in the DEX data. */
-  Set<String> getClassDescriptors();
-
-  /** Diagnostics handler for reporting. */
-  DiagnosticsHandler getDiagnosticsHandler();
-}
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
index d0daf58..99cb304 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -58,8 +58,6 @@
 import com.android.tools.r8.utils.ArrayUtils;
 import com.android.tools.r8.utils.Box;
 import com.android.tools.r8.utils.DescriptorUtils;
-import com.android.tools.r8.utils.DexFilePerClassFileConsumerDataImpl;
-import com.android.tools.r8.utils.DexIndexedConsumerDataImpl;
 import com.android.tools.r8.utils.ExceptionUtils;
 import com.android.tools.r8.utils.IntBox;
 import com.android.tools.r8.utils.InternalGlobalSyntheticsProgramConsumer;
@@ -588,14 +586,13 @@
     ProgramConsumer consumer;
     ByteBufferProvider byteBufferProvider;
 
-    String primaryClassDescriptor = virtualFile.getPrimaryClassDescriptor();
     if (globalSyntheticFiles != null && globalSyntheticFiles.contains(virtualFile)) {
       consumer = globalsSyntheticsConsumer;
       byteBufferProvider = globalsSyntheticsConsumer;
     } else if (programConsumer != null) {
       consumer = programConsumer;
       byteBufferProvider = programConsumer;
-    } else if (primaryClassDescriptor != null) {
+    } else if (virtualFile.getPrimaryClassDescriptor() != null) {
       consumer = options.getDexFilePerClassFileConsumer();
       byteBufferProvider = options.getDexFilePerClassFileConsumer();
     } else {
@@ -623,18 +620,14 @@
     timing.begin("Pass bytes to consumer");
     if (consumer instanceof DexFilePerClassFileConsumer) {
       ((DexFilePerClassFileConsumer) consumer)
-          .acceptDexFile(
-              new DexFilePerClassFileConsumerDataImpl(
-                  primaryClassDescriptor,
-                  virtualFile.getPrimaryClassSynthesizingContextDescriptor(),
-                  data,
-                  virtualFile.getClassDescriptors(),
-                  options.reporter));
+          .accept(
+              virtualFile.getPrimaryClassDescriptor(),
+              data,
+              virtualFile.getClassDescriptors(),
+              options.reporter);
     } else {
       ((DexIndexedConsumer) consumer)
-          .acceptDexIndexedFile(
-              new DexIndexedConsumerDataImpl(
-                  virtualFile.getId(), data, virtualFile.getClassDescriptors(), options.reporter));
+          .accept(virtualFile.getId(), data, virtualFile.getClassDescriptors(), options.reporter);
     }
     timing.end();
     // Release use of the backing buffer now that accept has returned.
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriterExperimental.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriterExperimental.java
index cdb74b5..0a81bd2 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriterExperimental.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriterExperimental.java
@@ -18,7 +18,6 @@
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.ObjectToOffsetMapping;
 import com.android.tools.r8.utils.BitUtils;
-import com.android.tools.r8.utils.DexIndexedConsumerDataImpl;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.ListUtils;
 import com.android.tools.r8.utils.ThreadUtils;
@@ -173,9 +172,7 @@
     if (consumer instanceof DexFilePerClassFileConsumer) {
       assert false;
     } else {
-      ((DexIndexedConsumer) consumer)
-          .acceptDexIndexedFile(
-              new DexIndexedConsumerDataImpl(0, data, Sets.newIdentityHashSet(), options.reporter));
+      ((DexIndexedConsumer) consumer).accept(0, data, Sets.newIdentityHashSet(), options.reporter);
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
index 49f2fbb..cc88ca9 100644
--- a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
@@ -47,7 +47,6 @@
 import com.android.tools.r8.synthesis.SyntheticNaming;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.AsmUtils;
-import com.android.tools.r8.utils.ClassFileConsumerDataImpl;
 import com.android.tools.r8.utils.ComparatorUtils;
 import com.android.tools.r8.utils.ExceptionUtils;
 import com.android.tools.r8.utils.InternalGlobalSyntheticsProgramConsumer.InternalGlobalSyntheticsCfConsumer;
@@ -335,10 +334,7 @@
       verifyCf(result);
     }
     ExceptionUtils.withConsumeResourceHandler(
-        options.reporter,
-        handler ->
-            consumer.acceptClassFile(
-                new ClassFileConsumerDataImpl(ByteDataView.of(result), desc, handler)));
+        options.reporter, handler -> consumer.accept(ByteDataView.of(result), desc, handler));
   }
 
   private int compareTypesThroughLens(DexType a, DexType b) {
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidAppConsumers.java b/src/main/java/com/android/tools/r8/utils/AndroidAppConsumers.java
index 1c01a7b..7a77e25 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidAppConsumers.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidAppConsumers.java
@@ -4,16 +4,14 @@
 package com.android.tools.r8.utils;
 
 import com.android.tools.r8.BaseCompilerCommand;
+import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.ClassFileConsumer;
-import com.android.tools.r8.ClassFileConsumerData;
 import com.android.tools.r8.DataDirectoryResource;
 import com.android.tools.r8.DataEntryResource;
 import com.android.tools.r8.DataResourceConsumer;
 import com.android.tools.r8.DexFilePerClassFileConsumer;
-import com.android.tools.r8.DexFilePerClassFileConsumerData;
 import com.android.tools.r8.DexIndexedConsumer;
 import com.android.tools.r8.DexIndexedConsumer.ForwardingConsumer;
-import com.android.tools.r8.DexIndexedConsumerData;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.ProgramConsumer;
 import com.android.tools.r8.ResourceException;
@@ -105,9 +103,13 @@
               new Int2ReferenceAVLTreeMap<>();
 
           @Override
-          public void acceptDexIndexedFile(DexIndexedConsumerData data) {
-            super.acceptDexIndexedFile(data);
-            addDexFile(data.getFileIndex(), data.getByteDataCopy(), data.getClassDescriptors());
+          public void accept(
+              int fileIndex,
+              ByteDataView data,
+              Set<String> descriptors,
+              DiagnosticsHandler handler) {
+            super.accept(fileIndex, data, descriptors, handler);
+            addDexFile(fileIndex, data.copyByteData(), descriptors);
           }
 
           @Override
@@ -180,12 +182,13 @@
           private TreeMap<String, DescriptorsWithContents> files = new TreeMap<>();
 
           @Override
-          public void acceptDexFile(DexFilePerClassFileConsumerData data) {
-            super.acceptDexFile(data);
-            addDexFile(
-                data.getPrimaryClassDescriptor(),
-                data.getByteDataCopy(),
-                data.getClassDescriptors());
+          public void accept(
+              String primaryClassDescriptor,
+              ByteDataView data,
+              Set<String> descriptors,
+              DiagnosticsHandler handler) {
+            super.accept(primaryClassDescriptor, data, descriptors, handler);
+            addDexFile(primaryClassDescriptor, data.copyByteData(), descriptors);
           }
 
           synchronized void addDexFile(
@@ -255,9 +258,9 @@
           private List<DescriptorsWithContents> files = new ArrayList<>();
 
           @Override
-          public void acceptClassFile(ClassFileConsumerData data) {
-            super.acceptClassFile(data);
-            addClassFile(data.getByteDataCopy(), data.getClassDescriptor());
+          public void accept(ByteDataView data, String descriptor, DiagnosticsHandler handler) {
+            super.accept(data, descriptor, handler);
+            addClassFile(data.copyByteData(), descriptor);
           }
 
           synchronized void addClassFile(byte[] data, String descriptor) {
diff --git a/src/main/java/com/android/tools/r8/utils/ClassFileConsumerDataImpl.java b/src/main/java/com/android/tools/r8/utils/ClassFileConsumerDataImpl.java
deleted file mode 100644
index b375086..0000000
--- a/src/main/java/com/android/tools/r8/utils/ClassFileConsumerDataImpl.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2023, 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.utils;
-
-import com.android.tools.r8.ByteDataView;
-import com.android.tools.r8.ClassFileConsumerData;
-import com.android.tools.r8.DiagnosticsHandler;
-
-/** Internal implementation of the consumer data. */
-public class ClassFileConsumerDataImpl implements ClassFileConsumerData {
-
-  private final ByteDataView data;
-  private final String descriptor;
-  private final DiagnosticsHandler handler;
-
-  public ClassFileConsumerDataImpl(
-      ByteDataView data, String descriptor, DiagnosticsHandler handler) {
-    this.data = data;
-    this.descriptor = descriptor;
-    this.handler = handler;
-  }
-
-  @Override
-  public ByteDataView getByteDataView() {
-    return data;
-  }
-
-  @Override
-  public byte[] getByteDataCopy() {
-    return data.copyByteData();
-  }
-
-  @Override
-  public String getClassDescriptor() {
-    return descriptor;
-  }
-
-  @Override
-  public DiagnosticsHandler getDiagnosticsHandler() {
-    return handler;
-  }
-}
diff --git a/src/main/java/com/android/tools/r8/utils/DexFilePerClassFileConsumerDataImpl.java b/src/main/java/com/android/tools/r8/utils/DexFilePerClassFileConsumerDataImpl.java
index 9dc9e8b..e69de29 100644
--- a/src/main/java/com/android/tools/r8/utils/DexFilePerClassFileConsumerDataImpl.java
+++ b/src/main/java/com/android/tools/r8/utils/DexFilePerClassFileConsumerDataImpl.java
@@ -1,61 +0,0 @@
-// Copyright (c) 2023, 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.utils;
-
-import com.android.tools.r8.ByteDataView;
-import com.android.tools.r8.DexFilePerClassFileConsumerData;
-import com.android.tools.r8.DiagnosticsHandler;
-import java.util.Set;
-
-public class DexFilePerClassFileConsumerDataImpl implements DexFilePerClassFileConsumerData {
-
-  private final String primaryClassDescriptor;
-  private final String synthesizingContextDescriptor;
-  private final ByteDataView data;
-  private final Set<String> classDescriptors;
-  private final DiagnosticsHandler handler;
-
-  public DexFilePerClassFileConsumerDataImpl(
-      String primaryClassDescriptor,
-      String synthesizingContextDescriptor,
-      ByteDataView data,
-      Set<String> classDescriptors,
-      DiagnosticsHandler handler) {
-    this.primaryClassDescriptor = primaryClassDescriptor;
-    this.synthesizingContextDescriptor = synthesizingContextDescriptor;
-    this.data = data;
-    this.classDescriptors = classDescriptors;
-    this.handler = handler;
-  }
-
-  @Override
-  public String getPrimaryClassDescriptor() {
-    return primaryClassDescriptor;
-  }
-
-  @Override
-  public String getSynthesizingContextForPrimaryClass() {
-    return synthesizingContextDescriptor;
-  }
-
-  @Override
-  public ByteDataView getByteDataView() {
-    return data;
-  }
-
-  @Override
-  public byte[] getByteDataCopy() {
-    return data.copyByteData();
-  }
-
-  @Override
-  public Set<String> getClassDescriptors() {
-    return classDescriptors;
-  }
-
-  @Override
-  public DiagnosticsHandler getDiagnosticsHandler() {
-    return handler;
-  }
-}
diff --git a/src/main/java/com/android/tools/r8/utils/DexIndexedConsumerDataImpl.java b/src/main/java/com/android/tools/r8/utils/DexIndexedConsumerDataImpl.java
deleted file mode 100644
index 2de21e4..0000000
--- a/src/main/java/com/android/tools/r8/utils/DexIndexedConsumerDataImpl.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) 2023, 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.utils;
-
-import com.android.tools.r8.ByteDataView;
-import com.android.tools.r8.DexIndexedConsumerData;
-import com.android.tools.r8.DiagnosticsHandler;
-import java.util.Set;
-
-public class DexIndexedConsumerDataImpl implements DexIndexedConsumerData {
-
-  private final int fileIndex;
-  private final ByteDataView data;
-  private final Set<String> classDescriptors;
-  private final DiagnosticsHandler handler;
-
-  public DexIndexedConsumerDataImpl(
-      int fileIndex, ByteDataView data, Set<String> classDescriptors, DiagnosticsHandler handler) {
-    this.fileIndex = fileIndex;
-    this.data = data;
-    this.classDescriptors = classDescriptors;
-    this.handler = handler;
-  }
-
-  @Override
-  public int getFileIndex() {
-    return fileIndex;
-  }
-
-  @Override
-  public ByteDataView getByteDataView() {
-    return data;
-  }
-
-  @Override
-  public byte[] getByteDataCopy() {
-    return data.copyByteData();
-  }
-
-  @Override
-  public Set<String> getClassDescriptors() {
-    return classDescriptors;
-  }
-
-  @Override
-  public DiagnosticsHandler getDiagnosticsHandler() {
-    return handler;
-  }
-}
diff --git a/src/main/java/com/android/tools/r8/utils/InternalGlobalSyntheticsProgramConsumer.java b/src/main/java/com/android/tools/r8/utils/InternalGlobalSyntheticsProgramConsumer.java
index 6fcc519..1428459 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalGlobalSyntheticsProgramConsumer.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalGlobalSyntheticsProgramConsumer.java
@@ -9,7 +9,6 @@
 import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.ClassFileConsumer;
 import com.android.tools.r8.DexFilePerClassFileConsumer;
-import com.android.tools.r8.DexFilePerClassFileConsumerData;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.GlobalSyntheticsConsumer;
 import com.android.tools.r8.ProgramConsumer;
@@ -103,8 +102,12 @@
     }
 
     @Override
-    public synchronized void acceptDexFile(DexFilePerClassFileConsumerData data) {
-      builder.addGlobalSynthetic(data.getPrimaryClassDescriptor(), data.getByteDataCopy());
+    public synchronized void accept(
+        String primaryClassDescriptor,
+        ByteDataView data,
+        Set<String> descriptors,
+        DiagnosticsHandler handler) {
+      builder.addGlobalSynthetic(primaryClassDescriptor, data.copyByteData());
     }
 
     @Override
@@ -146,8 +149,12 @@
     }
 
     @Override
-    public void acceptDexFile(DexFilePerClassFileConsumerData data) {
-      addGlobal(data.getPrimaryClassDescriptor(), data.getByteDataView());
+    public void accept(
+        String primaryClassDescriptor,
+        ByteDataView data,
+        Set<String> descriptors,
+        DiagnosticsHandler handler) {
+      addGlobal(primaryClassDescriptor, data);
     }
 
     @Override
diff --git a/src/test/java/com/android/tools/r8/D8CommandTest.java b/src/test/java/com/android/tools/r8/D8CommandTest.java
index ff10302..11cebfd 100644
--- a/src/test/java/com/android/tools/r8/D8CommandTest.java
+++ b/src/test/java/com/android/tools/r8/D8CommandTest.java
@@ -44,6 +44,7 @@
 import java.nio.file.Paths;
 import java.util.Collection;
 import java.util.List;
+import java.util.Set;
 import java.util.function.Predicate;
 import java.util.zip.ZipFile;
 import org.junit.Test;
@@ -465,10 +466,15 @@
     class MultiTypeConsumer implements DexIndexedConsumer, DexFilePerClassFileConsumer {
 
       @Override
-      public void acceptDexFile(DexFilePerClassFileConsumerData data) {}
+      public void accept(
+          String primaryClassDescriptor,
+          ByteDataView data,
+          Set<String> descriptors,
+          DiagnosticsHandler handler) {}
 
       @Override
-      public void acceptDexIndexedFile(DexIndexedConsumerData data) {}
+      public void accept(
+          int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {}
 
       @Override
       public void finished(DiagnosticsHandler handler) {
diff --git a/src/test/java/com/android/tools/r8/ExtractMarkerTest.java b/src/test/java/com/android/tools/r8/ExtractMarkerTest.java
index e8a4d1d..6ed73d8 100644
--- a/src/test/java/com/android/tools/r8/ExtractMarkerTest.java
+++ b/src/test/java/com/android/tools/r8/ExtractMarkerTest.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.utils.BooleanUtils;
 import java.nio.file.Paths;
 import java.util.Collection;
+import java.util.Set;
 import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -59,11 +60,15 @@
             .setProgramConsumer(
                 new DexIndexedConsumer.ForwardingConsumer(null) {
                   @Override
-                  public void acceptDexIndexedFile(DexIndexedConsumerData data) {
+                  public void accept(
+                      int fileIndex,
+                      ByteDataView data,
+                      Set<String> descriptors,
+                      DiagnosticsHandler handler) {
                     Marker marker;
                     try {
                       Collection<Marker> markers =
-                          ExtractMarker.extractMarkerFromDexProgramData(data.getByteDataCopy());
+                          ExtractMarker.extractMarkerFromDexProgramData(data.copyByteData());
                       assertEquals(1, markers.size());
                       marker = markers.iterator().next();
                     } catch (Exception e) {
@@ -99,11 +104,12 @@
             .setProgramConsumer(
                 new ClassFileConsumer.ForwardingConsumer(null) {
                   @Override
-                  public void acceptClassFile(ClassFileConsumerData data) {
+                  public void accept(
+                      ByteDataView data, String descriptor, DiagnosticsHandler handler) {
                     Marker marker;
                     try {
                       Collection<Marker> markers =
-                          ExtractMarker.extractMarkerFromClassProgramData(data.getByteDataCopy());
+                          ExtractMarker.extractMarkerFromClassProgramData(data.copyByteData());
                       assertEquals(1, markers.size());
                       marker = markers.iterator().next();
                     } catch (Exception e) {
diff --git a/src/test/java/com/android/tools/r8/ProguardMapMarkerTest.java b/src/test/java/com/android/tools/r8/ProguardMapMarkerTest.java
index 5be0095..f0b68de 100644
--- a/src/test/java/com/android/tools/r8/ProguardMapMarkerTest.java
+++ b/src/test/java/com/android/tools/r8/ProguardMapMarkerTest.java
@@ -63,11 +63,15 @@
             .setProgramConsumer(
                 new DexIndexedConsumer.ForwardingConsumer(null) {
                   @Override
-                  public void acceptDexIndexedFile(DexIndexedConsumerData data) {
+                  public void accept(
+                      int fileIndex,
+                      ByteDataView data,
+                      Set<String> descriptors,
+                      DiagnosticsHandler handler) {
                     Marker marker;
                     try {
                       Collection<Marker> markers =
-                          ExtractMarker.extractMarkerFromDexProgramData(data.getByteDataCopy());
+                          ExtractMarker.extractMarkerFromDexProgramData(data.copyByteData());
                       assertEquals(1, markers.size());
                       marker = markers.iterator().next();
                     } catch (Exception e) {
@@ -107,11 +111,12 @@
             .setProgramConsumer(
                 new ClassFileConsumer.ForwardingConsumer(null) {
                   @Override
-                  public void acceptClassFile(ClassFileConsumerData data) {
+                  public void accept(
+                      ByteDataView data, String descriptor, DiagnosticsHandler handler) {
                     Marker marker;
                     try {
                       Collection<Marker> markers =
-                          ExtractMarker.extractMarkerFromClassProgramData(data.getByteDataCopy());
+                          ExtractMarker.extractMarkerFromClassProgramData(data.copyByteData());
                       assertEquals(1, markers.size());
                       marker = markers.iterator().next();
                     } catch (Exception e) {
diff --git a/src/test/java/com/android/tools/r8/R8ModeMarkerTest.java b/src/test/java/com/android/tools/r8/R8ModeMarkerTest.java
index d4ab329..32f0871 100644
--- a/src/test/java/com/android/tools/r8/R8ModeMarkerTest.java
+++ b/src/test/java/com/android/tools/r8/R8ModeMarkerTest.java
@@ -8,6 +8,7 @@
 
 import com.android.tools.r8.dex.Marker;
 import java.util.Collection;
+import java.util.Set;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -39,10 +40,11 @@
     }
 
     @Override
-    public void acceptDexIndexedFile(DexIndexedConsumerData data) {
+    public void accept(
+        int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {
       try {
         Collection<Marker> markers =
-            ExtractMarker.extractMarkerFromDexProgramData(data.getByteDataCopy());
+            ExtractMarker.extractMarkerFromDexProgramData(data.copyByteData());
         assertEquals(1, markers.size());
         marker = markers.iterator().next();
       } catch (Exception e) {
@@ -65,10 +67,10 @@
     }
 
     @Override
-    public void acceptClassFile(ClassFileConsumerData data) {
+    public void accept(ByteDataView data, String descriptors, DiagnosticsHandler handler) {
       try {
         Collection<Marker> markers =
-            ExtractMarker.extractMarkerFromClassProgramData(data.getByteDataCopy());
+            ExtractMarker.extractMarkerFromClassProgramData(data.copyByteData());
         assertEquals(1, markers.size());
         marker = markers.iterator().next();
       } catch (Exception e) {
diff --git a/src/test/java/com/android/tools/r8/compilerapi/dexconsumers/PerClassSyntheticContextsTest.java b/src/test/java/com/android/tools/r8/compilerapi/dexconsumers/PerClassSyntheticContextsTest.java
index 69f7b9b..7172b17 100644
--- a/src/test/java/com/android/tools/r8/compilerapi/dexconsumers/PerClassSyntheticContextsTest.java
+++ b/src/test/java/com/android/tools/r8/compilerapi/dexconsumers/PerClassSyntheticContextsTest.java
@@ -3,14 +3,13 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.compilerapi.dexconsumers;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 
+import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.ClassFileConsumer;
-import com.android.tools.r8.ClassFileConsumerData;
 import com.android.tools.r8.D8;
 import com.android.tools.r8.D8Command;
 import com.android.tools.r8.DexFilePerClassFileConsumer;
-import com.android.tools.r8.DexFilePerClassFileConsumerData;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.compilerapi.CompilerApiTest;
@@ -20,6 +19,7 @@
 import com.android.tools.r8.synthesis.SyntheticItemsTestUtils;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 import java.util.function.Consumer;
 import org.junit.Test;
 
@@ -47,8 +47,8 @@
             new ClassFileConsumer() {
 
               @Override
-              public void acceptClassFile(ClassFileConsumerData data) {
-                outputs.put(data.getClassDescriptor(), data.getByteDataCopy());
+              public void accept(ByteDataView data, String descriptor, DiagnosticsHandler handler) {
+                outputs.put(descriptor, data.copyByteData());
               }
 
               @Override
@@ -60,7 +60,10 @@
     new ApiTest(ApiTest.PARAMETERS)
         .run(
             outputs.get(backport.getDescriptor()),
-            context -> assertEquals(descriptor(UsesBackport.class), context));
+            context -> {
+              // TODO(b/241351268): This should be the UsesBackport class as context.
+              assertNull(context);
+            });
   }
 
   public static class UsesBackport {
@@ -83,9 +86,15 @@
               .setMinApiLevel(1)
               .setProgramConsumer(
                   new DexFilePerClassFileConsumer() {
+
                     @Override
-                    public void acceptDexFile(DexFilePerClassFileConsumerData data) {
-                      syntheticContext.accept(data.getSynthesizingContextForPrimaryClass());
+                    public void accept(
+                        String primaryClassDescriptor,
+                        ByteDataView data,
+                        Set<String> descriptors,
+                        DiagnosticsHandler handler) {
+                      // TODO(b/241351268): Inform the caller of the context once possible.
+                      syntheticContext.accept(null);
                     }
 
                     @Override
diff --git a/src/test/java/com/android/tools/r8/d8/DexVersionTests.java b/src/test/java/com/android/tools/r8/d8/DexVersionTests.java
index 7c82964..f413f98 100644
--- a/src/test/java/com/android/tools/r8/d8/DexVersionTests.java
+++ b/src/test/java/com/android/tools/r8/d8/DexVersionTests.java
@@ -5,17 +5,18 @@
 
 import static org.junit.Assert.assertTrue;
 
+import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.D8;
 import com.android.tools.r8.D8Command;
 import com.android.tools.r8.DexIndexedConsumer;
-import com.android.tools.r8.DexIndexedConsumerData;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.OutputMode;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Set;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -76,7 +77,8 @@
     boolean hasOutput = false;
 
     @Override
-    public void acceptDexIndexedFile(DexIndexedConsumerData data) {
+    public void accept(
+        int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {
       hasOutput = true;
     }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/DesugarToClassFileDeprecatedAttribute.java b/src/test/java/com/android/tools/r8/desugar/DesugarToClassFileDeprecatedAttribute.java
index 2bc0090..efcc639 100644
--- a/src/test/java/com/android/tools/r8/desugar/DesugarToClassFileDeprecatedAttribute.java
+++ b/src/test/java/com/android/tools/r8/desugar/DesugarToClassFileDeprecatedAttribute.java
@@ -6,10 +6,11 @@
 
 import static org.junit.Assert.assertTrue;
 
+import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.ClassFileConsumer;
 import com.android.tools.r8.ClassFileConsumer.ForwardingConsumer;
-import com.android.tools.r8.ClassFileConsumerData;
 import com.android.tools.r8.D8TestCompileResult;
+import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -90,8 +91,9 @@
             .setProgramConsumer(
                 new ClassFileConsumer.ForwardingConsumer(null) {
                   @Override
-                  public void acceptClassFile(ClassFileConsumerData data) {
-                    checkDeprecatedAttributes(data.getByteDataView().getBuffer());
+                  public void accept(
+                      ByteDataView data, String descriptor, DiagnosticsHandler handler) {
+                    checkDeprecatedAttributes(data.getBuffer());
                   }
                 })
             .compile();
@@ -126,8 +128,8 @@
       builder.setProgramConsumer(
           new ForwardingConsumer(null) {
             @Override
-            public void acceptClassFile(ClassFileConsumerData data) {
-              checkDeprecatedAttributes(data.getByteDataView().getBuffer());
+            public void accept(ByteDataView data, String descriptor, DiagnosticsHandler handler) {
+              checkDeprecatedAttributes(data.getBuffer());
             }
           });
     }
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/BackportDuplicationTest.java b/src/test/java/com/android/tools/r8/desugar/backports/BackportDuplicationTest.java
index 9be08a2..ed2dd4e 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/BackportDuplicationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/BackportDuplicationTest.java
@@ -10,11 +10,11 @@
 import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
+import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.ClassFileConsumer;
-import com.android.tools.r8.ClassFileConsumerData;
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.DexFilePerClassFileConsumer;
-import com.android.tools.r8.DexFilePerClassFileConsumerData;
+import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.OutputMode;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -247,16 +247,21 @@
             firstRoundOutput.isCf()
                 ? new ClassFileConsumer.ForwardingConsumer(null) {
                   @Override
-                  public void acceptClassFile(ClassFileConsumerData data) {
-                    byte[] bytes = data.getByteDataCopy();
+                  public void accept(
+                      ByteDataView data, String descriptor, DiagnosticsHandler handler) {
+                    byte[] bytes = data.copyByteData();
                     assert bytes != null;
                     outputsRoundOne.add(bytes);
                   }
                 }
                 : new DexFilePerClassFileConsumer.ForwardingConsumer(null) {
                   @Override
-                  public void acceptDexFile(DexFilePerClassFileConsumerData data) {
-                    byte[] bytes = data.getByteDataCopy();
+                  public void accept(
+                      String primaryClassDescriptor,
+                      ByteDataView data,
+                      Set<String> descriptors,
+                      DiagnosticsHandler handler) {
+                    byte[] bytes = data.copyByteData();
                     assert bytes != null;
                     outputsRoundOne.add(bytes);
                   }
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/BackportMainDexTest.java b/src/test/java/com/android/tools/r8/desugar/backports/BackportMainDexTest.java
index 4a55fc2..5369238 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/BackportMainDexTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/BackportMainDexTest.java
@@ -9,8 +9,8 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
+import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.DexIndexedConsumer;
-import com.android.tools.r8.DexIndexedConsumerData;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.GenerateMainDexListRunResult;
 import com.android.tools.r8.OutputMode;
@@ -361,12 +361,13 @@
     Set<String> mainDexDescriptors;
 
     @Override
-    public void acceptDexIndexedFile(DexIndexedConsumerData data) {
-      if (data.getFileIndex() == 0) {
+    public void accept(
+        int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {
+      if (fileIndex == 0) {
         assertNull(mainDexBytes);
         assertNull(mainDexDescriptors);
-        mainDexBytes = data.getByteDataCopy();
-        mainDexDescriptors = data.getClassDescriptors();
+        mainDexBytes = data.copyByteData();
+        mainDexDescriptors = descriptors;
       }
     }
 
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/EmptyDesugaredLibrary.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/EmptyDesugaredLibrary.java
index 2f65784..3fd5104 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/EmptyDesugaredLibrary.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/EmptyDesugaredLibrary.java
@@ -9,8 +9,9 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.DexIndexedConsumer;
-import com.android.tools.r8.DexIndexedConsumerData;
+import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.L8TestBuilder;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
@@ -21,6 +22,7 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.List;
+import java.util.Set;
 import java.util.zip.ZipFile;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -65,7 +67,8 @@
     }
 
     @Override
-    public void acceptDexIndexedFile(DexIndexedConsumerData data) {
+    public void accept(
+        int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {
       count++;
     }
   }
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java b/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
index 3988efd..1d8821e 100644
--- a/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
+++ b/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
@@ -3,8 +3,10 @@
 import static junit.framework.TestCase.fail;
 import static org.junit.Assume.assumeTrue;
 
+import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.DexIndexedConsumer.ArchiveConsumer;
+import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.FeatureSplit;
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.R8TestCompileResult;
@@ -90,7 +92,17 @@
 
     builder
         .addProgramResourceProvider(ArchiveResourceProvider.fromArchive(featureJar, true))
-        .setProgramConsumer(new ArchiveConsumer(outputPath, true));
+        .setProgramConsumer(
+            new ArchiveConsumer(outputPath, true) {
+              @Override
+              public void accept(
+                  int fileIndex,
+                  ByteDataView data,
+                  Set<String> descriptors,
+                  DiagnosticsHandler handler) {
+                super.accept(fileIndex, data, descriptors, handler);
+              }
+            });
   }
 
   public static FeatureSplit splitWithNonJavaFile(
diff --git a/src/test/java/com/android/tools/r8/regress/Regress37740372.java b/src/test/java/com/android/tools/r8/regress/Regress37740372.java
index b46866c..8047716 100644
--- a/src/test/java/com/android/tools/r8/regress/Regress37740372.java
+++ b/src/test/java/com/android/tools/r8/regress/Regress37740372.java
@@ -8,11 +8,12 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.D8;
 import com.android.tools.r8.D8Command;
 import com.android.tools.r8.D8Command.Builder;
 import com.android.tools.r8.DexIndexedConsumer;
-import com.android.tools.r8.DexIndexedConsumerData;
+import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.origin.EmbeddedOrigin;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.smali.SmaliTestBase;
@@ -21,6 +22,7 @@
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import java.util.Base64;
+import java.util.Set;
 import org.junit.Test;
 
 public class Regress37740372 extends SmaliTestBase {
@@ -140,9 +142,10 @@
     }
 
     @Override
-    public void acceptDexIndexedFile(DexIndexedConsumerData data) {
-      assertEquals(0, data.getFileIndex());
-      this.data = data.getByteDataCopy();
+    public void accept(
+        int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {
+      assertEquals(0, fileIndex);
+      this.data = data.copyByteData();
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/synthesis/RepeatedCompilationNestedSyntheticsTest.java b/src/test/java/com/android/tools/r8/synthesis/RepeatedCompilationNestedSyntheticsTest.java
index e273552..b18935b 100644
--- a/src/test/java/com/android/tools/r8/synthesis/RepeatedCompilationNestedSyntheticsTest.java
+++ b/src/test/java/com/android/tools/r8/synthesis/RepeatedCompilationNestedSyntheticsTest.java
@@ -10,11 +10,10 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.ClassFileConsumer;
-import com.android.tools.r8.ClassFileConsumerData;
 import com.android.tools.r8.DesugarGraphConsumer;
 import com.android.tools.r8.DexFilePerClassFileConsumer;
-import com.android.tools.r8.DexFilePerClassFileConsumerData;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -70,8 +69,8 @@
         .setProgramConsumer(
             new ClassFileConsumer() {
               @Override
-              public void acceptClassFile(ClassFileConsumerData data) {
-                firstCompilation.put(data.getClassDescriptor(), data.getByteDataCopy());
+              public void accept(ByteDataView data, String descriptor, DiagnosticsHandler handler) {
+                firstCompilation.put(descriptor, data.copyByteData());
               }
 
               @Override
@@ -122,9 +121,10 @@
                   b.setProgramConsumer(
                       new ClassFileConsumer() {
                         @Override
-                        public void acceptClassFile(ClassFileConsumerData data) {
-                          secondCompilation.put(data.getClassDescriptor(), data.getByteDataCopy());
-                          allDescriptors.add(data.getClassDescriptor());
+                        public void accept(
+                            ByteDataView data, String descriptor, DiagnosticsHandler handler) {
+                          secondCompilation.put(descriptor, data.copyByteData());
+                          allDescriptors.add(descriptor);
                         }
 
                         @Override
@@ -133,12 +133,15 @@
               b ->
                   b.setProgramConsumer(
                       new DexFilePerClassFileConsumer() {
+
                         @Override
-                        public synchronized void acceptDexFile(
-                            DexFilePerClassFileConsumerData data) {
-                          secondCompilation.put(
-                              data.getPrimaryClassDescriptor(), data.getByteDataCopy());
-                          allDescriptors.addAll(data.getClassDescriptors());
+                        public void accept(
+                            String primaryClassDescriptor,
+                            ByteDataView data,
+                            Set<String> descriptors,
+                            DiagnosticsHandler handler) {
+                          secondCompilation.put(primaryClassDescriptor, data.copyByteData());
+                          allDescriptors.addAll(descriptors);
                         }
 
                         @Override
diff --git a/src/test/java/com/android/tools/r8/synthesis/RepeatedCompilationSyntheticsTest.java b/src/test/java/com/android/tools/r8/synthesis/RepeatedCompilationSyntheticsTest.java
index 842c56e..e7e5c3c 100644
--- a/src/test/java/com/android/tools/r8/synthesis/RepeatedCompilationSyntheticsTest.java
+++ b/src/test/java/com/android/tools/r8/synthesis/RepeatedCompilationSyntheticsTest.java
@@ -10,7 +10,6 @@
 import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.ClassFileConsumer;
 import com.android.tools.r8.DexFilePerClassFileConsumer;
-import com.android.tools.r8.DexFilePerClassFileConsumerData;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -23,6 +22,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Set;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -113,9 +113,12 @@
                   b.setProgramConsumer(
                       new DexFilePerClassFileConsumer() {
                         @Override
-                        public synchronized void acceptDexFile(
-                            DexFilePerClassFileConsumerData data) {
-                          secondCompilation.addAll(data.getClassDescriptors());
+                        public void accept(
+                            String primaryClassDescriptor,
+                            ByteDataView data,
+                            Set<String> descriptors,
+                            DiagnosticsHandler handler) {
+                          secondCompilation.addAll(descriptors);
                         }
 
                         @Override
diff --git a/src/test/java/com/android/tools/r8/utils/Smali.java b/src/test/java/com/android/tools/r8/utils/Smali.java
index 4190da5..4321812 100644
--- a/src/test/java/com/android/tools/r8/utils/Smali.java
+++ b/src/test/java/com/android/tools/r8/utils/Smali.java
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.utils;
 
+import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.DexIndexedConsumer;
-import com.android.tools.r8.DexIndexedConsumerData;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.dex.ApplicationReader;
 import com.android.tools.r8.dex.ApplicationWriter;
@@ -19,6 +19,7 @@
 import java.io.StringReader;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import org.antlr.runtime.CommonTokenStream;
@@ -128,8 +129,9 @@
     byte[] contents;
 
     @Override
-    public void acceptDexIndexedFile(DexIndexedConsumerData data) {
-      contents = data.getByteDataCopy();
+    public void accept(
+        int fileIndex, ByteDataView data, Set<String> descriptors, DiagnosticsHandler handler) {
+      contents = data.copyByteData();
     }
 
     @Override