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

import com.android.tools.r8.classmerging.Policy;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.verticalclassmerging.policies.NoAbstractMethodsOnAbstractClassesPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoAnnotationClassesPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoClassInitializationChangesPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoDirectlyInstantiatedClassesPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoEnclosingMethodAttributesPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoFieldResolutionChangesPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoIllegalAccessesPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoInnerClassAttributesPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoInterfacesWithInvokeSpecialToDefaultMethodIntoClassPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoInterfacesWithUnknownSubtypesPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoInvokeSuperNoSuchMethodErrorsPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoKeptClassesPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoLockMergingPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoMethodResolutionChangesPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoNestedMergingPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoNonSerializableClassIntoSerializableClassPolicy;
import com.android.tools.r8.verticalclassmerging.policies.NoServiceInterfacesPolicy;
import com.android.tools.r8.verticalclassmerging.policies.SameApiReferenceLevelPolicy;
import com.android.tools.r8.verticalclassmerging.policies.SameFeatureSplitPolicy;
import com.android.tools.r8.verticalclassmerging.policies.SameMainDexGroupPolicy;
import com.android.tools.r8.verticalclassmerging.policies.SameNestPolicy;
import com.android.tools.r8.verticalclassmerging.policies.SameStartupPartitionPolicy;
import com.android.tools.r8.verticalclassmerging.policies.SuccessfulVirtualMethodResolutionInTargetPolicy;
import java.util.List;

public class VerticalClassMergerPolicyScheduler {

  public static List<Policy> getPolicies(AppView<AppInfoWithLiveness> appView) {
    return List.of(
        new NoDirectlyInstantiatedClassesPolicy(appView),
        new NoInterfacesWithUnknownSubtypesPolicy(appView),
        new NoKeptClassesPolicy(appView),
        new SameFeatureSplitPolicy(appView),
        new SameStartupPartitionPolicy(appView),
        new NoServiceInterfacesPolicy(appView),
        new NoAnnotationClassesPolicy(),
        new NoNonSerializableClassIntoSerializableClassPolicy(appView),
        new NoEnclosingMethodAttributesPolicy(),
        new NoInnerClassAttributesPolicy(),
        new SameNestPolicy(),
        new SameMainDexGroupPolicy(appView),
        new NoLockMergingPolicy(appView),
        new SameApiReferenceLevelPolicy(appView),
        new NoFieldResolutionChangesPolicy(appView),
        new NoMethodResolutionChangesPolicy(appView),
        new NoIllegalAccessesPolicy(appView),
        new NoClassInitializationChangesPolicy(appView),
        new NoInterfacesWithInvokeSpecialToDefaultMethodIntoClassPolicy(appView),
        new NoInvokeSuperNoSuchMethodErrorsPolicy(appView),
        new SuccessfulVirtualMethodResolutionInTargetPolicy(appView),
        new NoAbstractMethodsOnAbstractClassesPolicy(appView),
        new NoNestedMergingPolicy());
  }
}
