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

import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.utils.ThrowingConsumer;

public interface AbstractProfile<
    ClassRule extends AbstractProfileClassRule, MethodRule extends AbstractProfileMethodRule> {

  boolean containsClassRule(DexType type);

  boolean containsMethodRule(DexMethod method);

  <E1 extends Exception, E2 extends Exception> void forEachRule(
      ThrowingConsumer<? super ClassRule, E1> classRuleConsumer,
      ThrowingConsumer<? super MethodRule, E2> methodRuleConsumer)
      throws E1, E2;

  ClassRule getClassRule(DexType type);

  MethodRule getMethodRule(DexMethod method);

  interface Builder<
      ClassRule extends AbstractProfileClassRule,
      MethodRule extends AbstractProfileMethodRule,
      Profile extends AbstractProfile<ClassRule, MethodRule>,
      ProfileBuilder extends Builder<ClassRule, MethodRule, Profile, ProfileBuilder>> {

    ProfileBuilder addRule(AbstractProfileRule rule);

    ProfileBuilder addClassRule(ClassRule classRule);

    ProfileBuilder addMethodRule(MethodRule methodRule);

    Profile build();
  }
}
