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

Enhance MethodUtils to allow invocation of private methods

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.5
    • Component/s: lang.reflect.*
    • Labels:
      None
    • Environment:

      not environment specific

      Description

      Currently, MethodUtils is restricted to finding and invoking accessible methods. Frequently, developers have a need to test 'private' methods. What I see is that they escalate access to 'protected' in order to more easily provide test coverage for these methods. From a design perspective, this is bad.

      I propose to enhance MethodUtils so that it can easily invoke private methods. I'm not suggesting that developers should do this in production code, merely test code. Much as FieldUtils provides access to private fields via the 'forceAccess' overload on many of its methods. I've copied a utility like this around for years. It would be much more convenient to simply include it with Commons Lang. I propose adding the following overloads to existing methods on MethodUtils.

      public static Object invokeMethod(final Object object, final boolean forceAccess, final String methodName) 
      throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      			
      public static Object invokeMethod(final Object object, final boolean forceAccess, final String methodName, Object... args)
      throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      			
      public static Object invokeMethod(final Object object, final boolean forceAccess, final String methodName, Object[] args, Class<?>[] parameterTypes)
      throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
      

      Furthermore, I propose the following new method for finding private methods patterned after getAccessibleMatchingMethod:

      public static Method getMatchingMethod(final Class<?> cls, final String methodName, final Class<?>... parameterTypes)
      

      I have, in fact, forked your github repository and coded this enhancement as well as unit test coverage for this. I'll add a comment to this ticket once I get a branch in my fork created and the enhancement checked in. Every effort has been made to adhere to your coding conventions. Thanks for looking at this.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                pascalschumacher Pascal Schumacher
                Reporter:
                dashmore Derek C. Ashmore
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: