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 fc0387662190..665932fef383 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 @@ -66,7 +66,9 @@ abstract class AutowireUtils { * @param constructors the constructor array to sort */ public static void sortConstructors(Constructor[] constructors) { - Arrays.sort(constructors, EXECUTABLE_COMPARATOR); + if (constructors.length > 1) { + Arrays.sort(constructors, EXECUTABLE_COMPARATOR); + } } /** @@ -77,7 +79,9 @@ public static void sortConstructors(Constructor[] constructors) { * @param factoryMethods the factory method array to sort */ public static void sortFactoryMethods(Method[] factoryMethods) { - Arrays.sort(factoryMethods, EXECUTABLE_COMPARATOR); + if (factoryMethods.length > 1) { + Arrays.sort(factoryMethods, EXECUTABLE_COMPARATOR); + } } /** diff --git a/spring-beans/src/main/java/org/springframework/beans/support/PropertyComparator.java b/spring-beans/src/main/java/org/springframework/beans/support/PropertyComparator.java index ad0c58bbcdbe..09ba3f028073 100644 --- a/spring-beans/src/main/java/org/springframework/beans/support/PropertyComparator.java +++ b/spring-beans/src/main/java/org/springframework/beans/support/PropertyComparator.java @@ -147,7 +147,7 @@ public static void sort(List source, SortDefinition sortDefinition) throws Be * @throws java.lang.IllegalArgumentException in case of a missing propertyName */ public static void sort(Object[] source, SortDefinition sortDefinition) throws BeansException { - if (StringUtils.hasText(sortDefinition.getProperty())) { + if (source.length > 1 && StringUtils.hasText(sortDefinition.getProperty())) { Arrays.sort(source, new PropertyComparator<>(sortDefinition)); } } diff --git a/spring-core/src/main/java/org/springframework/cglib/core/EmitUtils.java b/spring-core/src/main/java/org/springframework/cglib/core/EmitUtils.java index 1ff41efbba46..37ae3e084d1f 100644 --- a/spring-core/src/main/java/org/springframework/cglib/core/EmitUtils.java +++ b/spring-core/src/main/java/org/springframework/cglib/core/EmitUtils.java @@ -254,7 +254,9 @@ static int[] getSwitchKeys(Map buckets) { for (Iterator it = buckets.keySet().iterator(); it.hasNext();) { keys[index++] = ((Integer)it.next()); } - Arrays.sort(keys); + if (keys.length > 1) { + Arrays.sort(keys); + } return keys; } diff --git a/spring-core/src/main/java/org/springframework/core/annotation/AttributeMethods.java b/spring-core/src/main/java/org/springframework/core/annotation/AttributeMethods.java index d805bfaa3d6f..f0c2b5f63544 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/AttributeMethods.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/AttributeMethods.java @@ -264,7 +264,9 @@ private static AttributeMethods compute(Class annotationTy if (size == 0) { return NONE; } - Arrays.sort(methods, methodComparator); + if (methods.length > 1) { + Arrays.sort(methods, methodComparator); + } Method[] attributeMethods = Arrays.copyOf(methods, size); return new AttributeMethods(annotationType, attributeMethods); } diff --git a/spring-core/src/main/java/org/springframework/core/annotation/PackagesAnnotationFilter.java b/spring-core/src/main/java/org/springframework/core/annotation/PackagesAnnotationFilter.java index 2e82f189dc13..0cf06ecdf2ce 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/PackagesAnnotationFilter.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/PackagesAnnotationFilter.java @@ -45,7 +45,9 @@ final class PackagesAnnotationFilter implements AnnotationFilter { Assert.hasText(pkg, "Packages array must not have empty elements"); this.prefixes[i] = pkg + "."; } - Arrays.sort(this.prefixes); + if (this.prefixes.length > 1) { + Arrays.sort(this.prefixes); + } this.hashCode = Arrays.hashCode(this.prefixes); } diff --git a/spring-core/src/main/java/org/springframework/util/StringUtils.java b/spring-core/src/main/java/org/springframework/util/StringUtils.java index 4accef594205..8e525c543acf 100644 --- a/spring-core/src/main/java/org/springframework/util/StringUtils.java +++ b/spring-core/src/main/java/org/springframework/util/StringUtils.java @@ -1028,7 +1028,9 @@ public static String[] sortStringArray(String[] array) { return array; } - Arrays.sort(array); + if (array.length > 1) { + Arrays.sort(array); + } return array; } diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectiveConstructorResolver.java b/spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectiveConstructorResolver.java index d5039e6a604c..118900f0bc4b 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectiveConstructorResolver.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectiveConstructorResolver.java @@ -65,7 +65,9 @@ public class ReflectiveConstructorResolver implements ConstructorResolver { Class type = context.getTypeLocator().findType(typeName); Constructor[] ctors = type.getConstructors(); - Arrays.sort(ctors, Comparator.comparingInt(Constructor::getParameterCount)); + if (ctors.length > 1) { + Arrays.sort(ctors, Comparator.comparingInt(Constructor::getParameterCount)); + } Constructor closeMatch = null; Constructor matchRequiringConversion = null; diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectivePropertyAccessor.java b/spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectivePropertyAccessor.java index af16393aee6c..1ab206cbbb4b 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectivePropertyAccessor.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectivePropertyAccessor.java @@ -417,7 +417,9 @@ public void write(EvaluationContext context, @Nullable Object target, String nam private Method[] getSortedMethods(Class clazz) { return this.sortedMethodsCache.computeIfAbsent(clazz, key -> { Method[] methods = key.getMethods(); - Arrays.sort(methods, (o1, o2) -> (o1.isBridge() == o2.isBridge() ? 0 : (o1.isBridge() ? 1 : -1))); + if (methods.length > 1) { + Arrays.sort(methods, (o1, o2) -> (o1.isBridge() == o2.isBridge() ? 0 : (o1.isBridge() ? 1 : -1))); + } return methods; }); }