code: public void analyzeExecuteArg(Method executeMethod, ExecuteArgBox box) {
          List<Class<?>> pathParamTypeList = null; // lazy loaded
          Parameter formParam = null;
          final Parameter[] parameters = executeMethod.getParameters();
          if (parameters.length > 0) {
              boolean formEnd = false;
              for (Parameter parameter : parameters) {
                  if (formEnd) {
                      throwActionFormNotLastParameterException(executeMethod);
                  }
                  checkNonGenericParameter(executeMethod, parameter);
                  if (isActionFormParameter(parameter)) {
                      formParam = parameter;
                      formEnd = true;
                  } else {
                      if (pathParamTypeList == null) {
                          pathParamTypeList = new ArrayList<Class<?>>(4);
                      }
                      pathParamTypeList.add(parameter.getType());
                  }
              }
          }
          box.setPathParamTypeList(preparePathParamTypeList(pathParamTypeList));
          box.setOptionalGenericTypeMap(prepareOptionalGenericTypeMap(executeMethod));
          box.setRootFormType(prepareRootFormType(formParam));
          box.setListFormParameter(prepareListFormParameter(formParam));
      }
docs: =======