From 6495a50df74e0179e9548b0462aeb87ee40461aa Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 27 Jun 2017 18:27:15 +0200 Subject: [PATCH] DATACMNS-1101 - Replace ArrayList indirections in ReflectionEntityInstantiator/PreferredConstructor. Iterate over simple ArrayList and construct array of params instead of copying elements between multiple Lists. --- .../convert/ReflectionEntityInstantiator.java | 16 +++++++--------- .../data/mapping/PreferredConstructor.java | 5 ++--- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/springframework/data/convert/ReflectionEntityInstantiator.java b/src/main/java/org/springframework/data/convert/ReflectionEntityInstantiator.java index 5ed93267c..df27287d3 100644 --- a/src/main/java/org/springframework/data/convert/ReflectionEntityInstantiator.java +++ b/src/main/java/org/springframework/data/convert/ReflectionEntityInstantiator.java @@ -16,9 +16,8 @@ package org.springframework.data.convert; import java.lang.reflect.Array; -import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; -import java.util.List; import org.springframework.beans.BeanInstantiationException; import org.springframework.beans.BeanUtils; @@ -66,17 +65,16 @@ public enum ReflectionEntityInstantiator implements EntityInstantiator { } } - List params = new ArrayList<>(); - if (null != provider && constructor.hasParameters()) { - for (Parameter parameter : constructor.getParameters()) { - params.add(provider.getParameterValue(parameter)); - } + Object[] params = new Object[constructor.getConstructor().getParameterCount()]; + int i = 0; + for (Parameter parameter : constructor.getParameters()) { + params[i++] = provider.getParameterValue(parameter); } try { - return BeanUtils.instantiateClass(constructor.getConstructor(), params.toArray()); + return BeanUtils.instantiateClass(constructor.getConstructor(), params); } catch (BeanInstantiationException e) { - throw new MappingInstantiationException(entity, params, e); + throw new MappingInstantiationException(entity, Arrays.asList(params), e); } } } diff --git a/src/main/java/org/springframework/data/mapping/PreferredConstructor.java b/src/main/java/org/springframework/data/mapping/PreferredConstructor.java index e9c4587ea..e1d5eee72 100644 --- a/src/main/java/org/springframework/data/mapping/PreferredConstructor.java +++ b/src/main/java/org/springframework/data/mapping/PreferredConstructor.java @@ -29,7 +29,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.annotation.PersistenceConstructor; import org.springframework.data.util.Lazy; -import org.springframework.data.util.Streamable; import org.springframework.data.util.TypeInformation; import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; @@ -85,8 +84,8 @@ public class PreferredConstructor> { * * @return */ - public Streamable> getParameters() { - return Streamable.of(parameters); + public List> getParameters() { + return parameters; } /**