docs: private void processMethodMetadata(BeanMetaData bmd,
                                         ByteCodeMetaData byteCodeMetaData,
                                         int beanType,
                                         List<ContainerTransaction> transactionList,
                                         List<MethodPermission> securityList,
                                         ExcludeList excludeList,
                                         List<ActivitySessionMethod> activitySessionList,
                                         Method[] localBeanMethods,
                                         Method[] remoteBeanMethods,
                                         Method[] timerMethods,
                                         Method[] webserviceMethods,
                                         Method[] localHomeMethods,
                                         Method[] remoteHomeMethods,
                                         Method[] implMethods) // d494984
                      throws EJBConfigurationException {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
  
          if (isTraceOn && tc.isEntryEnabled()) {
              Tr.entry(tc, "processMethodMetadata");
          }
  
          //------------------------------------------------------------------------
          // Build up all the method level metadata objects.  This
          // code must come after we have finished the specific processing
          // for each bean type in finishBMDInit.
          //
          // Note that remove() method level attributes are initialized
          // as follows:
          //
          //  - for entity beans, just use default transaction attr
          //  - for session beans,
          //      if they use TX_BEAN_MANAGED then
          //        use TX_BEAN_MANAGED
          //      else
          //        use TX_NOT_SUPPORTED
          //------------------------------------------------------------------------
  
          if (bmd.remoteInterfaceClass != null ||
              bmd.ivBusinessRemoteInterfaceClasses != null) {
              // f111627 Begin
              //---------------------------------------------------------------------
              // Determine method level metadata (include place-holder
              // for remove() ) for Remote methods.
              //---------------------------------------------------------------------
              initializeBeanMethodMD(beanType == Entity_Type,
                                     MethodInterface.REMOTE, // d162441
                                     bmd.remoteInterfaceClass,
                                     bmd.ivBusinessRemoteInterfaceClasses, // F743-24429
                                     remoteBeanMethods, // d366807
                                     implMethods, // d494984
                                     BeanMetaData.entityRemoteNoTxAttrMethods,
                                     BeanMetaData.entityRemoteNoTxAttrMethodSignatures, //PQ63130
                                     bmd.accessIntentList,
                                     bmd.isoLevelList,
                                     transactionList,
                                     securityList,
                                     excludeList,
                                     activitySessionList,
                                     bmd,
                                     byteCodeMetaData).postProcessRemoteBeanMethodData(bmd); // d115551
          }
  
          if (bmd.localInterfaceClass != null ||
              bmd.ivBusinessLocalInterfaceClasses != null) {
              //--------------------------------------------------------
              // Determine method level metadata (include place-holder
              // for remove() ) for Local methods.
              //--------------------------------------------------------
              initializeBeanMethodMD(beanType == Entity_Type,
                                     (bmd.type == InternalConstants.TYPE_MESSAGE_DRIVEN) ? MethodInterface.MESSAGE_LISTENER : MethodInterface.LOCAL, // d162441
                                     bmd.localInterfaceClass,
                                     bmd.ivBusinessLocalInterfaceClasses, // F743-24429
                                     localBeanMethods, // d366807
                                     implMethods, // d494984
                                     BeanMetaData.entityLocalNoTxAttrMethods,
                                     BeanMetaData.entityLocalNoTxAttrMethodSignatures, //PQ63130
                                     bmd.accessIntentList,
                                     bmd.isoLevelList,
                                     transactionList,
                                     securityList,
                                     excludeList,
                                     activitySessionList,
                                     bmd,
                                     byteCodeMetaData).postProcessLocalBeanMethodData(bmd); // d115551
          }
  
          if (timerMethods != null) {
              // -----------------------------------------------------------------
              // Determine method level metadata (include place-holder
              // for remove() ) for TimedObject methods.                 LI2281.07
              // -----------------------------------------------------------------
              initializeBeanMethodMD(beanType == Entity_Type,
                                     MethodInterface.TIMED_OBJECT,
                                     BeanMetaData.svTimedObjectClass,
                                     null,
                                     timerMethods,
                                     implMethods, // d494984
                                     BeanMetaData.entityLocalNoTxAttrMethods,
                                     BeanMetaData.entityLocalNoTxAttrMethodSignatures,
                                     bmd.accessIntentList,
                                     bmd.isoLevelList,
                                     transactionList,
                                     securityList,
                                     excludeList,
                                     activitySessionList,
                                     bmd,
                                     byteCodeMetaData).postProcessTimedBeanMethodData(bmd);
  
              //F743-15870
              //Currently, the EJBMethodInfoImpl.ivNumberOfParms variable we set here
              //is only needed to invoke timer callback methods.  If it's ever needed
              //elsewhere, we may need to move this logic into a more common location.
              for (EJBMethodInfoImpl ejbMethodInfoImpl : bmd.timedMethodInfos) {
                  ejbMethodInfoImpl.setNumberOfMethodParms(ejbMethodInfoImpl.getMethod().getParameterTypes().length);
              }
          }
  
          if (bmd.ivHasWebServiceEndpoint) {
              // --------------------------------------------------------------------
              // Determine method level metadata (include place-holder
              // for remove() ) for WebService Endpoint methods.            LI2281.24
              // --------------------------------------------------------------------
              initializeBeanMethodMD(beanType == Entity_Type,
                                     MethodInterface.SERVICE_ENDPOINT,
                                     bmd.webserviceEndpointInterfaceClass,
                                     null,
                                     webserviceMethods, // d366807
                                     implMethods, // d494984
                                     BeanMetaData.entityLocalNoTxAttrMethods,
                                     BeanMetaData.entityLocalNoTxAttrMethodSignatures,
                                     bmd.accessIntentList,
                                     bmd.isoLevelList,
                                     transactionList,
                                     securityList,
                                     excludeList,
                                     activitySessionList,
                                     bmd,
                                     byteCodeMetaData).postProcessWebserviceBeanMethodData(bmd);
          }
  
          if (bmd.type != InternalConstants.TYPE_MESSAGE_DRIVEN) {
              if (bmd.homeInterfaceClass != null) {
                  //--------------------------------------------------------
                  // Determine method level metadata for Remote home methods.
                  //--------------------------------------------------------
                  initializeHomeMethodMD(beanType == Entity_Type,
                                         MethodInterface.HOME, // d162441
                                         remoteHomeMethods,
                                         BeanMetaData.sessionRemoteHomeNoTxAttrMethods,
                                         BeanMetaData.sessionRemoteHomeNoTxAttrMethodSignatures, //PQ63130
                                         BeanMetaData.entityRemoteHomeNoTxAttrMethods,
                                         BeanMetaData.entityRemoteHomeNoTxAttrMethodSignatures, //PQ63130
                                         bmd.accessIntentList,
                                         bmd.isoLevelList,
                                         transactionList,
                                         securityList,
                                         excludeList,
                                         activitySessionList,
                                         bmd).postProcessRemoteHomeMethodData(bmd); // d115551
              }
  
              if (bmd.localHomeInterfaceClass != null) {
                  //--------------------------------------------------------
                  // Determine method level metadata for Local home methods.
                  //--------------------------------------------------------
                  initializeHomeMethodMD(beanType == Entity_Type,
                                         MethodInterface.LOCAL_HOME, // d162441
                                         localHomeMethods,
                                         BeanMetaData.sessionLocalHomeNoTxAttrMethods,
                                         BeanMetaData.sessionLocalHomeNoTxAttrMethodSignatures, //PQ63130
                                         BeanMetaData.entityLocalHomeNoTxAttrMethods,
                                         BeanMetaData.entityLocalHomeNoTxAttrMethodSignatures, //PQ63130
                                         bmd.accessIntentList,
                                         bmd.isoLevelList,
                                         transactionList,
                                         securityList,
                                         excludeList,
                                         activitySessionList,
                                         bmd).postProcessLocalHomeMethodData(bmd); // d115551
              }
          }
          // f111627 End
  
          //------------------------------------------------------------------------
          // Now that we have built up all the method level metadata objects,
          // determine if any methods are CMR set methods.  CMR set methods
          // may only be exposed on the Local Interface of CMP 2.x beans.
          // If CMR set methods are found, we update the corresponding
          // method info object(s)                                        d184523
          //------------------------------------------------------------------------
          if (bmd.localMethodInfos != null &&
              bmd.cmpVersion == InternalConstants.CMP_VERSION_2_X) {
              Relationships relationships = bmd.wccm.ejbjar.getRelationshipList();
              List<CMRField> cmrFields = new ArrayList<CMRField>();
              if (relationships != null) {
                  for (EJBRelation rel : relationships.getEjbRelations()) {
                      for (EJBRelationshipRole role : rel.getRelationshipRoles()) {
                          if (role.getSource().getEntityBeanName().equals(bmd.enterpriseBeanName)) {
                              CMRField cmrField = role.getCmrField();
                              if (cmrField != null) {
                                  cmrFields.add(cmrField);
                              }
                          }
                      }
                  }
              }
  
              int cmrFieldSize = cmrFields.size();
              if (cmrFieldSize > 0) {
                  // First, build a list of all CMR set method names.
                  ArrayList<String> cmrSetters = new ArrayList<String>();
                  for (int i = 0; i < cmrFieldSize; i++) {
                      CMRField cmrField = cmrFields.get(i);
                      String name = cmrField.getName();
                      cmrSetters.add("set" + Character.toUpperCase(name.charAt(0)) + name.substring(1));
                  }
  
                  // Loop through all local method names, looking for a match
                  for (int i = 0; i < bmd.localMethodInfos.length && !cmrSetters.isEmpty(); i++) {
                      String methodName = bmd.localMethodInfos[i].getName();
                      if (methodName.startsWith("set")) {
                          for (int j = 0; j < cmrSetters.size(); j++) {
                              if (methodName.equals(cmrSetters.get(j))) {
                                  if (isTraceOn && tc.isDebugEnabled())
                                      Tr.debug(tc, methodName + " is a CMR Set Method");
  
                                  // mark it as a cmr set method
                                  bmd.localMethodInfos[i].isCMRSetMethod = true;
  
                                  // remove from list to improve performance
                                  cmrSetters.remove(j);
                                  break;
                              }
                          }
                      }
                  }
              }
          } // CMR method calulations
  
          if (isTraceOn && tc.isEntryEnabled()) {
              Tr.exit(tc, "processMethodMetadata");
          }
  
      }