blob: 35266e7c4252724f2e2ad903180c83461bc6a4d2 [file] [log] [blame]
// 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.retrace;
import java.util.Comparator;
import java.util.function.BiFunction;
public abstract class AmbiguousComparator<T> implements Comparator<T> {
public enum SortKeys {
CLASS,
METHOD,
SOURCE,
LINE
}
private final BiFunction<T, SortKeys, String> getter;
public AmbiguousComparator(BiFunction<T, SortKeys, String> getter) {
this.getter = getter;
}
@Override
public int compare(T o1, T o2) {
int compare = getter.apply(o1, SortKeys.CLASS).compareTo(getter.apply(o2, SortKeys.CLASS));
if (compare != 0) {
return compare;
}
compare = getter.apply(o1, SortKeys.METHOD).compareTo(getter.apply(o2, SortKeys.METHOD));
if (compare != 0) {
return compare;
}
compare = getter.apply(o1, SortKeys.SOURCE).compareTo(getter.apply(o2, SortKeys.SOURCE));
if (compare != 0) {
return compare;
}
try {
return Integer.compare(
Integer.parseInt(getter.apply(o1, SortKeys.LINE)),
Integer.parseInt(getter.apply(o2, SortKeys.SOURCE)));
} catch (NumberFormatException ignore) {
return 0;
}
}
}