Uploaded image for project: 'Commons Lang'
  1. Commons Lang
  2. LANG-1597

Invocation fails because matching varargs method found but then discarded

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 3.11
    • None
    • lang.reflect.*
    • None

    Description

      getMatchingAccessibleMethod(Class<?>, String, Class<?>...) is able to find proper match for a method to call but then discards it.

      Consider the situation you have a varargs method like Baz.foo(X... X). We call getMatchingAccessibleMethod(Baz.class, "foo", z where z instance of Z extends Y extends X. getMatchingAccessibleMethod finds foo as the candidate, but then discards it because for varargs, it requires either the argument is directly is of type X or that the supertype of the argument X. It does not properly check the entire inheritance hierarchy in this code (3.11):

              if (bestMatch != null && bestMatch.isVarArgs() && bestMatch.getParameterTypes().length > 0 && parameterTypes.length > 0) {
                  final Class<?>[] methodParameterTypes = bestMatch.getParameterTypes();
                  final Class<?> methodParameterComponentType = methodParameterTypes[methodParameterTypes.length - 1].getComponentType();
                  final String methodParameterComponentTypeName = ClassUtils.primitiveToWrapper(methodParameterComponentType).getName();
      
                  final Class<?> lastParameterType = parameterTypes[parameterTypes.length - 1];
                  final String parameterTypeName = (lastParameterType==null) ? null : lastParameterType.getName();
                  final String parameterTypeSuperClassName = (lastParameterType==null) ? null : lastParameterType.getSuperclass().getName();
      
                  if (parameterTypeName!= null && parameterTypeSuperClassName != null && !methodParameterComponentTypeName.equals(parameterTypeName)
                          && !methodParameterComponentTypeName.equals(parameterTypeSuperClassName)) {
                      return null;
                  }
              }
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            rec Richard Eckart de Castilho
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated: