// Copyright (c) 2019, 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.DexType;
import com.android.tools.r8.ir.analysis.type.ClassTypeElement;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.analysis.value.AbstractValue;
import com.android.tools.r8.ir.optimize.classinliner.ClassInlinerEligibilityInfo;
import com.android.tools.r8.ir.optimize.info.ParameterUsagesInfo.ParameterUsage;
import com.android.tools.r8.ir.optimize.info.bridge.BridgeInfo;
import com.android.tools.r8.ir.optimize.info.initializer.InstanceInitializerInfo;
import java.util.BitSet;
import java.util.Set;

public interface MethodOptimizationInfo {

  enum InlinePreference {
    NeverInline,
    ForceInline,
    Default
  }

  boolean isDefaultMethodOptimizationInfo();

  boolean isUpdatableMethodOptimizationInfo();

  UpdatableMethodOptimizationInfo asUpdatableMethodOptimizationInfo();

  boolean cannotBeKept();

  boolean classInitializerMayBePostponed();

  TypeElement getDynamicUpperBoundType();

  ClassTypeElement getDynamicLowerBoundType();

  ParameterUsage getParameterUsages(int parameter);

  BitSet getNonNullParamOrThrow();

  BitSet getNonNullParamOnNormalExits();

  boolean hasBeenInlinedIntoSingleCallSite();

  boolean isReachabilitySensitive();

  boolean returnsArgument();

  int getReturnedArgument();

  boolean neverReturnsNull();

  boolean neverReturnsNormally();

  BridgeInfo getBridgeInfo();

  ClassInlinerEligibilityInfo getClassInlinerEligibility();

  Set<DexType> getInitializedClassesOnNormalExit();

  InstanceInitializerInfo getInstanceInitializerInfo();

  boolean isInitializerEnablingJavaVmAssertions();

  AbstractValue getAbstractReturnValue();

  boolean forceInline();

  boolean neverInline();

  boolean checksNullReceiverBeforeAnySideEffect();

  boolean triggersClassInitBeforeAnySideEffect();

  boolean mayHaveSideEffects();

  boolean returnValueOnlyDependsOnArguments();

  boolean returnValueHasBeenPropagated();

  UpdatableMethodOptimizationInfo mutableCopy();
}
