// 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 static com.android.tools.r8.utils.ClassReferenceUtils.getClassReferenceComparator;
import static com.android.tools.r8.utils.TypeReferenceUtils.getTypeReferenceComparator;

import com.android.tools.r8.references.ClassReference;
import com.android.tools.r8.references.FieldReference;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.references.Reference;
import java.util.Comparator;

public class FieldReferenceUtils {

  private static final Comparator<FieldReference> COMPARATOR =
      (field, other) -> {
        CompareResult holderClassCompareResult =
            CompareResult.compare(
                field.getHolderClass(), other.getHolderClass(), getClassReferenceComparator());
        if (!holderClassCompareResult.isEqual()) {
          return holderClassCompareResult.getComparisonResult();
        }
        CompareResult fieldNameCompareResult =
            CompareResult.compare(field.getFieldName(), other.getFieldName());
        if (!fieldNameCompareResult.isEqual()) {
          return fieldNameCompareResult.getComparisonResult();
        }
        return getTypeReferenceComparator().compare(field.getFieldType(), other.getFieldType());
      };

  public static int compare(FieldReference fieldReference, ClassReference other) {
    return ClassReferenceUtils.compare(other, fieldReference) * -1;
  }

  public static int compare(FieldReference fieldReference, FieldReference other) {
    return getFieldReferenceComparator().compare(fieldReference, other);
  }

  public static int compare(FieldReference fieldReference, MethodReference other) {
    int comparisonResult =
        ClassReferenceUtils.compare(fieldReference.getHolderClass(), other.getHolderClass());
    return comparisonResult != 0 ? comparisonResult : -1;
  }

  public static FieldReference fieldFromField(Class<?> clazz, String name) {
    try {
      return Reference.fieldFromField(clazz.getDeclaredField(name));
    } catch (NoSuchFieldException e) {
      throw new RuntimeException(e);
    }
  }

  public static Comparator<FieldReference> getFieldReferenceComparator() {
    return COMPARATOR;
  }

  public static String toSourceString(FieldReference fieldReference) {
    return fieldReference.getFieldType().getTypeName()
        + " "
        + fieldReference.getHolderClass().getTypeName()
        + "."
        + fieldReference.getFieldName();
  }
}
