code: public static Map<String, Integer> getMethodParameterIndexes(final Method m) {
          if ((GETPARAMETERS == null) || (m == null)) {
              return Collections.emptyMap();
          }
          Map<String, Integer> paramNames = new HashMap<String, Integer>();
          try {
              Object[] params = (Object[]) GETPARAMETERS.invoke(m);
              if (params.length == 0) {
                  return Collections.emptyMap();
              }
              Method getName = findMethodByName(params[0].getClass(), "getName");
              if (getName == null) {
                  return Collections.emptyMap();
              }
              int i = -1;
              for (Object o : params) {
                  ++i;
                  String name = (String) getName.invoke(o);
                  if (name == null) {
                      continue;
                  }
                  paramNames.put(name.toUpperCase(Locale.ENGLISH), i);
              }
              return Collections.unmodifiableMap(paramNames);
          } catch (IllegalArgumentException e) {
              throw new RuntimeException(e);
          } catch (IllegalAccessException e) {
              throw new RuntimeException(e);
          } catch (InvocationTargetException e) {
              throw new RuntimeException(e);
          }
      }
docs: Try to determine the names of the method parameters. Does not work on pre Java 8 jdk and
  given method owner has to be compiled with "-parameters" option. NOTICE: The correct function
  depends on the JVM implementation.
  
  @param m
  @return Empty list if no parameters present or names could not be determined. List of
  parameter names else.