// Copyright (c) 2022, 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 com.android.tools.r8.keepanno.annotations.KeepForApi;
import com.android.tools.r8.references.ClassReference;

/**
 * Consumer receiving the data representing global synthetics for the program.
 *
 * <p>Global synthetic information is only produced as part of D8 intermediate builds (e.g., for
 * incremental compilation.) The global synthetic information represents desugaring content that may
 * be duplicated among many intermediate-mode builds and will need to be merged to ensure a valid
 * final program (i.e., a program that does not contain any duplicate definitions).
 *
 * <p>The data obtained for global synthetics must be passed to the subsequent compilation unit that
 * builds a non-intermediate output. That compilation output can then be packaged as a final
 * application. It is valid to merge just the globals in such a final step. See {@code
 * GlobalSyntheticsResourceProvider}.
 */
@KeepForApi
public interface GlobalSyntheticsConsumer {

  /**
   * Callback to receive the data representing the global synthetics for the program.
   *
   * <p>The encoding of the global synthetics is compiler internal and may vary between compiler
   * versions. The data received here is thus only valid as inputs to the same compiler version.
   *
   * <p>The context class is the class for which the global synthetic data is needed. If compiling
   * in DexIndexed mode, the context class will be null.
   *
   * <p>The accept method will be called at most once for a given context class (and only once at
   * all for a DexIndexed mode compilation). The global data for that class may be the same as for
   * other context classes, but it will be provided for each context.
   *
   * @param data Opaque encoding of the global synthetics for the program.
   * @param context The class giving rise to the global synthetics. Null in DexIndexed mode.
   * @param handler Diagnostics handler for reporting.
   */
  void accept(ByteDataView data, ClassReference context, DiagnosticsHandler handler);

  /**
   * Callback indicating that no more global synthetics will be reported for the compilation unit.
   *
   * @param handler Diagnostics handler for reporting.
   */
  default void finished(DiagnosticsHandler handler) {}
}
