// 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.graph.DexItemFactory;
import com.android.tools.r8.graph.DexType;
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 ClassReferenceUtils {

  private static final Comparator<ClassReference> COMPARATOR =
      Comparator.comparing(ClassReference::getDescriptor);

  public static int compare(ClassReference classReference, ClassReference other) {
    return getClassReferenceComparator().compare(classReference, other);
  }

  public static int compare(ClassReference classReference, FieldReference other) {
    int comparisonResult =
        getClassReferenceComparator().compare(classReference, other.getHolderClass());
    return comparisonResult != 0 ? comparisonResult : -1;
  }

  public static int compare(ClassReference classReference, MethodReference other) {
    int comparisonResult =
        getClassReferenceComparator().compare(classReference, other.getHolderClass());
    return comparisonResult != 0 ? comparisonResult : -1;
  }

  public static Comparator<ClassReference> getClassReferenceComparator() {
    return COMPARATOR;
  }

  public static ClassReference parseClassDescriptor(String classDescriptor) {
    if (DescriptorUtils.isClassDescriptor(classDescriptor)) {
      return Reference.classFromDescriptor(classDescriptor);
    } else {
      return null;
    }
  }

  public static String toSmaliString(ClassReference classReference) {
    return classReference.getDescriptor();
  }

  public static DexType toDexType(ClassReference classReference, DexItemFactory dexItemFactory) {
    return dexItemFactory.createType(classReference.getDescriptor());
  }
}
