docs: private ArrayList<String> orderMethodLevelInterceptors(Method m) // d630717
      throws EJBConfigurationException
      {
          // Create the default ordering of class level interceptor names
          // for this EJB.
          ArrayList<String> orderedList = new ArrayList<String>();
  
          // Find the InterceptorBinding for the method.
          EJBInterceptorBinding binding = findInterceptorBindingForMethod(m);
  
          // Determine if class interceptors are disabled for this method.
          boolean excludeClassInterceptors = isClassInterceptorsExcluded(m, binding);
  
          // Determine if default interceptors need to be disabled for this method.
          boolean excludeDefaultInterceptors = isDefaultInterceptorsExcluded(m, binding);
  
          // Determine if there are any method-level interceptor classes for this method.
          ArrayList<String> interceptors = addMethodLevelInterceptors(m, binding);
  
          // d630717 - Per CTS, we must use the class-level interceptor order.  The
          // spec is silent on the topic, but it seems reasonable to do so if we
          // are not excluding class-level interceptors and method-level agrees
          // with class-level about whether or not to exclude default interceptors.
          if (!excludeClassInterceptors && excludeDefaultInterceptors == ivExcludeDefaultFromClassLevel)
          {
              orderedList.addAll(ivClassInterceptorOrder);
          }
          else
          {
              // First add default interceptor names if they are not excluded.
              if (!excludeDefaultInterceptors)
              {
                  orderedList.addAll(ivDefaultInterceptorNames);
              }
  
              // Now add in the class level interceptors.
              if (!excludeClassInterceptors)
              {
                  orderedList.addAll(ivClassInterceptorNames);
              }
          }
  
          // Now add in the method-level interceptors.
          orderedList.addAll(interceptors);
  
          // Now check whether order is overridden by a <interceptor-order> deployment
          // descriptor for this EJB.
          if (binding != null && !binding.ivInterceptorOrder.isEmpty()) // d630717
          {
              List<String> order = binding.ivInterceptorOrder; // d630717
  
              // d630717 - Ensure that every class in the order can be loaded.
              updateNamesToClassMap(order);
  
              // d472972 start
              // Yep, default order is being overridden.  Verify the <interceptor-order> is
              // a complete ordering of the interceptors.
              ArrayList<String> interceptorOrder = new ArrayList<String>(order);
              if (interceptorOrder.containsAll(orderedList))
              {
                  // The order list is complete, so just use the order that was
                  // provided by the interceptor-order deployment descriptor.
                  orderedList = interceptorOrder;
              }
              else
              {
                  List<String> missingList;
                  if (interceptorOrder.size() < orderedList.size())
                  {
                      orderedList.removeAll(interceptorOrder);
                      missingList = orderedList;
                  }
                  else
                  {
                      interceptorOrder.removeAll(orderedList);
                      missingList = interceptorOrder;
                  }
  
                  // CNTR0228E: The {2} enterprise bean specifies method-level interceptors for the
                  // {1} method with the following interceptor-order list: {0}.  This list is not a
                  // total ordering of the method-level interceptors for this bean.  The list is missing
                  // the following interceptor names: {3}.
                  String ejbName = ivJ2EEName.toString();
                  String methodName = m.getName(); // d630717
                  Object[] data = new Object[] { ejbName, methodName, order, missingList };
                  Tr.warning(tc, "PARTIAL_METHOD_INTERCEPTOR_ORDER_CNTR0228E", data);
                  throw new EJBConfigurationException(order + " is not a total ordering of method-level interceptors for method "
                                                      + methodName + " of EJB " + ejbName + ". It is missing interceptor names: " + missingList);
              }
              // d472972 end
          }
  
          return orderedList;
      }