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