19
19
import java .beans .PropertyDescriptor ;
20
20
import java .io .Serializable ;
21
21
import java .lang .reflect .Constructor ;
22
+ import java .lang .reflect .Executable ;
22
23
import java .lang .reflect .InvocationHandler ;
23
24
import java .lang .reflect .InvocationTargetException ;
24
25
import java .lang .reflect .Method ;
28
29
import java .lang .reflect .Type ;
29
30
import java .lang .reflect .TypeVariable ;
30
31
import java .util .Arrays ;
32
+ import java .util .Comparator ;
31
33
import java .util .Set ;
32
34
33
35
import org .springframework .beans .BeanMetadataElement ;
49
51
*/
50
52
abstract class AutowireUtils {
51
53
54
+ private static final Comparator <Executable > EXECUTABLE_COMPARATOR = (e1 , e2 ) -> {
55
+ boolean p1 = Modifier .isPublic (e1 .getModifiers ());
56
+ boolean p2 = Modifier .isPublic (e2 .getModifiers ());
57
+ if (p1 != p2 ) {
58
+ return (p1 ? -1 : 1 );
59
+ }
60
+ int c1pl = e1 .getParameterCount ();
61
+ int c2pl = e2 .getParameterCount ();
62
+ return Integer .compare (c2pl , c1pl );
63
+ };
64
+
52
65
/**
53
66
* Sort the given constructors, preferring public constructors and "greedy" ones with
54
67
* a maximum number of arguments. The result will contain public constructors first,
@@ -57,16 +70,7 @@ abstract class AutowireUtils {
57
70
* @param constructors the constructor array to sort
58
71
*/
59
72
public static void sortConstructors (Constructor <?>[] constructors ) {
60
- Arrays .sort (constructors , (c1 , c2 ) -> {
61
- boolean p1 = Modifier .isPublic (c1 .getModifiers ());
62
- boolean p2 = Modifier .isPublic (c2 .getModifiers ());
63
- if (p1 != p2 ) {
64
- return (p1 ? -1 : 1 );
65
- }
66
- int c1pl = c1 .getParameterCount ();
67
- int c2pl = c2 .getParameterCount ();
68
- return (c1pl < c2pl ? 1 : (c1pl > c2pl ? -1 : 0 ));
69
- });
73
+ Arrays .sort (constructors , EXECUTABLE_COMPARATOR );
70
74
}
71
75
72
76
/**
@@ -77,16 +81,7 @@ public static void sortConstructors(Constructor<?>[] constructors) {
77
81
* @param factoryMethods the factory method array to sort
78
82
*/
79
83
public static void sortFactoryMethods (Method [] factoryMethods ) {
80
- Arrays .sort (factoryMethods , (fm1 , fm2 ) -> {
81
- boolean p1 = Modifier .isPublic (fm1 .getModifiers ());
82
- boolean p2 = Modifier .isPublic (fm2 .getModifiers ());
83
- if (p1 != p2 ) {
84
- return (p1 ? -1 : 1 );
85
- }
86
- int c1pl = fm1 .getParameterCount ();
87
- int c2pl = fm2 .getParameterCount ();
88
- return (c1pl < c2pl ? 1 : (c1pl > c2pl ? -1 : 0 ));
89
- });
84
+ Arrays .sort (factoryMethods , EXECUTABLE_COMPARATOR );
90
85
}
91
86
92
87
/**
0 commit comments