From 30de1d55b71c0957ccac876c6981bee3943d9404 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 25 Jul 2011 23:38:18 +0200 Subject: [PATCH] DATACMNS-56 - Tweak to algorithm of PreferredConstructorDiscoverer to pick up single argument-taking constructor. --- .../model/PreferredConstructorDiscoverer.java | 15 ++++++++++++++- .../PreferredConstructorDiscovererUnitTests.java | 1 - 2 files changed, 14 insertions(+), 2 deletions(-) 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 3a88c5653..85a4feeaa 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,6 +50,8 @@ public class PreferredConstructorDiscoverer { */ protected PreferredConstructorDiscoverer(TypeInformation owningType) { + boolean noArgConstructorFound = false; + int numberOfArgConstructors = 0; Class rawOwningType = owningType.getType(); for (Constructor constructor : rawOwningType.getDeclaredConstructors()) { @@ -63,9 +65,20 @@ public class PreferredConstructorDiscoverer { return; } - if (preferredConstructor.isNoArgConstructor()) { + // No-arg constructor trumps custom ones + if (this.constructor == null || preferredConstructor.isNoArgConstructor()) { this.constructor = preferredConstructor; } + + if (preferredConstructor.isNoArgConstructor()) { + noArgConstructorFound = true; + } else { + numberOfArgConstructors++; + } + } + + if (!noArgConstructorFound && numberOfArgConstructors > 1) { + this.constructor = null; } } 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 07a6d0c53..0147e4e4e 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 @@ -19,7 +19,6 @@ import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import java.util.Iterator; -import java.util.List; import org.junit.Test; import org.springframework.data.annotation.PersistenceConstructor;