From bb7996a094dad472756723056bc564d3870ed421 Mon Sep 17 00:00:00 2001 From: "p.anisimov" Date: Sat, 22 Oct 2022 22:10:11 +0300 Subject: [PATCH 1/3] i-2695: Substitute deprecated PersistenceConstructor with PersistenceCreator in PreferredConstructor --- .../springframework/data/mapping/PreferredConstructor.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/data/mapping/PreferredConstructor.java b/src/main/java/org/springframework/data/mapping/PreferredConstructor.java index 8b0cb8273d..94cf5cfd21 100644 --- a/src/main/java/org/springframework/data/mapping/PreferredConstructor.java +++ b/src/main/java/org/springframework/data/mapping/PreferredConstructor.java @@ -20,7 +20,7 @@ import java.util.List; import org.springframework.core.annotation.MergedAnnotations; -import org.springframework.data.annotation.PersistenceConstructor; +import org.springframework.data.annotation.PersistenceCreator; import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; @@ -34,6 +34,7 @@ * @author Mark Paluch * @author Myeonghyeon Lee * @author Xeno Amess + * @author Pavel Anisimov */ public final class PreferredConstructor> extends InstanceCreatorMetadataSupport { @@ -75,12 +76,12 @@ public boolean isNoArgConstructor() { } /** - * Returns whether the constructor was explicitly selected (by {@link PersistenceConstructor}). + * Returns whether the constructor was explicitly selected (by {@link PersistenceCreator}). * * @return */ public boolean isExplicitlyAnnotated() { - return MergedAnnotations.from(getExecutable()).isPresent(PersistenceConstructor.class); + return MergedAnnotations.from(getExecutable()).isPresent(PersistenceCreator.class); } /** From e6ba5643524888736d2098c72c310f90c7e1a86d Mon Sep 17 00:00:00 2001 From: "p.anisimov" Date: Sat, 22 Oct 2022 22:15:40 +0300 Subject: [PATCH 2/3] i-2695: Simplify PreferredConstructorDiscovererUnitTests --- ...eferredConstructorDiscovererUnitTests.java | 141 ++++++++++-------- 1 file changed, 76 insertions(+), 65 deletions(-) diff --git a/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java b/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java index d5f4b8bfa7..d9b79509f7 100755 --- a/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java @@ -25,7 +25,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Value; -import org.springframework.data.annotation.PersistenceConstructor; import org.springframework.data.annotation.PersistenceCreator; import org.springframework.data.mapping.PreferredConstructorDiscovererUnitTests.Outer.Inner; import org.springframework.data.mapping.model.BasicPersistentEntity; @@ -39,56 +38,58 @@ * @author Roman Rodov * @author Mark Paluch * @author Christoph Strobl + * @author Pavel Anisimov */ class PreferredConstructorDiscovererUnitTests

> { @Test // DATACMNS-1126 void findsNoArgConstructorForClassWithoutExplicitConstructor() { - assertThat(PreferredConstructorDiscoverer.discover(EntityWithoutConstructor.class)).satisfies(constructor -> { + PreferredConstructor constructor = + PreferredConstructorDiscoverer.discover(EntityWithoutConstructor.class); - assertThat(constructor).isNotNull(); - assertThat(constructor.isNoArgConstructor()).isTrue(); - assertThat(constructor.isExplicitlyAnnotated()).isFalse(); - }); + assertThat(constructor).isNotNull(); + assertThat(constructor.isNoArgConstructor()).isTrue(); + assertThat(constructor.isExplicitlyAnnotated()).isFalse(); } @Test // DATACMNS-1126 void findsNoArgConstructorForClassWithMultipleConstructorsAndNoArgOne() { - assertThat(PreferredConstructorDiscoverer.discover(ClassWithEmptyConstructor.class)).satisfies(constructor -> { + PreferredConstructor constructor = + PreferredConstructorDiscoverer.discover(ClassWithEmptyConstructor.class); - assertThat(constructor).isNotNull(); - assertThat(constructor.isNoArgConstructor()).isTrue(); - assertThat(constructor.isExplicitlyAnnotated()).isFalse(); - }); + assertThat(constructor).isNotNull(); + assertThat(constructor.isNoArgConstructor()).isTrue(); + assertThat(constructor.isExplicitlyAnnotated()).isFalse(); } @Test // DATACMNS-1126 void doesNotThrowExceptionForMultipleConstructorsAndNoNoArgConstructorWithoutAnnotation() { - assertThat(PreferredConstructorDiscoverer.discover(ClassWithMultipleConstructorsWithoutEmptyOne.class)).isNull(); + PreferredConstructor constructor = + PreferredConstructorDiscoverer.discover(ClassWithMultipleConstructorsWithoutEmptyOne.class); + + assertThat(constructor).isNull(); } @Test // DATACMNS-1126 - @SuppressWarnings({ "unchecked", "rawtypes" }) void usesConstructorWithAnnotationOverEveryOther() { - assertThat(PreferredConstructorDiscoverer.discover(ClassWithMultipleConstructorsAndAnnotation.class)) - .satisfies(constructor -> { + PreferredConstructor constructor = + PreferredConstructorDiscoverer.discover(ClassWithMultipleConstructorsAndAnnotation.class); - assertThat(constructor).isNotNull(); - assertThat(constructor.isNoArgConstructor()).isFalse(); - assertThat(constructor.isExplicitlyAnnotated()).isTrue(); + assertThat(constructor).isNotNull(); + assertThat(constructor.isNoArgConstructor()).isFalse(); + assertThat(constructor.isExplicitlyAnnotated()).isTrue(); - assertThat(constructor.hasParameters()).isTrue(); + assertThat(constructor.hasParameters()).isTrue(); - Iterator> parameters = (Iterator) constructor.getParameters().iterator(); + Iterator> parameters = constructor.getParameters().iterator(); - Parameter parameter = parameters.next(); - assertThat(parameter.getType().getType()).isEqualTo(Long.class); - assertThat(parameters.hasNext()).isFalse(); - }); + Parameter parameter = parameters.next(); + assertThat(parameter.getType().getType()).isEqualTo(Long.class); + assertThat(parameters.hasNext()).isFalse(); } @Test // DATACMNS-134, DATACMNS-1126 @@ -96,11 +97,12 @@ void discoversInnerClassConstructorCorrectly() { PersistentEntity entity = new BasicPersistentEntity<>(TypeInformation.of(Inner.class)); - assertThat(PreferredConstructorDiscoverer.discover(entity)).satisfies(constructor -> { + PreferredConstructor constructor = + PreferredConstructorDiscoverer.discover(entity); + assertThat(constructor).isNotNull(); - Parameter parameter = constructor.getParameters().iterator().next(); - assertThat(constructor.isParentParameter(parameter)).isTrue(); - }); + Parameter parameter = constructor.getParameters().iterator().next(); + assertThat(constructor.isParentParameter(parameter)).isTrue(); } @Test // DATACMNS-1082, DATACMNS-1126 @@ -109,77 +111,86 @@ void skipsSyntheticConstructor() { PersistentEntity entity = new BasicPersistentEntity<>( TypeInformation.of(SyntheticConstructor.class)); - assertThat(PreferredConstructorDiscoverer.discover(entity)).satisfies(constructor -> { + PreferredConstructor constructor = PreferredConstructorDiscoverer.discover(entity); + assertThat(constructor).isNotNull(); - var annotation = constructor.getConstructor().getAnnotation(PersistenceConstructor.class); - assertThat(annotation).isNotNull(); - assertThat(constructor.getConstructor().isSynthetic()).isFalse(); - }); + var annotation = constructor.getConstructor().getAnnotation(PersistenceCreator.class); + assertThat(annotation).isNotNull(); + assertThat(constructor.getConstructor().isSynthetic()).isFalse(); } @Test // GH-2313 void capturesEnclosingTypeParameterOfNonStaticInnerClass() { - assertThat(PreferredConstructorDiscoverer.discover(NonStaticWithGenericTypeArgUsedInCtor.class)).satisfies(ctor -> { + PreferredConstructor constructor = + PreferredConstructorDiscoverer.discover(NonStaticWithGenericTypeArgUsedInCtor.class); - assertThat(ctor.getParameters()).hasSize(2); - assertThat(ctor.getParameters().get(0).getName()).isEqualTo("this$0"); - assertThat(ctor.getParameters().get(1).getName()).isEqualTo("value"); - }); + assertThat(constructor).isNotNull(); + assertThat(constructor.getParameters()).hasSize(2); + assertThat(constructor.getParameters().get(0).getName()).isEqualTo("this$0"); + assertThat(constructor.getParameters().get(1).getName()).isEqualTo("value"); } @Test // GH-2313 void capturesSuperClassEnclosingTypeParameterOfNonStaticInnerClass() { - assertThat(PreferredConstructorDiscoverer.discover(NonStaticInnerWithGenericArgUsedInCtor.class)) - .satisfies(ctor -> { + PreferredConstructor constructor = + PreferredConstructorDiscoverer.discover(NonStaticInnerWithGenericArgUsedInCtor.class); - assertThat(ctor.getParameters()).hasSize(2); - assertThat(ctor.getParameters().get(0).getName()).isEqualTo("this$0"); - assertThat(ctor.getParameters().get(1).getName()).isEqualTo("value"); - }); + assertThat(constructor).isNotNull(); + assertThat(constructor.getParameters()).hasSize(2); + assertThat(constructor.getParameters().get(0).getName()).isEqualTo("this$0"); + assertThat(constructor.getParameters().get(1).getName()).isEqualTo("value"); } @Test // GH-2332 void detectsMetaAnnotatedValueAnnotation() { - assertThat(PreferredConstructorDiscoverer.discover(ClassWithMetaAnnotatedParameter.class)).satisfies(ctor -> { + PreferredConstructor constructor = + PreferredConstructorDiscoverer.discover(ClassWithMetaAnnotatedParameter.class); - assertThat(ctor.getParameters().get(0).getSpelExpression()).isEqualTo("${hello-world}"); - assertThat(ctor.getParameters().get(0).getAnnotations()).isNotNull(); - }); + assertThat(constructor).isNotNull(); + assertThat(constructor.getParameters().get(0).getSpelExpression()).isEqualTo("${hello-world}"); + assertThat(constructor.getParameters().get(0).getAnnotations()).isNotNull(); } @Test // GH-2332 - void detectsCanonicalRecordConstructor() { + void detectsCanonicalRecordConstructorWhenRecordHasSingleArgConstructor() { + + PreferredConstructor constructor = + PreferredConstructorDiscoverer.discover(RecordWithSingleArgConstructor.class); - assertThat(PreferredConstructorDiscoverer.discover(RecordWithSingleArgConstructor.class)).satisfies(ctor -> { + assertThat(constructor).isNotNull(); + assertThat(constructor.getParameters()).hasSize(2); + assertThat(constructor.getParameters().get(0).getRawType()).isEqualTo(Long.class); + assertThat(constructor.getParameters().get(1).getRawType()).isEqualTo(String.class); + } - assertThat(ctor.getParameters()).hasSize(2); - assertThat(ctor.getParameters().get(0).getRawType()).isEqualTo(Long.class); - assertThat(ctor.getParameters().get(1).getRawType()).isEqualTo(String.class); - }); + @Test // GH-2332 + void detectsCanonicalRecordConstructorWhenRecordHasNoArgConstructor() { - assertThat(PreferredConstructorDiscoverer.discover(RecordWithNoArgConstructor.class)).satisfies(ctor -> { + PreferredConstructor constructor = + PreferredConstructorDiscoverer.discover(RecordWithNoArgConstructor.class); - assertThat(ctor.getParameters()).hasSize(2); - assertThat(ctor.getParameters().get(0).getRawType()).isEqualTo(Long.class); - assertThat(ctor.getParameters().get(1).getRawType()).isEqualTo(String.class); - }); + assertThat(constructor).isNotNull(); + assertThat(constructor.getParameters()).hasSize(2); + assertThat(constructor.getParameters().get(0).getRawType()).isEqualTo(Long.class); + assertThat(constructor.getParameters().get(1).getRawType()).isEqualTo(String.class); } @Test // GH-2332 void detectsAnnotatedRecordConstructor() { - assertThat(PreferredConstructorDiscoverer.discover(RecordWithPersistenceCreator.class)).satisfies(ctor -> { + PreferredConstructor constructor = + PreferredConstructorDiscoverer.discover(RecordWithPersistenceCreator.class); - assertThat(ctor.getParameters()).hasSize(1); - assertThat(ctor.getParameters().get(0).getRawType()).isEqualTo(String.class); - }); + assertThat(constructor).isNotNull(); + assertThat(constructor.getParameters()).hasSize(1); + assertThat(constructor.getParameters().get(0).getRawType()).isEqualTo(String.class); } static class SyntheticConstructor { - @PersistenceConstructor + @PersistenceCreator private SyntheticConstructor(String x) {} class InnerSynthetic { @@ -220,7 +231,7 @@ public ClassWithMultipleConstructorsAndAnnotation() {} public ClassWithMultipleConstructorsAndAnnotation(String value) {} - @PersistenceConstructor + @PersistenceCreator public ClassWithMultipleConstructorsAndAnnotation(Long value) {} } From 8dcf9558c1676b82de04500688f85914542d384f Mon Sep 17 00:00:00 2001 From: "p.anisimov" Date: Sat, 22 Oct 2022 22:20:53 +0300 Subject: [PATCH 3/3] i-2695: Make use of var keyword in PreferredConstructorDiscovererUnitTests --- ...eferredConstructorDiscovererUnitTests.java | 33 +++++++------------ 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java b/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java index d9b79509f7..a8c09b819f 100755 --- a/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java @@ -45,8 +45,7 @@ class PreferredConstructorDiscovererUnitTests

> { @Test // DATACMNS-1126 void findsNoArgConstructorForClassWithoutExplicitConstructor() { - PreferredConstructor constructor = - PreferredConstructorDiscoverer.discover(EntityWithoutConstructor.class); + var constructor = PreferredConstructorDiscoverer.discover(EntityWithoutConstructor.class); assertThat(constructor).isNotNull(); assertThat(constructor.isNoArgConstructor()).isTrue(); @@ -56,8 +55,7 @@ void findsNoArgConstructorForClassWithoutExplicitConstructor() { @Test // DATACMNS-1126 void findsNoArgConstructorForClassWithMultipleConstructorsAndNoArgOne() { - PreferredConstructor constructor = - PreferredConstructorDiscoverer.discover(ClassWithEmptyConstructor.class); + var constructor = PreferredConstructorDiscoverer.discover(ClassWithEmptyConstructor.class); assertThat(constructor).isNotNull(); assertThat(constructor.isNoArgConstructor()).isTrue(); @@ -67,8 +65,7 @@ void findsNoArgConstructorForClassWithMultipleConstructorsAndNoArgOne() { @Test // DATACMNS-1126 void doesNotThrowExceptionForMultipleConstructorsAndNoNoArgConstructorWithoutAnnotation() { - PreferredConstructor constructor = - PreferredConstructorDiscoverer.discover(ClassWithMultipleConstructorsWithoutEmptyOne.class); + var constructor = PreferredConstructorDiscoverer.discover(ClassWithMultipleConstructorsWithoutEmptyOne.class); assertThat(constructor).isNull(); } @@ -97,8 +94,8 @@ void discoversInnerClassConstructorCorrectly() { PersistentEntity entity = new BasicPersistentEntity<>(TypeInformation.of(Inner.class)); - PreferredConstructor constructor = - PreferredConstructorDiscoverer.discover(entity); + var constructor = PreferredConstructorDiscoverer.discover(entity); + assertThat(constructor).isNotNull(); Parameter parameter = constructor.getParameters().iterator().next(); @@ -111,7 +108,7 @@ void skipsSyntheticConstructor() { PersistentEntity entity = new BasicPersistentEntity<>( TypeInformation.of(SyntheticConstructor.class)); - PreferredConstructor constructor = PreferredConstructorDiscoverer.discover(entity); + var constructor = PreferredConstructorDiscoverer.discover(entity); assertThat(constructor).isNotNull(); var annotation = constructor.getConstructor().getAnnotation(PersistenceCreator.class); @@ -122,8 +119,7 @@ void skipsSyntheticConstructor() { @Test // GH-2313 void capturesEnclosingTypeParameterOfNonStaticInnerClass() { - PreferredConstructor constructor = - PreferredConstructorDiscoverer.discover(NonStaticWithGenericTypeArgUsedInCtor.class); + var constructor = PreferredConstructorDiscoverer.discover(NonStaticWithGenericTypeArgUsedInCtor.class); assertThat(constructor).isNotNull(); assertThat(constructor.getParameters()).hasSize(2); @@ -134,8 +130,7 @@ void capturesEnclosingTypeParameterOfNonStaticInnerClass() { @Test // GH-2313 void capturesSuperClassEnclosingTypeParameterOfNonStaticInnerClass() { - PreferredConstructor constructor = - PreferredConstructorDiscoverer.discover(NonStaticInnerWithGenericArgUsedInCtor.class); + var constructor = PreferredConstructorDiscoverer.discover(NonStaticInnerWithGenericArgUsedInCtor.class); assertThat(constructor).isNotNull(); assertThat(constructor.getParameters()).hasSize(2); @@ -146,8 +141,7 @@ void capturesSuperClassEnclosingTypeParameterOfNonStaticInnerClass() { @Test // GH-2332 void detectsMetaAnnotatedValueAnnotation() { - PreferredConstructor constructor = - PreferredConstructorDiscoverer.discover(ClassWithMetaAnnotatedParameter.class); + var constructor = PreferredConstructorDiscoverer.discover(ClassWithMetaAnnotatedParameter.class); assertThat(constructor).isNotNull(); assertThat(constructor.getParameters().get(0).getSpelExpression()).isEqualTo("${hello-world}"); @@ -157,8 +151,7 @@ void detectsMetaAnnotatedValueAnnotation() { @Test // GH-2332 void detectsCanonicalRecordConstructorWhenRecordHasSingleArgConstructor() { - PreferredConstructor constructor = - PreferredConstructorDiscoverer.discover(RecordWithSingleArgConstructor.class); + var constructor = PreferredConstructorDiscoverer.discover(RecordWithSingleArgConstructor.class); assertThat(constructor).isNotNull(); assertThat(constructor.getParameters()).hasSize(2); @@ -169,8 +162,7 @@ void detectsCanonicalRecordConstructorWhenRecordHasSingleArgConstructor() { @Test // GH-2332 void detectsCanonicalRecordConstructorWhenRecordHasNoArgConstructor() { - PreferredConstructor constructor = - PreferredConstructorDiscoverer.discover(RecordWithNoArgConstructor.class); + var constructor = PreferredConstructorDiscoverer.discover(RecordWithNoArgConstructor.class); assertThat(constructor).isNotNull(); assertThat(constructor.getParameters()).hasSize(2); @@ -181,8 +173,7 @@ void detectsCanonicalRecordConstructorWhenRecordHasNoArgConstructor() { @Test // GH-2332 void detectsAnnotatedRecordConstructor() { - PreferredConstructor constructor = - PreferredConstructorDiscoverer.discover(RecordWithPersistenceCreator.class); + var constructor = PreferredConstructorDiscoverer.discover(RecordWithPersistenceCreator.class); assertThat(constructor).isNotNull(); assertThat(constructor.getParameters()).hasSize(1);