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

import com.android.tools.r8.AssertionsConfiguration;
import com.android.tools.r8.AssertionsConfiguration.AssertionTransformationScope;
import com.android.tools.r8.references.MethodReference;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.List;

public class AssertionConfigurationWithDefault {

  public final AssertionsConfiguration defaultConfiguration;
  public final List<AssertionsConfiguration> assertionsConfigurations;
  private final List<MethodReference> allAssertionHandlers;

  public AssertionConfigurationWithDefault(
      AssertionsConfiguration defautlTransformation,
      List<AssertionsConfiguration> assertionsConfigurations) {
    this.defaultConfiguration = defautlTransformation;
    assert assertionsConfigurations != null;
    this.assertionsConfigurations = assertionsConfigurations;
    this.allAssertionHandlers = computeAllAssertionHandlers();
  }

  public boolean isPassthroughAll() {
    if (assertionsConfigurations.size() == 0) {
      return defaultConfiguration.isPassthrough();
    }
    return assertionsConfigurations.size() == 1
        && assertionsConfigurations.get(0).getScope() == AssertionTransformationScope.ALL
        && assertionsConfigurations.get(0).isPassthrough();
  }

  public List<MethodReference> getAllAssertionHandlers() {
    return allAssertionHandlers;
  }

  private List<MethodReference> computeAllAssertionHandlers() {
    assert !defaultConfiguration.isAssertionHandler();
    if (assertionsConfigurations.isEmpty()) {
      return ImmutableList.of();
    }
    List<MethodReference> result = new ArrayList<>();
    assertionsConfigurations.forEach(
        assertionsConfiguration -> {
          if (assertionsConfiguration.isAssertionHandler()
              && !result.contains(assertionsConfiguration.getAssertionHandler())) {
            result.add(assertionsConfiguration.getAssertionHandler());
          }
        });
    return result;
  }
}
