From 2c538dbb15cbe80e8f172b0f4b8f4ab9c904ca7f Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 25 Jul 2011 21:28:34 +0200 Subject: [PATCH] DATACMNS-56 - PreferredConstructorDiscoverer does not throw an exception in case no preferred constructor is found. --- .../data/mapping/PersistentEntity.java | 2 +- .../model/PreferredConstructorDiscoverer.java | 18 +----------------- .../data/mapping/PersistentEntitySpec.java | 1 - ...referredConstructorDiscovererUnitTests.java | 7 ++++--- 4 files changed, 6 insertions(+), 22 deletions(-) diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/PersistentEntity.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/PersistentEntity.java index 3c9febb01..33738dd57 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/PersistentEntity.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/PersistentEntity.java @@ -21,7 +21,7 @@ public interface PersistentEntity> { /** * Returns the {@link PreferredConstructor} to be used to instantiate objects of this {@link PersistentEntity}. * - * @return must never return {@literal null}. + * @return {@literal null} in case no suitable constructor for automatic construction can be found. */ PreferredConstructor getPreferredConstructor(); diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java index 9f6d23381..3a88c5653 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PreferredConstructorDiscoverer.java @@ -50,8 +50,6 @@ public class PreferredConstructorDiscoverer { */ protected PreferredConstructorDiscoverer(TypeInformation owningType) { - boolean noArgConstructorFound = false; - int numberOfArgConstructors = 0; Class rawOwningType = owningType.getType(); for (Constructor constructor : rawOwningType.getDeclaredConstructors()) { @@ -65,23 +63,9 @@ public class PreferredConstructorDiscoverer { return; } - // No-arg constructor trumps custom ones - if (this.constructor == null || preferredConstructor.isNoArgConstructor()) { + if (preferredConstructor.isNoArgConstructor()) { this.constructor = preferredConstructor; } - - if (preferredConstructor.isNoArgConstructor()) { - noArgConstructorFound = true; - } else { - numberOfArgConstructors++; - } - } - - if (!noArgConstructorFound && numberOfArgConstructors > 1) { - throw new IllegalArgumentException( - String.format("Multiple constructors with arguments found in class %s! Annotate " + - "one with @PersistenceConstructor explicitly to select it to be used in " + - "persistence operations.", rawOwningType.getName())); } } diff --git a/spring-data-commons-core/src/test/java/org/springframework/data/mapping/PersistentEntitySpec.java b/spring-data-commons-core/src/test/java/org/springframework/data/mapping/PersistentEntitySpec.java index 673b87e1f..5585d5f7d 100644 --- a/spring-data-commons-core/src/test/java/org/springframework/data/mapping/PersistentEntitySpec.java +++ b/spring-data-commons-core/src/test/java/org/springframework/data/mapping/PersistentEntitySpec.java @@ -28,6 +28,5 @@ public abstract class PersistentEntitySpec { public static void assertInvariants(PersistentEntity entity) { assertThat(entity.getName(), is(notNullValue())); - assertThat(entity.getPreferredConstructor(), is(notNullValue())); } } diff --git a/spring-data-commons-core/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java b/spring-data-commons-core/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java index d9a73fd87..07a6d0c53 100644 --- a/spring-data-commons-core/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java +++ b/spring-data-commons-core/src/test/java/org/springframework/data/mapping/PreferredConstructorDiscovererUnitTests.java @@ -64,11 +64,12 @@ public class PreferredConstructorDiscovererUnitTests { } - @Test(expected = IllegalArgumentException.class) - public void throwsExceptionForMultipleConstructorsAndNoNoArgConstructorWithoutAnnotation() { + @Test + public void doesNotThrowExceptionForMultipleConstructorsAndNoNoArgConstructorWithoutAnnotation() { - new PreferredConstructorDiscoverer( + PreferredConstructorDiscoverer discoverer = new PreferredConstructorDiscoverer( ClassWithMultipleConstructorsWithoutEmptyOne.class); + assertThat(discoverer.getConstructor(), is(nullValue())); } @Test