| // 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()); | |
| } | |
| } |