docs: private void processFilterMappingConfig(DeploymentDescriptor webDD, FilterMapping filterMapping, boolean defer, int index) {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "processFilterMappingConfig", "webDD [ " + webDD + " ] defer [ " + defer + " ] index [ " + index + " ]");
          } 
          String filterName = filterMapping.getFilterName();
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "processFilterMappingConfig: filterName [ " + filterName + " ]");
          } 
          Map<String, ConfigItem<FilterConfig>> filterMap = configurator.getConfigItemMap("filter");
          ConfigItem<FilterConfig> filterItem = filterMap.get(filterName);
          if (filterItem == null) {
              if(defer){
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, " No filter configuration found for {0}, the filter-mapping configuration in {1} is ignored", filterName, configurator.getLibraryURI());
                  }
                  filterMappingIndexOffset++;
              }
              else if (deferProcessingIncompleteFiltersInWebXML){
                  deferredFilterMappings.add(new MappingIndexPair<FilterMapping, Integer>(filterMapping, filterMappingIndex));
              }
              filterMappingIndex++;
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
                  Tr.exit(tc, "processFilterMappingConfig", "webDD [ " + webDD + " ] defer [ " + defer + " ] index [ " + index + " ]");
              }  
              return;
          }
          filterMappingIndex++;
  
          FilterConfig filterConfig = filterItem.getValue();
          if (filterConfig == null && CDI_CONVERSATION_FILTER.equals(filterName)) {
              // TODO this is a temporary solution until we can come up with a way
              // for CDI to add an implied filter with the name "CDI Conversation Filter"
              // NOTE this temporary solution works hand in hand with
              // com.ibm.ws.cdi.web.WeldConfiguratorHelperFactory.WeldConfigHelper.configureInit()
              // where this empty ConfigItem<IFilterConfig> is created as a place holder.
  
              // First remove the existing placeholder ConfigItem<IFilterConfig> so we can create a proper FilterConfig for it
              filterMap.remove(filterName);
              filterConfig = createCdiConversationFilter(webDD);
          }
          Map<String, ConfigItem<FilterMapping>> filterMappingMap = configurator.getConfigItemMap("filter-mapping");
          ConfigItem<FilterMapping> existedFilterMapping = filterMappingMap.get(filterName);
          if (existedFilterMapping == null) {
              DispatcherType[] dispatcherTypes = getDispatcherTypes(filterMapping);
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "processFilterMappingConfig: existing filter mapping not found");
              } 
              if(defer){
                  addFilterMapping(filterConfig, filterMapping.getURLPattern(), filterMapping.getServletName(),
                                   dispatcherTypes, false, index);                
              }
              else{
                  addFilterMapping(filterConfig, filterMapping.getURLPattern(), filterMapping.getServletName(),
                                   dispatcherTypes, false); 
              }
              filterMappingMap.put(filterName, createConfigItem(filterMapping));
          } else {
              if ((existedFilterMapping.getSource() == ConfigSource.WEB_XML && configurator.getConfigSource() == ConfigSource.WEB_XML)
                  || (existedFilterMapping.getSource() == ConfigSource.WEB_FRAGMENT && configurator.getConfigSource() == ConfigSource.WEB_FRAGMENT)) {
  
                  DispatcherType[] dispatcherTypes = getDispatcherTypes(filterMapping);
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "processFilterMappingConfig: existing filter mapping found");
                  } 
                  addFilterMapping(filterConfig, filterMapping.getURLPattern(), filterMapping.getServletName(),
                                   dispatcherTypes, false); 
              } else if (existedFilterMapping.getSource() == ConfigSource.WEB_XML && configurator.getConfigSource() == ConfigSource.WEB_FRAGMENT) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "filter-mapping for filter {0} is configured in web.xml, the value from web-fragment.xml in {1} is ignored", filterName,
                               configurator.getLibraryURI());
                  }
              } else if (existedFilterMapping.getSource() == ConfigSource.WEB_FRAGMENT && configurator.getConfigSource() == ConfigSource.ANNOTATION) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "filter-mapping for filter {0} is configured in web-fragment.xml from {1}, the value from annotation is ignored", filterName,
                               existedFilterMapping.getLibraryURI());
                  }
              }
          }
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "processFilterMappingConfig", "webDD [ " + webDD + " ] defer [ " + defer + " ] index [ " + index + " ]");
          }  
      }