From c15bbd675f84ceb5d94282ee66887604de5f1391 Mon Sep 17 00:00:00 2001 From: diguage Date: Wed, 7 Jun 2017 15:07:17 +0800 Subject: [PATCH] Refactor duplicate code See gh-1452 --- .../beans/factory/support/AutowireUtils.java | 35 ++++++++----------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AutowireUtils.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AutowireUtils.java index 14ee8d0cfb..35a91c638f 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AutowireUtils.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AutowireUtils.java @@ -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 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); } /**