// 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.androidapi;

import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexLibraryClass;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.profile.rewriting.ProfileRewritingApiReferenceStubberEventConsumer;

public interface ApiReferenceStubberEventConsumer {

  void acceptMockedLibraryClass(DexProgramClass mockClass, DexLibraryClass libraryClass);

  void acceptMockedLibraryClassContext(
      DexProgramClass mockClass, DexLibraryClass libraryClass, DexProgramClass context);

  default void finished(AppView<?> appView) {}

  boolean isEmpty();

  static ApiReferenceStubberEventConsumer create(AppView<?> appView) {
    return ProfileRewritingApiReferenceStubberEventConsumer.attach(appView, empty());
  }

  static EmptyApiReferenceStubberEventConsumer empty() {
    return EmptyApiReferenceStubberEventConsumer.getInstance();
  }

  class EmptyApiReferenceStubberEventConsumer implements ApiReferenceStubberEventConsumer {

    private static final EmptyApiReferenceStubberEventConsumer INSTANCE =
        new EmptyApiReferenceStubberEventConsumer();

    private EmptyApiReferenceStubberEventConsumer() {}

    static EmptyApiReferenceStubberEventConsumer getInstance() {
      return INSTANCE;
    }

    @Override
    public void acceptMockedLibraryClass(DexProgramClass mockClass, DexLibraryClass libraryClass) {
      // Intentionally empty.
    }

    @Override
    public void acceptMockedLibraryClassContext(
        DexProgramClass mockClass, DexLibraryClass libraryClass, DexProgramClass context) {
      // Intentionally empty.
    }

    @Override
    public boolean isEmpty() {
      return true;
    }
  }
}
