// Copyright (c) 2017, 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.conversion;

import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexEncodedMethod.ClassInlinerEligibility;
import com.android.tools.r8.ir.optimize.Inliner.Constraint;

public class OptimizationFeedbackDirect implements OptimizationFeedback {

  @Override
  public void methodReturnsArgument(DexEncodedMethod method, int argument) {
    method.markReturnsArgument(argument);
  }

  @Override
  public void methodReturnsConstant(DexEncodedMethod method, long value) {
    method.markReturnsConstant(value);
  }

  @Override
  public void methodNeverReturnsNull(DexEncodedMethod method) {
    method.markNeverReturnsNull();
  }

  @Override
  public void methodNeverReturnsNormally(DexEncodedMethod method) {
    method.markNeverReturnsNormally();
  }

  @Override
  public void markProcessed(DexEncodedMethod method, Constraint state) {
    method.markProcessed(state);
  }

  @Override
  public void markCheckNullReceiverBeforeAnySideEffect(DexEncodedMethod method, boolean mark) {
    method.markCheckNullReceiverBeforeAnySideEffect(mark);
  }

  @Override
  public void markTriggerClassInitBeforeAnySideEffect(DexEncodedMethod method, boolean mark) {
    method.markTriggerClassInitBeforeAnySideEffect(mark);
  }

  @Override
  public void setClassInlinerEligibility(
      DexEncodedMethod method, ClassInlinerEligibility eligibility) {
    method.setClassInlinerEligibility(eligibility);
  }
  @Override
  public void setInitializerEnablingJavaAssertions(DexEncodedMethod method) {
    method.setInitializerEnablingJavaAssertions();
  }
}
