diff --git a/src/main/asciidoc/object-mapping.adoc b/src/main/asciidoc/object-mapping.adoc index 5f8592996..6a99e0b00 100644 --- a/src/main/asciidoc/object-mapping.adoc +++ b/src/main/asciidoc/object-mapping.adoc @@ -17,9 +17,9 @@ This means we need two fundamental steps: Spring Data automatically tries to detect a persistent entity's constructor to be used to materialize objects of that type. The resolution algorithm works as follows: -1. If there is a single static factory method annotated with `@FactoryMethod` then it is used. +1. If there is a single static factory method annotated with `@PersistenceCreator` then it is used. 2. If there is a single constructor, it is used. -3. If there are multiple constructors and exactly one is annotated with `@PersistenceConstructor`, it is used. +3. If there are multiple constructors and exactly one is annotated with `@PersistenceCreator`, it is used. 4. If there's a no-argument constructor, it is used. Other constructors will be ignored. @@ -205,9 +205,9 @@ Even if the intent is that the calculation should be preferred, it's important t <4> The `comment` property is mutable is populated by setting its field directly. <5> The `remarks` properties are mutable and populated by setting the `comment` field directly or by invoking the setter method for <6> The class exposes a factory method and a constructor for object creation. -The core idea here is to use factory methods instead of additional constructors to avoid the need for constructor disambiguation through `@PersistenceConstructor`. +The core idea here is to use factory methods instead of additional constructors to avoid the need for constructor disambiguation through `@PersistenceCreator`. Instead, defaulting of properties is handled within the factory method. -If you want Spring Data to use the factory method for object instantiation, annotate it with `@FactoryMethod`. +If you want Spring Data to use the factory method for object instantiation, annotate it with `@PersistenceCreator`. [[mapping.general-recommendations]] == General recommendations @@ -217,7 +217,7 @@ Also, this avoids your domain objects to be littered with setter methods that al If you need those, prefer to make them package protected so that they can only be invoked by a limited amount of co-located types. Constructor-only materialization is up to 30% faster than properties population. * _Provide an all-args constructor_ -- Even if you cannot or don't want to model your entities as immutable values, there's still value in providing a constructor that takes all properties of the entity as arguments, including the mutable ones, as this allows the object mapping to skip the property population for optimal performance. -* _Use factory methods instead of overloaded constructors to avoid ``@PersistenceConstructor``_ -- With an all-argument constructor needed for optimal performance, we usually want to expose more application use case specific constructors that omit things like auto-generated identifiers etc. +* _Use factory methods instead of overloaded constructors to avoid ``@PersistenceCreator``_ -- With an all-argument constructor needed for optimal performance, we usually want to expose more application use case specific constructors that omit things like auto-generated identifiers etc. It's an established pattern to rather use static factory methods to expose these variants of the all-args constructor. * _Make sure you adhere to the constraints that allow the generated instantiator and property accessor classes to be used_ -- * _For identifiers to be generated, still use a final field in combination with an all-arguments persistence constructor (preferred) or a `with…` method_ -- @@ -307,14 +307,14 @@ data class Person(val id: String, val name: String) ---- ==== -The class above compiles to a typical class with an explicit constructor.We can customize this class by adding another constructor and annotate it with `@PersistenceConstructor` to indicate a constructor preference: +The class above compiles to a typical class with an explicit constructor.We can customize this class by adding another constructor and annotate it with `@PersistenceCreator` to indicate a constructor preference: ==== [source,kotlin] ---- data class Person(var id: String, val name: String) { - @PersistenceConstructor + @PersistenceCreator constructor(id: String) : this(id, "unknown") } ---- diff --git a/src/main/java/org/springframework/data/annotation/FactoryMethod.java b/src/main/java/org/springframework/data/annotation/FactoryMethod.java deleted file mode 100644 index 9bccfe565..000000000 --- a/src/main/java/org/springframework/data/annotation/FactoryMethod.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2011-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.annotation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Annotation to declare a {@code static} method as factory method for class instantiation. - * - * @author Mark Paluch - * @since 3.0 - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE }) -@EntityCreatorAnnotation -public @interface FactoryMethod { -} diff --git a/src/main/java/org/springframework/data/annotation/PersistenceConstructor.java b/src/main/java/org/springframework/data/annotation/PersistenceConstructor.java index a44afb790..e69abab73 100644 --- a/src/main/java/org/springframework/data/annotation/PersistenceConstructor.java +++ b/src/main/java/org/springframework/data/annotation/PersistenceConstructor.java @@ -25,9 +25,11 @@ import java.lang.annotation.Target; * * @author Jon Brisbin * @author Mark Paluch + * @author Oliver Drotbohm + * @deprecated in favor of {@link PersistenceCreator} since 3.0, to be removed in 3.1 */ @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.CONSTRUCTOR, ElementType.ANNOTATION_TYPE }) -@EntityCreatorAnnotation -public @interface PersistenceConstructor { -} +@PersistenceCreator +@Deprecated +public @interface PersistenceConstructor {} diff --git a/src/main/java/org/springframework/data/annotation/EntityCreatorAnnotation.java b/src/main/java/org/springframework/data/annotation/PersistenceCreator.java similarity index 81% rename from src/main/java/org/springframework/data/annotation/EntityCreatorAnnotation.java rename to src/main/java/org/springframework/data/annotation/PersistenceCreator.java index d1132955c..807e7f9a4 100644 --- a/src/main/java/org/springframework/data/annotation/EntityCreatorAnnotation.java +++ b/src/main/java/org/springframework/data/annotation/PersistenceCreator.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2021 the original author or authors. + * Copyright 2011-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,9 +24,9 @@ import java.lang.annotation.Target; * Marker annotation to declare a constructor or factory method annotation as factory/preferred constructor annotation. * * @author Mark Paluch - * @since 3.0 + * @author Oliver Drotbohm + * @since 2.7 */ @Retention(RetentionPolicy.RUNTIME) -@Target({ ElementType.ANNOTATION_TYPE }) -public @interface EntityCreatorAnnotation { -} +@Target({ ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.ANNOTATION_TYPE }) +public @interface PersistenceCreator {} diff --git a/src/main/java/org/springframework/data/mapping/FactoryMethod.java b/src/main/java/org/springframework/data/mapping/FactoryMethod.java index f636f7bd3..75c1b27ba 100644 --- a/src/main/java/org/springframework/data/mapping/FactoryMethod.java +++ b/src/main/java/org/springframework/data/mapping/FactoryMethod.java @@ -24,9 +24,9 @@ import org.springframework.util.ReflectionUtils; * Value object to encapsulate the factory method to be used when mapping persistent data to objects. * * @author Mark Paluch - * @since 3.0 + * @since 2.7 */ -public final class FactoryMethod> extends EntityCreatorMetadataSupport { +public final class FactoryMethod> extends InstanceCreatorMetadataSupport { /** * Creates a new {@link FactoryMethod} from the given {@link Constructor} and {@link Parameter}s. @@ -49,5 +49,4 @@ public final class FactoryMethod> extends Ent public Method getFactoryMethod() { return (Method) getExecutable(); } - } diff --git a/src/main/java/org/springframework/data/mapping/EntityCreatorMetadata.java b/src/main/java/org/springframework/data/mapping/InstanceCreatorMetadata.java similarity index 85% rename from src/main/java/org/springframework/data/mapping/EntityCreatorMetadata.java rename to src/main/java/org/springframework/data/mapping/InstanceCreatorMetadata.java index bdb3a41b0..4f404bcfc 100644 --- a/src/main/java/org/springframework/data/mapping/EntityCreatorMetadata.java +++ b/src/main/java/org/springframework/data/mapping/InstanceCreatorMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 the original author or authors. + * Copyright 2021-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,12 +18,13 @@ package org.springframework.data.mapping; import java.util.List; /** - * Metadata describing a mechanism to create an entity instance. + * Metadata describing a mechanism to create instances of persistent types. * * @author Mark Paluch - * @since 3.0 + * @author Oliver Drotbohm + * @since 2.7 */ -public interface EntityCreatorMetadata

> { +public interface InstanceCreatorMetadata

> { /** * Check whether the given {@link PersistentProperty} is being used as creator parameter. diff --git a/src/main/java/org/springframework/data/mapping/EntityCreatorMetadataSupport.java b/src/main/java/org/springframework/data/mapping/InstanceCreatorMetadataSupport.java similarity index 87% rename from src/main/java/org/springframework/data/mapping/EntityCreatorMetadataSupport.java rename to src/main/java/org/springframework/data/mapping/InstanceCreatorMetadataSupport.java index c4fb4697f..3b1f3f85e 100644 --- a/src/main/java/org/springframework/data/mapping/EntityCreatorMetadataSupport.java +++ b/src/main/java/org/springframework/data/mapping/InstanceCreatorMetadataSupport.java @@ -28,22 +28,23 @@ import org.springframework.util.Assert; * persistent data to objects. * * @author Mark Paluch - * @since 3.0 + * @author Oliver Drotbohm + * @since 2.7 */ -class EntityCreatorMetadataSupport> implements EntityCreatorMetadata

{ +class InstanceCreatorMetadataSupport> implements InstanceCreatorMetadata

{ private final Executable executable; private final List> parameters; private final Map, Boolean> isPropertyParameterCache = new ConcurrentHashMap<>(); /** - * Creates a new {@link EntityCreatorMetadataSupport} from the given {@link Executable} and {@link Parameter}s. + * Creates a new {@link InstanceCreatorMetadataSupport} from the given {@link Executable} and {@link Parameter}s. * * @param executable must not be {@literal null}. * @param parameters must not be {@literal null}. */ @SafeVarargs - public EntityCreatorMetadataSupport(Executable executable, Parameter... parameters) { + public InstanceCreatorMetadataSupport(Executable executable, Parameter... parameters) { Assert.notNull(executable, "Executable must not be null!"); Assert.notNull(parameters, "Parameters must not be null!"); @@ -72,7 +73,7 @@ class EntityCreatorMetadataSupport> implement /** * Returns whether the given {@link PersistentProperty} is referenced in a creator argument of the - * {@link PersistentEntity} backing this {@link EntityCreatorMetadataSupport}. + * {@link PersistentEntity} backing this {@link InstanceCreatorMetadataSupport}. *

* Results of this call are cached and reused on the next invocation. Calling this method for a * {@link PersistentProperty} that was not yet added to its owning {@link PersistentEntity} will capture that state diff --git a/src/main/java/org/springframework/data/mapping/PersistentEntity.java b/src/main/java/org/springframework/data/mapping/PersistentEntity.java index 11d9de611..11d643720 100644 --- a/src/main/java/org/springframework/data/mapping/PersistentEntity.java +++ b/src/main/java/org/springframework/data/mapping/PersistentEntity.java @@ -49,23 +49,23 @@ public interface PersistentEntity> extends It * indicates that the instantiation of the object of that persistent entity is done through either a customer * {@link org.springframework.data.mapping.model.EntityInstantiator} or handled by custom conversion * mechanisms entirely. - * @deprecated since 3.0, use {@link #getEntityCreator()}. + * @deprecated since 2.7, use {@link #getInstanceCreatorMetadata()}. */ @Nullable @Deprecated PreferredConstructor getPersistenceConstructor(); /** - * Returns the {@link EntityCreatorMetadata} to be used to instantiate objects of this {@link PersistentEntity}. + * Returns the {@link InstanceCreatorMetadata} to be used to instantiate objects of this {@link PersistentEntity}. * * @return {@literal null} in case no suitable creation mechanism for automatic construction can be found. This * usually indicates that the instantiation of the object of that persistent entity is done through either a * customer {@link org.springframework.data.mapping.model.EntityInstantiator} or handled by custom conversion * mechanisms entirely. - * @since 3.0 + * @since 2.7 */ @Nullable - EntityCreatorMetadata

getEntityCreator(); + InstanceCreatorMetadata

getInstanceCreatorMetadata(); /** * Returns whether the given {@link PersistentProperty} is referred to by a constructor argument of the diff --git a/src/main/java/org/springframework/data/mapping/PreferredConstructor.java b/src/main/java/org/springframework/data/mapping/PreferredConstructor.java index 4ef733003..4a106d77c 100644 --- a/src/main/java/org/springframework/data/mapping/PreferredConstructor.java +++ b/src/main/java/org/springframework/data/mapping/PreferredConstructor.java @@ -35,7 +35,7 @@ import org.springframework.util.ReflectionUtils; * @author Myeonghyeon Lee * @author Xeno Amess */ -public final class PreferredConstructor> extends EntityCreatorMetadataSupport { +public final class PreferredConstructor> extends InstanceCreatorMetadataSupport { private final List> parameters; diff --git a/src/main/java/org/springframework/data/mapping/model/BasicPersistentEntity.java b/src/main/java/org/springframework/data/mapping/model/BasicPersistentEntity.java index da7df78e6..c303d00a5 100644 --- a/src/main/java/org/springframework/data/mapping/model/BasicPersistentEntity.java +++ b/src/main/java/org/springframework/data/mapping/model/BasicPersistentEntity.java @@ -63,7 +63,7 @@ public class BasicPersistentEntity> implement private static final String TYPE_MISMATCH = "Target bean of type %s is not of type of the persistent entity (%s)!"; - private final @Nullable EntityCreatorMetadata

creator; + private final @Nullable InstanceCreatorMetadata

creator; private final TypeInformation information; private final List

properties; private final List

persistentPropertiesCache; @@ -109,7 +109,7 @@ public class BasicPersistentEntity> implement this.properties = new ArrayList<>(); this.persistentPropertiesCache = new ArrayList<>(); this.comparator = comparator; - this.creator = EntityCreatorMetadataDiscoverer.discover(this); + this.creator = InstanceCreatorMetadataDiscoverer.discover(this); this.associations = comparator == null ? new HashSet<>() : new TreeSet<>(new AssociationComparator<>(comparator)); this.propertyCache = new HashMap<>(16, 1f); @@ -138,7 +138,7 @@ public class BasicPersistentEntity> implement } @Override - public EntityCreatorMetadata

getEntityCreator() { + public InstanceCreatorMetadata

getInstanceCreatorMetadata() { return creator; } diff --git a/src/main/java/org/springframework/data/mapping/model/ClassGeneratingEntityInstantiator.java b/src/main/java/org/springframework/data/mapping/model/ClassGeneratingEntityInstantiator.java index 1e4d399ae..3635d5567 100644 --- a/src/main/java/org/springframework/data/mapping/model/ClassGeneratingEntityInstantiator.java +++ b/src/main/java/org/springframework/data/mapping/model/ClassGeneratingEntityInstantiator.java @@ -34,8 +34,8 @@ import org.springframework.asm.Type; import org.springframework.beans.BeanInstantiationException; import org.springframework.cglib.core.ReflectUtils; import org.springframework.core.NativeDetector; -import org.springframework.data.mapping.EntityCreatorMetadata; import org.springframework.data.mapping.FactoryMethod; +import org.springframework.data.mapping.InstanceCreatorMetadata; import org.springframework.data.mapping.Parameter; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; @@ -164,7 +164,7 @@ class ClassGeneratingEntityInstantiator implements EntityInstantiator { */ protected EntityInstantiator doCreateEntityInstantiator(PersistentEntity entity) { return new EntityInstantiatorAdapter( - createObjectInstantiator(entity, entity.getEntityCreator())); + createObjectInstantiator(entity, entity.getInstanceCreatorMetadata())); } /** @@ -192,7 +192,7 @@ class ClassGeneratingEntityInstantiator implements EntityInstantiator { return true; } - EntityCreatorMetadata entityCreator = entity.getEntityCreator(); + InstanceCreatorMetadata entityCreator = entity.getInstanceCreatorMetadata(); if (entityCreator == null) { return true; @@ -236,7 +236,7 @@ class ClassGeneratingEntityInstantiator implements EntityInstantiator { /** * Creates a dynamically generated {@link ObjectInstantiator} for the given {@link PersistentEntity} and - * {@link EntityCreatorMetadata}. There will always be exactly one {@link ObjectInstantiator} instance per + * {@link InstanceCreatorMetadata}. There will always be exactly one {@link ObjectInstantiator} instance per * {@link PersistentEntity}. * * @param entity @@ -244,7 +244,7 @@ class ClassGeneratingEntityInstantiator implements EntityInstantiator { * @return */ ObjectInstantiator createObjectInstantiator(PersistentEntity entity, - @Nullable EntityCreatorMetadata constructor) { + @Nullable InstanceCreatorMetadata constructor) { try { return (ObjectInstantiator) this.generator.generateCustomInstantiatorClass(entity, constructor).newInstance(); @@ -282,7 +282,7 @@ class ClassGeneratingEntityInstantiator implements EntityInstantiator { public , P extends PersistentProperty

> T createInstance(E entity, ParameterValueProvider

provider) { - Object[] params = extractInvocationArguments(entity.getEntityCreator(), provider); + Object[] params = extractInvocationArguments(entity.getInstanceCreatorMetadata(), provider); try { return (T) instantiator.newInstance(params); @@ -300,7 +300,7 @@ class ClassGeneratingEntityInstantiator implements EntityInstantiator { * @return */ static

, T> Object[] extractInvocationArguments( - @Nullable EntityCreatorMetadata

constructor, ParameterValueProvider

provider) { + @Nullable InstanceCreatorMetadata

constructor, ParameterValueProvider

provider) { if (constructor == null || !constructor.hasParameters()) { return allocateArguments(0); @@ -353,7 +353,7 @@ class ClassGeneratingEntityInstantiator implements EntityInstantiator { public , P extends PersistentProperty

> T createInstance(E entity, ParameterValueProvider

provider) { - Object[] params = extractInvocationArguments(entity.getEntityCreator(), provider); + Object[] params = extractInvocationArguments(entity.getInstanceCreatorMetadata(), provider); throw new MappingInstantiationException(entity, Arrays.asList(params), new BeanInstantiationException(typeToCreate, "Class is abstract")); @@ -417,7 +417,7 @@ class ClassGeneratingEntityInstantiator implements EntityInstantiator { * @return */ public Class generateCustomInstantiatorClass(PersistentEntity entity, - @Nullable EntityCreatorMetadata constructor) { + @Nullable InstanceCreatorMetadata constructor) { String className = generateClassName(entity); Class type = entity.getType(); @@ -458,7 +458,7 @@ class ClassGeneratingEntityInstantiator implements EntityInstantiator { * @return */ public byte[] generateBytecode(String internalClassName, PersistentEntity entity, - @Nullable EntityCreatorMetadata entityCreator) { + @Nullable InstanceCreatorMetadata entityCreator) { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); @@ -493,7 +493,7 @@ class ClassGeneratingEntityInstantiator implements EntityInstantiator { * @param entityCreator */ private void visitCreateMethod(ClassWriter cw, PersistentEntity entity, - @Nullable EntityCreatorMetadata entityCreator) { + @Nullable InstanceCreatorMetadata entityCreator) { String entityTypeResourcePath = Type.getInternalName(entity.getType()); diff --git a/src/main/java/org/springframework/data/mapping/model/EntityCreatorMetadataDiscoverer.java b/src/main/java/org/springframework/data/mapping/model/InstanceCreatorMetadataDiscoverer.java similarity index 86% rename from src/main/java/org/springframework/data/mapping/model/EntityCreatorMetadataDiscoverer.java rename to src/main/java/org/springframework/data/mapping/model/InstanceCreatorMetadataDiscoverer.java index 537e5f6be..9058d7f36 100644 --- a/src/main/java/org/springframework/data/mapping/model/EntityCreatorMetadataDiscoverer.java +++ b/src/main/java/org/springframework/data/mapping/model/InstanceCreatorMetadataDiscoverer.java @@ -26,9 +26,9 @@ import java.util.List; import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.core.ParameterNameDiscoverer; import org.springframework.core.annotation.MergedAnnotations; -import org.springframework.data.annotation.EntityCreatorAnnotation; -import org.springframework.data.mapping.EntityCreatorMetadata; +import org.springframework.data.annotation.PersistenceCreator; import org.springframework.data.mapping.FactoryMethod; +import org.springframework.data.mapping.InstanceCreatorMetadata; import org.springframework.data.mapping.MappingException; import org.springframework.data.mapping.Parameter; import org.springframework.data.mapping.PersistentEntity; @@ -40,9 +40,9 @@ import org.springframework.lang.Nullable; * Discoverer for factory methods and persistence constructors. * * @author Mark Paluch - * @since 3.0 + * @since 2.7 */ -class EntityCreatorMetadataDiscoverer { +class InstanceCreatorMetadataDiscoverer { private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new DefaultParameterNameDiscoverer(); @@ -55,13 +55,14 @@ class EntityCreatorMetadataDiscoverer { * @return */ @Nullable - public static > EntityCreatorMetadata

discover(PersistentEntity entity) { + public static > InstanceCreatorMetadata

discover( + PersistentEntity entity) { Constructor[] declaredConstructors = entity.getType().getDeclaredConstructors(); Method[] declaredMethods = entity.getType().getDeclaredMethods(); - boolean hasAnnotatedFactoryMethod = findAnnotation(EntityCreatorAnnotation.class, declaredMethods); - boolean hasAnnotatedConstructor = findAnnotation(EntityCreatorAnnotation.class, declaredConstructors); + boolean hasAnnotatedFactoryMethod = findAnnotation(PersistenceCreator.class, declaredMethods); + boolean hasAnnotatedConstructor = findAnnotation(PersistenceCreator.class, declaredConstructors); if (hasAnnotatedConstructor && hasAnnotatedFactoryMethod) { throw new MappingException( @@ -95,7 +96,7 @@ class EntityCreatorMetadataDiscoverer { continue; } - if (findAnnotation(EntityCreatorAnnotation.class, method)) { + if (findAnnotation(PersistenceCreator.class, method)) { candidates.add(method); } } @@ -127,11 +128,11 @@ class EntityCreatorMetadataDiscoverer { private static void validateMethod(Method method) { - if (MergedAnnotations.from(method).isPresent(EntityCreatorAnnotation.class)) { + if (MergedAnnotations.from(method).isPresent(PersistenceCreator.class)) { if (!Modifier.isStatic(method.getModifiers())) { throw new MappingException( - String.format("@Factory can only be used on static methods. Offending method: %s", method)); + String.format("@ PersistenceCreator can only be used on static methods. Offending method: %s", method)); } } } diff --git a/src/main/java/org/springframework/data/mapping/model/InstantiationAwarePropertyAccessor.java b/src/main/java/org/springframework/data/mapping/model/InstantiationAwarePropertyAccessor.java index 3a9830fdc..830eb3396 100644 --- a/src/main/java/org/springframework/data/mapping/model/InstantiationAwarePropertyAccessor.java +++ b/src/main/java/org/springframework/data/mapping/model/InstantiationAwarePropertyAccessor.java @@ -19,7 +19,7 @@ import java.util.function.Function; import org.springframework.core.KotlinDetector; import org.springframework.data.annotation.PersistenceConstructor; -import org.springframework.data.mapping.EntityCreatorMetadata; +import org.springframework.data.mapping.InstanceCreatorMetadata; import org.springframework.data.mapping.Parameter; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; @@ -107,7 +107,7 @@ public class InstantiationAwarePropertyAccessor implements PersistentProperty return; } - EntityCreatorMetadata creator = owner.getEntityCreator(); + InstanceCreatorMetadata creator = owner.getInstanceCreatorMetadata(); if (creator == null) { throw new IllegalStateException(String.format(NO_SETTER_OR_CONSTRUCTOR, property.getName(), owner.getType())); diff --git a/src/main/java/org/springframework/data/mapping/model/KotlinClassGeneratingEntityInstantiator.java b/src/main/java/org/springframework/data/mapping/model/KotlinClassGeneratingEntityInstantiator.java index fa3273054..2593b9a4b 100644 --- a/src/main/java/org/springframework/data/mapping/model/KotlinClassGeneratingEntityInstantiator.java +++ b/src/main/java/org/springframework/data/mapping/model/KotlinClassGeneratingEntityInstantiator.java @@ -24,7 +24,7 @@ import java.util.Arrays; import java.util.List; import java.util.stream.IntStream; -import org.springframework.data.mapping.EntityCreatorMetadata; +import org.springframework.data.mapping.InstanceCreatorMetadata; import org.springframework.data.mapping.Parameter; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; @@ -50,7 +50,7 @@ class KotlinClassGeneratingEntityInstantiator extends ClassGeneratingEntityInsta @Override protected EntityInstantiator doCreateEntityInstantiator(PersistentEntity entity) { - EntityCreatorMetadata creator = entity.getEntityCreator(); + InstanceCreatorMetadata creator = entity.getInstanceCreatorMetadata(); if (KotlinReflectionUtils.isSupportedKotlinClass(entity.getType()) && creator instanceof PreferredConstructor) { @@ -84,7 +84,7 @@ class KotlinClassGeneratingEntityInstantiator extends ClassGeneratingEntityInsta DefaultingKotlinConstructorResolver(PersistentEntity entity) { Constructor hit = resolveDefaultConstructor(entity); - EntityCreatorMetadata creator = entity.getEntityCreator(); + InstanceCreatorMetadata creator = entity.getInstanceCreatorMetadata(); if (hit != null && creator instanceof PreferredConstructor) { @@ -100,13 +100,13 @@ class KotlinClassGeneratingEntityInstantiator extends ClassGeneratingEntityInsta @Nullable private static Constructor resolveDefaultConstructor(PersistentEntity entity) { - EntityCreatorMetadata creator = entity.getEntityCreator(); + InstanceCreatorMetadata creator = entity.getInstanceCreatorMetadata(); if (!(creator instanceof PreferredConstructor)) { return null; } - PreferredConstructor persistenceConstructor = (PreferredConstructor) entity.getEntityCreator(); + PreferredConstructor persistenceConstructor = (PreferredConstructor) entity.getInstanceCreatorMetadata(); Constructor hit = null; Constructor constructor = persistenceConstructor.getConstructor(); @@ -206,7 +206,7 @@ class KotlinClassGeneratingEntityInstantiator extends ClassGeneratingEntityInsta public , P extends PersistentProperty

> T createInstance(E entity, ParameterValueProvider

provider) { - Object[] params = extractInvocationArguments(entity.getEntityCreator(), provider); + Object[] params = extractInvocationArguments(entity.getInstanceCreatorMetadata(), provider); try { return (T) instantiator.newInstance(params); @@ -216,7 +216,7 @@ class KotlinClassGeneratingEntityInstantiator extends ClassGeneratingEntityInsta } private

, T> Object[] extractInvocationArguments( - @Nullable EntityCreatorMetadata

entityCreator, ParameterValueProvider

provider) { + @Nullable InstanceCreatorMetadata

entityCreator, ParameterValueProvider

provider) { if (entityCreator == null) { throw new IllegalArgumentException("EntityCreator must not be null!"); diff --git a/src/main/java/org/springframework/data/mapping/model/MappingInstantiationException.java b/src/main/java/org/springframework/data/mapping/model/MappingInstantiationException.java index 4791c2988..a4187da50 100644 --- a/src/main/java/org/springframework/data/mapping/model/MappingInstantiationException.java +++ b/src/main/java/org/springframework/data/mapping/model/MappingInstantiationException.java @@ -24,7 +24,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; -import org.springframework.data.mapping.EntityCreatorMetadata; +import org.springframework.data.mapping.InstanceCreatorMetadata; import org.springframework.data.mapping.FactoryMethod; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PreferredConstructor; @@ -46,7 +46,7 @@ public class MappingInstantiationException extends RuntimeException { private static final String TEXT_TEMPLATE = "Failed to instantiate %s using constructor %s with arguments %s"; private final Class entityType; - private final EntityCreatorMetadata entityCreator; + private final InstanceCreatorMetadata entityCreator; private final List constructorArguments; /** @@ -77,7 +77,7 @@ public class MappingInstantiationException extends RuntimeException { super(buildExceptionMessage(entity, arguments, message), cause); this.entityType = entity.map(PersistentEntity::getType).orElse(null); - this.entityCreator = entity.map(PersistentEntity::getEntityCreator).orElse(null); + this.entityCreator = entity.map(PersistentEntity::getInstanceCreatorMetadata).orElse(null); this.constructorArguments = arguments; } @@ -86,7 +86,7 @@ public class MappingInstantiationException extends RuntimeException { return entity.map(it -> { - Optional> constructor = Optional.ofNullable(it.getEntityCreator()); + Optional> constructor = Optional.ofNullable(it.getInstanceCreatorMetadata()); List toStringArgs = new ArrayList<>(arguments.size()); for (Object o : arguments) { @@ -100,7 +100,7 @@ public class MappingInstantiationException extends RuntimeException { }).orElse(defaultMessage); } - private static String toString(EntityCreatorMetadata creator) { + private static String toString(InstanceCreatorMetadata creator) { if (creator instanceof PreferredConstructor) { return toString((PreferredConstructor) creator); @@ -172,7 +172,7 @@ public class MappingInstantiationException extends RuntimeException { * @return the entity creator * @since 3.0 */ - public Optional> getEntityCreator() { + public Optional> getEntityCreator() { return Optional.ofNullable(entityCreator); } diff --git a/src/main/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProvider.java b/src/main/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProvider.java index 0f2d2ece4..ffd1dcfe4 100644 --- a/src/main/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProvider.java +++ b/src/main/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProvider.java @@ -15,7 +15,7 @@ */ package org.springframework.data.mapping.model; -import org.springframework.data.mapping.EntityCreatorMetadata; +import org.springframework.data.mapping.InstanceCreatorMetadata; import org.springframework.data.mapping.MappingException; import org.springframework.data.mapping.Parameter; import org.springframework.data.mapping.PersistentEntity; @@ -52,7 +52,7 @@ public class PersistentEntityParameterValueProvider

T getParameterValue(Parameter parameter) { - EntityCreatorMetadata

creator = entity.getEntityCreator(); + InstanceCreatorMetadata

creator = entity.getInstanceCreatorMetadata(); if (creator != null && creator.isParentParameter(parameter)) { return (T) parent; diff --git a/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java b/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java index 97b95cc8f..2cd148855 100644 --- a/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java +++ b/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java @@ -29,7 +29,7 @@ import java.util.List; import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.core.ParameterNameDiscoverer; import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.data.annotation.EntityCreatorAnnotation; +import org.springframework.data.annotation.PersistenceCreator; import org.springframework.data.mapping.Parameter; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; @@ -117,7 +117,7 @@ public interface PreferredConstructorDiscoverer !it.isSynthetic()) // Synthetic constructors should not be considered - .filter(it -> AnnotationUtils.findAnnotation(it, EntityCreatorAnnotation.class) != null) // Explicitly - // defined - // constructor - // trumps - // all + // Explicitly defined creator trumps all + .filter(it -> AnnotationUtils.findAnnotation(it, PersistenceCreator.class) != null) .map(it -> buildPreferredConstructor(it, type, entity)) // .findFirst() // .orElseGet(() -> { diff --git a/src/main/java/org/springframework/data/mapping/model/ReflectionEntityInstantiator.java b/src/main/java/org/springframework/data/mapping/model/ReflectionEntityInstantiator.java index e447f58aa..8dfa212d9 100644 --- a/src/main/java/org/springframework/data/mapping/model/ReflectionEntityInstantiator.java +++ b/src/main/java/org/springframework/data/mapping/model/ReflectionEntityInstantiator.java @@ -22,8 +22,8 @@ import java.util.Collections; import org.springframework.beans.BeanInstantiationException; import org.springframework.beans.BeanUtils; -import org.springframework.data.mapping.EntityCreatorMetadata; import org.springframework.data.mapping.FactoryMethod; +import org.springframework.data.mapping.InstanceCreatorMetadata; import org.springframework.data.mapping.Parameter; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; @@ -47,7 +47,7 @@ enum ReflectionEntityInstantiator implements EntityInstantiator { public , P extends PersistentProperty

> T createInstance(E entity, ParameterValueProvider

provider) { - EntityCreatorMetadata

creator = entity.getEntityCreator(); + InstanceCreatorMetadata

creator = entity.getInstanceCreatorMetadata(); if (creator == null) { return instantiateClass(entity); diff --git a/src/test/java/org/springframework/data/mapping/model/ClassGeneratingEntityInstantiatorUnitTests.java b/src/test/java/org/springframework/data/mapping/model/ClassGeneratingEntityInstantiatorUnitTests.java index dc77e8ee4..f9e70c7ea 100755 --- a/src/test/java/org/springframework/data/mapping/model/ClassGeneratingEntityInstantiatorUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/model/ClassGeneratingEntityInstantiatorUnitTests.java @@ -32,7 +32,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; -import org.springframework.data.annotation.FactoryMethod; +import org.springframework.data.annotation.PersistenceCreator; import org.springframework.data.classloadersupport.HidingClassLoader; import org.springframework.data.mapping.Parameter; import org.springframework.data.mapping.PersistentEntity; @@ -83,7 +83,7 @@ class ClassGeneratingEntityInstantiatorUnitTests

PreferredConstructor constructor = PreferredConstructorDiscoverer.discover(Foo.class); doReturn(Foo.class).when(entity).getType(); - doReturn(constructor).when(entity).getEntityCreator(); + doReturn(constructor).when(entity).getInstanceCreatorMetadata(); assertThat(instance.createInstance(entity, provider)).isInstanceOf(Foo.class); @@ -105,7 +105,7 @@ class ClassGeneratingEntityInstantiatorUnitTests

void createsInnerClassInstanceCorrectly() { BasicPersistentEntity entity = new BasicPersistentEntity(from(Inner.class)); - assertThat(entity.getEntityCreator()).satisfies(constructor -> { + assertThat(entity.getInstanceCreatorMetadata()).satisfies(constructor -> { Parameter parameter = constructor.getParameters().iterator().next(); @@ -225,7 +225,7 @@ class ClassGeneratingEntityInstantiatorUnitTests

doReturn(ObjCtorDefault.class).when(entity).getType(); doReturn(PreferredConstructorDiscoverer.discover(ObjCtorDefault.class))// - .when(entity).getEntityCreator(); + .when(entity).getInstanceCreatorMetadata(); IntStream.range(0, 2) .forEach(i -> assertThat(this.instance.createInstance(entity, provider)).isInstanceOf(ObjCtorDefault.class)); @@ -236,7 +236,7 @@ class ClassGeneratingEntityInstantiatorUnitTests

doReturn(ObjCtorNoArgs.class).when(entity).getType(); doReturn(PreferredConstructorDiscoverer.discover(ObjCtorNoArgs.class))// - .when(entity).getEntityCreator(); + .when(entity).getInstanceCreatorMetadata(); IntStream.range(0, 2).forEach(i -> { @@ -255,7 +255,7 @@ class ClassGeneratingEntityInstantiatorUnitTests

doReturn(ObjCtor1ParamString.class).when(entity).getType(); doReturn(PreferredConstructorDiscoverer.discover(ObjCtor1ParamString.class))// - .when(entity).getEntityCreator(); + .when(entity).getInstanceCreatorMetadata(); doReturn("FOO").when(provider).getParameterValue(any()); IntStream.range(0, 2).forEach(i -> { @@ -273,7 +273,7 @@ class ClassGeneratingEntityInstantiatorUnitTests

doReturn(ObjCtor2ParamStringString.class).when(entity).getType(); doReturn(PreferredConstructorDiscoverer.discover(ObjCtor2ParamStringString.class))// - .when(entity).getEntityCreator(); + .when(entity).getInstanceCreatorMetadata(); IntStream.range(0, 2).forEach(i -> { @@ -293,7 +293,7 @@ class ClassGeneratingEntityInstantiatorUnitTests

doReturn(ObjectCtor1ParamInt.class).when(entity).getType(); doReturn(PreferredConstructorDiscoverer.discover(ObjectCtor1ParamInt.class))// - .when(entity).getEntityCreator(); + .when(entity).getInstanceCreatorMetadata(); IntStream.range(0, 2).forEach(i -> { @@ -311,7 +311,7 @@ class ClassGeneratingEntityInstantiatorUnitTests

doReturn(ObjectCtor1ParamInt.class).when(entity).getType(); doReturn(PreferredConstructorDiscoverer.discover(ObjectCtor1ParamInt.class))// - .when(entity).getEntityCreator(); + .when(entity).getInstanceCreatorMetadata(); assertThatThrownBy(() -> this.instance.createInstance(entity, provider)) // .hasCauseInstanceOf(IllegalArgumentException.class); @@ -323,7 +323,7 @@ class ClassGeneratingEntityInstantiatorUnitTests

doReturn(ObjectCtor7ParamsString5IntsString.class).when(entity).getType(); doReturn(PreferredConstructorDiscoverer.discover(ObjectCtor7ParamsString5IntsString.class))// - .when(entity).getEntityCreator(); + .when(entity).getInstanceCreatorMetadata(); IntStream.range(0, 2).forEach(i -> { @@ -443,7 +443,7 @@ class ClassGeneratingEntityInstantiatorUnitTests

doReturn(type).when(entity).getType(); doReturn(PreferredConstructorDiscoverer.discover(type))// - .when(entity).getEntityCreator(); + .when(entity).getInstanceCreatorMetadata(); } static class Foo { @@ -471,7 +471,7 @@ class ClassGeneratingEntityInstantiatorUnitTests

this.name = name; } - @FactoryMethod + @PersistenceCreator public static WithFactoryMethod create(Long id, String name) { return new WithFactoryMethod(id, "Hello " + name); } diff --git a/src/test/java/org/springframework/data/mapping/model/FactoryMethodUnitTests.java b/src/test/java/org/springframework/data/mapping/model/FactoryMethodUnitTests.java index f1b75652f..9000630a0 100644 --- a/src/test/java/org/springframework/data/mapping/model/FactoryMethodUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/model/FactoryMethodUnitTests.java @@ -18,7 +18,7 @@ package org.springframework.data.mapping.model; import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; -import org.springframework.data.annotation.FactoryMethod; +import org.springframework.data.annotation.PersistenceCreator; import org.springframework.data.mapping.Parameter; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.util.ClassTypeInformation; @@ -68,7 +68,7 @@ class FactoryMethodUnitTests { this.lastname = lastname; } - @FactoryMethod + @PersistenceCreator public static FactoryPerson of(String firstname, String lastname) { return new FactoryPerson(firstname, "Mr. " + lastname); } diff --git a/src/test/java/org/springframework/data/mapping/model/EntityCreatorMetadataDiscovererUnitTests.java b/src/test/java/org/springframework/data/mapping/model/InstanceCreatorMetadataDiscovererUnitTests.java similarity index 85% rename from src/test/java/org/springframework/data/mapping/model/EntityCreatorMetadataDiscovererUnitTests.java rename to src/test/java/org/springframework/data/mapping/model/InstanceCreatorMetadataDiscovererUnitTests.java index c11539b2c..f94cc090f 100644 --- a/src/test/java/org/springframework/data/mapping/model/EntityCreatorMetadataDiscovererUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/model/InstanceCreatorMetadataDiscovererUnitTests.java @@ -18,26 +18,26 @@ package org.springframework.data.mapping.model; import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; -import org.springframework.data.annotation.FactoryMethod; -import org.springframework.data.mapping.EntityCreatorMetadata; +import org.springframework.data.annotation.PersistenceCreator; +import org.springframework.data.mapping.InstanceCreatorMetadata; import org.springframework.data.mapping.MappingException; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PreferredConstructor; import org.springframework.data.util.ClassTypeInformation; /** - * Unit tests for {@link EntityCreatorMetadataDiscoverer}. + * Unit tests for {@link InstanceCreatorMetadataDiscoverer}. * * @author Mark Paluch */ -class EntityCreatorMetadataDiscovererUnitTests { +class InstanceCreatorMetadataDiscovererUnitTests { @Test void shouldDiscoverAnnotatedFactoryMethod() { PersistentEntity entity = new BasicPersistentEntity<>( ClassTypeInformation.from(FactoryMethodsPerson.class)); - EntityCreatorMetadata creator = EntityCreatorMetadataDiscoverer.discover(entity); + InstanceCreatorMetadata creator = InstanceCreatorMetadataDiscoverer.discover(entity); assertThat(creator).isInstanceOf(org.springframework.data.mapping.FactoryMethod.class); assertThat(((org.springframework.data.mapping.FactoryMethod) creator).getFactoryMethod().getParameterCount()) @@ -49,7 +49,7 @@ class EntityCreatorMetadataDiscovererUnitTests { PersistentEntity entity = new BasicPersistentEntity<>( ClassTypeInformation.from(ConstructorPerson.class)); - EntityCreatorMetadata creator = EntityCreatorMetadataDiscoverer.discover(entity); + InstanceCreatorMetadata creator = InstanceCreatorMetadataDiscoverer.discover(entity); assertThat(creator).isInstanceOf(PreferredConstructor.class); } @@ -58,7 +58,7 @@ class EntityCreatorMetadataDiscovererUnitTests { void shouldDiscoverDefaultConstructor() { PersistentEntity entity = new BasicPersistentEntity<>(ClassTypeInformation.from(Person.class)); - EntityCreatorMetadata creator = EntityCreatorMetadataDiscoverer.discover(entity); + InstanceCreatorMetadata creator = InstanceCreatorMetadataDiscoverer.discover(entity); assertThat(creator).isInstanceOf(PreferredConstructor.class); } @@ -82,7 +82,7 @@ class EntityCreatorMetadataDiscovererUnitTests { static class NonStaticFactoryMethod { - @FactoryMethod + @PersistenceCreator public ConstructorPerson of(String firstname, String lastname) { return new ConstructorPerson(firstname, lastname); } @@ -102,7 +102,7 @@ class EntityCreatorMetadataDiscovererUnitTests { return new FactoryMethodsPerson(firstname, "unknown"); } - @FactoryMethod + @PersistenceCreator public static FactoryMethodsPerson of(String firstname, String lastname) { return new FactoryMethodsPerson(firstname, lastname); } diff --git a/src/test/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProviderUnitTests.java b/src/test/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProviderUnitTests.java index 4a474f26c..4c17e2901 100755 --- a/src/test/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProviderUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProviderUnitTests.java @@ -56,7 +56,7 @@ class PersistentEntityParameterValueProviderUnitTests

{ + assertThat(entity.getInstanceCreatorMetadata()).satisfies(constructor -> { Iterator> iterator = constructor.getParameters().iterator(); ParameterValueProvider

provider = new PersistentEntityParameterValueProvider<>(entity, propertyValueProvider, @@ -75,7 +75,7 @@ class PersistentEntityParameterValueProviderUnitTests

provider = new PersistentEntityParameterValueProvider<>(entity, propertyValueProvider, Optional.of(property)); - assertThat(entity.getEntityCreator()) + assertThat(entity.getInstanceCreatorMetadata()) .satisfies(constructor -> assertThatExceptionOfType(MappingException.class)// .isThrownBy(() -> provider.getParameterValue(constructor.getParameters().iterator().next()))// .withMessageContaining("bar")// diff --git a/src/test/java/org/springframework/data/mapping/model/ReflectionEntityInstantiatorUnitTests.java b/src/test/java/org/springframework/data/mapping/model/ReflectionEntityInstantiatorUnitTests.java index b5ba63c48..77ad0a1b3 100755 --- a/src/test/java/org/springframework/data/mapping/model/ReflectionEntityInstantiatorUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/model/ReflectionEntityInstantiatorUnitTests.java @@ -69,7 +69,7 @@ class ReflectionEntityInstantiatorUnitTests

> { PreferredConstructor constructor = PreferredConstructorDiscoverer.discover(Foo.class); - doReturn(constructor).when(entity).getEntityCreator(); + doReturn(constructor).when(entity).getInstanceCreatorMetadata(); Object instance = INSTANCE.createInstance(entity, provider); @@ -92,7 +92,7 @@ class ReflectionEntityInstantiatorUnitTests

> { void createsInnerClassInstanceCorrectly() { BasicPersistentEntity entity = new BasicPersistentEntity(from(Inner.class)); - assertThat(entity.getEntityCreator()).satisfies(it -> { + assertThat(entity.getInstanceCreatorMetadata()).satisfies(it -> { Parameter parameter = it.getParameters().iterator().next(); diff --git a/src/test/kotlin/org/springframework/data/convert/KotlinClassGeneratingEntityInstantiatorUnitTests.kt b/src/test/kotlin/org/springframework/data/convert/KotlinClassGeneratingEntityInstantiatorUnitTests.kt index b06348ce1..7f542cff3 100644 --- a/src/test/kotlin/org/springframework/data/convert/KotlinClassGeneratingEntityInstantiatorUnitTests.kt +++ b/src/test/kotlin/org/springframework/data/convert/KotlinClassGeneratingEntityInstantiatorUnitTests.kt @@ -45,7 +45,7 @@ class KotlinClassGeneratingEntityInstantiatorUnitTests { val constructor = PreferredConstructorDiscoverer.discover(Contact::class.java) every { provider.getParameterValue(any()) }.returnsMany("Walter", "White") - every { entity.entityCreator } returns constructor + every { entity.instanceCreatorMetadata } returns constructor every { entity.type } returns constructor.constructor.declaringClass every { entity.typeInformation } returns mockk() @@ -67,7 +67,7 @@ class KotlinClassGeneratingEntityInstantiatorUnitTests { null, null, null, null, null, null, null, null, null, null, /* 20-29 */ null, "Walter", null, "Junior", null) - every { entity.entityCreator } returns constructor + every { entity.instanceCreatorMetadata } returns constructor every { entity.type } returns constructor.constructor.declaringClass every { entity.typeInformation } returns mockk() @@ -88,7 +88,7 @@ class KotlinClassGeneratingEntityInstantiatorUnitTests { val constructor = PreferredConstructorDiscoverer.discover(WithBoolean::class.java) every { provider.getParameterValue(any()) } returns null - every { entity.entityCreator } returns constructor + every { entity.instanceCreatorMetadata } returns constructor every { entity.type } returns constructor.constructor.declaringClass every { entity.typeInformation } returns mockk() @@ -112,7 +112,7 @@ class KotlinClassGeneratingEntityInstantiatorUnitTests { every { provider.getParameterValue(any()) } returns null every { provider.getParameterValue(any()) } returns null every { provider.getParameterValue(any()) } returns null - every { entity.entityCreator } returns constructor + every { entity.instanceCreatorMetadata } returns constructor every { entity.type } returns constructor.constructor.declaringClass every { entity.typeInformation } returns mockk() @@ -135,7 +135,7 @@ class KotlinClassGeneratingEntityInstantiatorUnitTests { val constructor = PreferredConstructorDiscoverer.discover(CustomUser::class.java) every { provider.getParameterValue(any()) } returns "Walter" - every { entity.entityCreator } returns constructor + every { entity.instanceCreatorMetadata } returns constructor every { entity.type } returns constructor.constructor.declaringClass every { entity.typeInformation } returns mockk() diff --git a/src/test/kotlin/org/springframework/data/convert/ReflectionEntityInstantiatorDataClassUnitTests.kt b/src/test/kotlin/org/springframework/data/convert/ReflectionEntityInstantiatorDataClassUnitTests.kt index 8a1ac61dc..f68fc8892 100644 --- a/src/test/kotlin/org/springframework/data/convert/ReflectionEntityInstantiatorDataClassUnitTests.kt +++ b/src/test/kotlin/org/springframework/data/convert/ReflectionEntityInstantiatorDataClassUnitTests.kt @@ -42,7 +42,7 @@ class ReflectionEntityInstantiatorDataClassUnitTests { val constructor = PreferredConstructorDiscoverer.discover(Contact::class.java) every { provider.getParameterValue(any()) }.returnsMany("Walter", "White") - every { entity.entityCreator } returns constructor + every { entity.instanceCreatorMetadata } returns constructor val instance: Contact = ReflectionEntityInstantiator.INSTANCE.createInstance(entity, provider) @@ -57,7 +57,7 @@ class ReflectionEntityInstantiatorDataClassUnitTests { val constructor = PreferredConstructorDiscoverer.discover(ContactWithDefaulting::class.java) every { provider.getParameterValue(any()) }.returnsMany("Walter", null) - every { entity.entityCreator } returns constructor + every { entity.instanceCreatorMetadata } returns constructor val instance: ContactWithDefaulting = ReflectionEntityInstantiator.INSTANCE.createInstance(entity, provider)