// Copyright (c) 2021, 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.ir.optimize.info;

import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.ir.analysis.inlining.SimpleInliningConstraint;
import com.android.tools.r8.ir.analysis.inlining.SimpleInliningConstraintFactory;
import com.android.tools.r8.ir.analysis.type.DynamicType;
import com.android.tools.r8.ir.analysis.value.AbstractValue;
import com.android.tools.r8.ir.optimize.classinliner.constraint.ClassInlinerMethodConstraint;
import com.android.tools.r8.ir.optimize.enums.classification.EnumUnboxerMethodClassification;
import com.android.tools.r8.ir.optimize.info.bridge.BridgeInfo;
import com.android.tools.r8.ir.optimize.info.initializer.InstanceInitializerInfoCollection;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import java.util.BitSet;

public abstract class MethodOptimizationInfoFixer {

  public abstract BridgeInfo fixupBridgeInfo(BridgeInfo bridgeInfo);

  public abstract CallSiteOptimizationInfo fixupCallSiteOptimizationInfo(
      ConcreteCallSiteOptimizationInfo callSiteOptimizationInfo);

  public abstract ClassInlinerMethodConstraint fixupClassInlinerMethodConstraint(
      AppView<AppInfoWithLiveness> appView,
      ClassInlinerMethodConstraint classInlinerMethodConstraint);

  public abstract EnumUnboxerMethodClassification fixupEnumUnboxerMethodClassification(
      EnumUnboxerMethodClassification classification);

  public abstract InstanceInitializerInfoCollection fixupInstanceInitializerInfo(
      AppView<AppInfoWithLiveness> appView,
      InstanceInitializerInfoCollection instanceInitializerInfo);

  public abstract BitSet fixupNonNullParamOnNormalExits(BitSet nonNullParamOnNormalExits);

  public abstract BitSet fixupNonNullParamOrThrow(BitSet nonNullParamOrThrow);

  public abstract int fixupReturnedArgumentIndex(int returnedArgumentIndex);

  public final SimpleInliningConstraint fixupNopInliningConstraint(
      AppView<AppInfoWithLiveness> appView,
      SimpleInliningConstraint constraint,
      SimpleInliningConstraintFactory factory) {
    return fixupSimpleInliningConstraint(appView, constraint, factory);
  }

  public abstract SimpleInliningConstraint fixupSimpleInliningConstraint(
      AppView<AppInfoWithLiveness> appView,
      SimpleInliningConstraint constraint,
      SimpleInliningConstraintFactory factory);

  public abstract BitSet fixupArguments(BitSet arguments);

  public abstract DynamicType fixupDynamicType(DynamicType dynamicType);

  public abstract AbstractValue fixupAbstractReturnValue(
      AppView<AppInfoWithLiveness> appView, AbstractValue returnValue);
}
