Hi there,

I discovered a bug in the class MethodUtils: when comparing method 
parameters to find a matching method the search is interrupted when 
method parameters don't match, but the non-matching method is still 
returned. When the first method returned by Java is appropriate this bug 
will go unnoticed; it was quite hard to track down...

I fixed it by breaking out of the compare loop and continue with the 
next method candidate as shown in the enclosed patch.

greets,
Klaasjan Brand
--- orig/MethodUtils.java       Wed Apr  3 13:50:22 2002
+++ fix/MethodUtils.java        Wed Apr  3 13:50:34 2002
@@ -504,7 +504,7 @@
         // search through all methods 
         int paramSize = parameterTypes.length;
         Method[] methods = clazz.getMethods();
-        for (int i = 0, size = methods.length; i < size ; i++) {
+        outer: for (int i = 0, size = methods.length; i < size ; i++) {
             if (methods[i].getName().equals(methodName)) {     
                 // log some trace information
                 if (log.isTraceEnabled()) {
@@ -517,12 +517,12 @@
                 int methodParamSize = methodsParams.length;
                 if (methodParamSize == paramSize) {                    
                     for (int n = 0 ; n < methodParamSize; n++) {
-                        if (!parameterTypes[n].isAssignableFrom(methodsParams[n])) {
+                        if (!methodsParams[n].isAssignableFrom(parameterTypes[n])) {
                             if (log.isTraceEnabled()) {
                                 log.trace(parameterTypes[n] + " is not assignable 
from " 
                                             + methodsParams[n]);
                             }    
-                            break;
+                            continue outer;
                         }
                     }
                     

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to