mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-26 06:11:37 +00:00
82 lines
2.6 KiB
Java
82 lines
2.6 KiB
Java
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.gecko.annotationProcessors.utils;
|
|
|
|
import java.lang.reflect.Constructor;
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.Member;
|
|
import java.lang.reflect.Method;
|
|
import java.util.Comparator;
|
|
|
|
public class AlphabeticAnnotatableEntityComparator<T extends Member> implements Comparator<T> {
|
|
@Override
|
|
public int compare(T aLhs, T aRhs) {
|
|
// Constructors, Methods, Fields.
|
|
boolean lIsConstructor = aLhs instanceof Constructor;
|
|
boolean rIsConstructor = aRhs instanceof Constructor;
|
|
boolean lIsMethod = aLhs instanceof Method;
|
|
boolean rIsField = aRhs instanceof Field;
|
|
|
|
if (lIsConstructor) {
|
|
if (!rIsConstructor) {
|
|
return -1;
|
|
}
|
|
} else if (lIsMethod) {
|
|
if (rIsConstructor) {
|
|
return 1;
|
|
} else if (rIsField) {
|
|
return -1;
|
|
}
|
|
} else {
|
|
if (!rIsField) {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
// Verify these objects are the same type and cast them.
|
|
if (aLhs instanceof Method) {
|
|
return compare((Method) aLhs, (Method) aRhs);
|
|
} else if (aLhs instanceof Field) {
|
|
return compare((Field) aLhs, (Field) aRhs);
|
|
} else {
|
|
return compare((Constructor) aLhs, (Constructor) aRhs);
|
|
}
|
|
}
|
|
|
|
// Alas, the type system fails us.
|
|
private static int compare(Method aLhs, Method aRhs) {
|
|
// Initially, attempt to differentiate the methods be name alone..
|
|
String lName = aLhs.getName();
|
|
String rName = aRhs.getName();
|
|
|
|
int ret = lName.compareTo(rName);
|
|
if (ret != 0) {
|
|
return ret;
|
|
}
|
|
|
|
// The names were the same, so we need to compare signatures to find their uniqueness..
|
|
lName = Utils.getSignature(aLhs);
|
|
rName = Utils.getSignature(aRhs);
|
|
|
|
return lName.compareTo(rName);
|
|
}
|
|
|
|
private static int compare(Constructor<?> aLhs, Constructor<?> aRhs) {
|
|
// The names will be the same, so we need to compare signatures to find their uniqueness..
|
|
String lName = Utils.getSignature(aLhs);
|
|
String rName = Utils.getSignature(aRhs);
|
|
|
|
return lName.compareTo(rName);
|
|
}
|
|
|
|
private static int compare(Field aLhs, Field aRhs) {
|
|
// Compare field names..
|
|
String lName = aLhs.getName();
|
|
String rName = aRhs.getName();
|
|
|
|
return lName.compareTo(rName);
|
|
}
|
|
}
|