You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2006/11/07 01:38:21 UTC
svn commit: r471951 -
/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/ModuleImpl.java
Author: hlship
Date: Mon Nov 6 16:38:21 2006
New Revision: 471951
URL: http://svn.apache.org/viewvc?view=rev&rev=471951
Log:
Have a specific policy for what happens when an IoC module has more than one constructor.
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/ModuleImpl.java
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/ModuleImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/ModuleImpl.java?view=diff&rev=471951&r1=471950&r2=471951
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/ModuleImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/ioc/ModuleImpl.java Mon Nov 6 16:38:21 2006
@@ -24,7 +24,9 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -262,15 +264,29 @@
_moduleDef.getModuleId(),
builderClass));
- // Use the first one.
+ if (constructors.length > 1)
+ {
+ // Sort the constructors ascending by number of parameters (descending); this is really
+ // just to allow the test suite to work properly across different JVMs (which will
+ // often order the constructors differently).
+
+ Comparator<Constructor> comparator = new Comparator<Constructor>()
+ {
+ public int compare(Constructor c1, Constructor c2)
+ {
+ return c2.getParameterTypes().length - c1.getParameterTypes().length;
+ }
+ };
- Constructor constructor = constructors[0];
+ Arrays.sort(constructors, comparator);
- if (constructors.length > 1)
_log.warn(IOCMessages.tooManyPublicConstructors(
_moduleDef.getModuleId(),
builderClass,
- constructor));
+ constructors[0]));
+ }
+
+ Constructor constructor = constructors[0];
if (_insideConstructor)
throw new RuntimeException(IOCMessages.recursiveModuleConstructor(_moduleDef