提交 c15bbd67 编写于 作者: D diguage 提交者: Stephane Nicoll

Refactor duplicate code

See gh-1452
上级 5a8b8b11
......@@ -19,6 +19,7 @@ package org.springframework.beans.factory.support;
import java.beans.PropertyDescriptor;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.Executable;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
......@@ -28,6 +29,7 @@ import java.lang.reflect.Proxy;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Set;
import org.springframework.beans.BeanMetadataElement;
......@@ -49,6 +51,17 @@ import org.springframework.util.ClassUtils;
*/
abstract class AutowireUtils {
private static final Comparator<Executable> COMPARATOR = (e1, e2) -> {
boolean p1 = Modifier.isPublic(e1.getModifiers());
boolean p2 = Modifier.isPublic(e2.getModifiers());
if (p1 != p2) {
return (p1 ? -1 : 1);
}
int c1pl = e1.getParameterCount();
int c2pl = e2.getParameterCount();
return Integer.compare(c2pl, c1pl);
};
/**
* Sort the given constructors, preferring public constructors and "greedy" ones with
* a maximum number of arguments. The result will contain public constructors first,
......@@ -57,16 +70,7 @@ abstract class AutowireUtils {
* @param constructors the constructor array to sort
*/
public static void sortConstructors(Constructor<?>[] constructors) {
Arrays.sort(constructors, (c1, c2) -> {
boolean p1 = Modifier.isPublic(c1.getModifiers());
boolean p2 = Modifier.isPublic(c2.getModifiers());
if (p1 != p2) {
return (p1 ? -1 : 1);
}
int c1pl = c1.getParameterCount();
int c2pl = c2.getParameterCount();
return (c1pl < c2pl ? 1 : (c1pl > c2pl ? -1 : 0));
});
Arrays.sort(constructors, COMPARATOR);
}
/**
......@@ -77,16 +81,7 @@ abstract class AutowireUtils {
* @param factoryMethods the factory method array to sort
*/
public static void sortFactoryMethods(Method[] factoryMethods) {
Arrays.sort(factoryMethods, (fm1, fm2) -> {
boolean p1 = Modifier.isPublic(fm1.getModifiers());
boolean p2 = Modifier.isPublic(fm2.getModifiers());
if (p1 != p2) {
return (p1 ? -1 : 1);
}
int c1pl = fm1.getParameterCount();
int c2pl = fm2.getParameterCount();
return (c1pl < c2pl ? 1 : (c1pl > c2pl ? -1 : 0));
});
Arrays.sort(factoryMethods, COMPARATOR);
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册