// 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.errors;

import com.android.tools.r8.Diagnostic;
import com.android.tools.r8.Keep;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.position.Position;
import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.StringUtils;
import java.util.Collection;

@Keep
public class DuplicateTypesDiagnostic implements Diagnostic {

  private final ClassReference type;
  private final Collection<Origin> origins;

  public DuplicateTypesDiagnostic(ClassReference type, Collection<Origin> origins) {
    assert type != null;
    assert origins.size() > 1;
    this.type = type;
    this.origins = origins;
  }

  /** Get the type that is defined multiple times. */
  public ClassReference getType() {
    return type;
  }

  /**
   * Get a collection of origins that define the type.
   *
   * <p>Note that this returned collection is not complete, thus there may be other origins of the
   * type not contained within the returned collection. The collection will have at least two
   * elements.
   *
   * @return Collection of origins defining the type.
   */
  public Collection<Origin> getOrigins() {
    return origins;
  }

  /**
   * Returns one of the origins defining the duplicated type.
   *
   * <p>Note that there are no guarentees on which element of the collection this returns, only that
   * it will hold that <code>d.getOrigins().contains(d.getOrigin())</code>.
   *
   * @return An origin defining the duplicated type.
   */
  @Override
  public Origin getOrigin() {
    return origins.iterator().next();
  }

  @Override
  public Position getPosition() {
    return Position.UNKNOWN;
  }

  @Override
  public String getDiagnosticMessage() {
    String typeName = DescriptorUtils.descriptorToJavaType(type.getDescriptor());
    return "Type " + typeName + " is defined multiple times: " + StringUtils.join(", ", origins);
  }
}
