From e2febbdd8c87394efcd2d09aa5aa72ef40a04a5d Mon Sep 17 00:00:00 2001 From: Carter Kozak Date: Tue, 10 Apr 2018 15:55:35 -0700 Subject: [PATCH] Remove unnecessary iterator allocation in type handlers HandlerMethodReturnValueHandlerComposite and AbstractMethodMessageHandler iterate using index over collections implementing RandomAccess to avoid unnecessary iterators. --- .../handler/invocation/AbstractMethodMessageHandler.java | 6 ++++-- .../HandlerMethodArgumentResolverComposite.java | 4 +--- .../HandlerMethodReturnValueHandlerComposite.java | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/AbstractMethodMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/AbstractMethodMessageHandler.java index 76923a748f..ead36e33c1 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/AbstractMethodMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/AbstractMethodMessageHandler.java @@ -84,7 +84,7 @@ public abstract class AbstractMethodMessageHandler protected final Log logger = LogFactory.getLog(getClass()); - private Collection destinationPrefixes = new ArrayList<>(); + private final List destinationPrefixes = new ArrayList<>(); private final List customArgumentResolvers = new ArrayList<>(4); @@ -428,7 +428,9 @@ public abstract class AbstractMethodMessageHandler if (CollectionUtils.isEmpty(this.destinationPrefixes)) { return destination; } - for (String prefix : this.destinationPrefixes) { + // Avoid unnecessary iterator allocation + for (int i = 0, size = this.destinationPrefixes.size(); i < size; i++) { + String prefix = this.destinationPrefixes.get(i); if (destination.startsWith(prefix)) { return destination.substring(prefix.length()); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/HandlerMethodArgumentResolverComposite.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/HandlerMethodArgumentResolverComposite.java index f4f7622a06..5caea7474d 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/HandlerMethodArgumentResolverComposite.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/HandlerMethodArgumentResolverComposite.java @@ -71,9 +71,7 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu @Nullable List argumentResolvers) { if (argumentResolvers != null) { - for (HandlerMethodArgumentResolver resolver : argumentResolvers) { - this.argumentResolvers.add(resolver); - } + this.argumentResolvers.addAll(argumentResolvers); } return this; } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/HandlerMethodReturnValueHandlerComposite.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/HandlerMethodReturnValueHandlerComposite.java index 21f779b972..c019167daa 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/HandlerMethodReturnValueHandlerComposite.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/HandlerMethodReturnValueHandlerComposite.java @@ -71,9 +71,7 @@ public class HandlerMethodReturnValueHandlerComposite implements AsyncHandlerMet @Nullable List handlers) { if (handlers != null) { - for (HandlerMethodReturnValueHandler handler : handlers) { - this.returnValueHandlers.add(handler); - } + this.returnValueHandlers.addAll(handlers); } return this; } @@ -85,7 +83,9 @@ public class HandlerMethodReturnValueHandlerComposite implements AsyncHandlerMet @Nullable private HandlerMethodReturnValueHandler getReturnValueHandler(MethodParameter returnType) { - for (HandlerMethodReturnValueHandler handler : this.returnValueHandlers) { + // Avoid allocating an iterator + for (int i = 0, size = this.returnValueHandlers.size(); i < size; i++) { + HandlerMethodReturnValueHandler handler = this.returnValueHandlers.get(i); if (handler.supportsReturnType(returnType)) { return handler; }