docs: @Override
      public FacesConfig getMetaInfServicesFacesConfig(ExternalContext ectx)
      {
          try
          {
              org.apache.myfaces.config.impl.digester.elements.FacesConfigImpl facesConfig
                      = new org.apache.myfaces.config.impl.digester.elements.FacesConfigImpl();
              org.apache.myfaces.config.impl.digester.elements.FactoryImpl factory
                      = new org.apache.myfaces.config.impl.digester.elements.FactoryImpl();
              
              facesConfig.addFactory(factory);
              
              for (String factoryName : FACTORY_NAMES)
              {
                  List<String> classList = ServiceProviderFinderFactory.getServiceProviderFinder(ectx)
                          .getServiceProviderList(factoryName);
                  
                  for (String className : classList)
                  {
                      if (log.isLoggable(Level.INFO))
                      {
                          log.info("Found " + factoryName + " factory implementation: " + className);
                      }
  
                      if (factoryName.equals(FactoryFinder.APPLICATION_FACTORY))
                      {
                          factory.addApplicationFactory(className);
                      } 
                      else if(factoryName.equals(FactoryFinder.EXCEPTION_HANDLER_FACTORY)) 
                      {
                          factory.addExceptionHandlerFactory(className);
                      } 
                      else if (factoryName.equals(FactoryFinder.EXTERNAL_CONTEXT_FACTORY))
                      {
                          factory.addExternalContextFactory(className);
                      } 
                      else if (factoryName.equals(FactoryFinder.FACES_CONTEXT_FACTORY))
                      {
                          factory.addFacesContextFactory(className);
                      } 
                      else if (factoryName.equals(FactoryFinder.LIFECYCLE_FACTORY))
                      {
                          factory.addLifecycleFactory(className);
                      } 
                      else if (factoryName.equals(FactoryFinder.RENDER_KIT_FACTORY))
                      {
                          factory.addRenderkitFactory(className);
                      } 
                      else if(factoryName.equals(FactoryFinder.TAG_HANDLER_DELEGATE_FACTORY)) 
                      {
                          factory.addTagHandlerDelegateFactory(className);
                      } 
                      else if (factoryName.equals(FactoryFinder.PARTIAL_VIEW_CONTEXT_FACTORY))
                      {
                          factory.addPartialViewContextFactory(className);
                      } 
                      else if(factoryName.equals(FactoryFinder.VISIT_CONTEXT_FACTORY)) 
                      {
                          factory.addVisitContextFactory(className);
                      } 
                      else if(factoryName.equals(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY)) 
                      {
                          factory.addViewDeclarationLanguageFactory(className);
                      }
                      else if(factoryName.equals(FactoryFinder.FLASH_FACTORY)) 
                      {
                          factory.addFlashFactory(className);
                      }
                      else if(factoryName.equals(FactoryFinder.FLOW_HANDLER_FACTORY)) 
                      {
                          factory.addFlowHandlerFactory(className);
                      }
                      else if(factoryName.equals(FactoryFinder.CLIENT_WINDOW_FACTORY)) 
                      {
                          factory.addClientWindowFactory(className);
                      }
                      else if(factoryName.equals(FactoryFinder.FACELET_CACHE_FACTORY)) 
                      {
                          factory.addFaceletCacheFactory(className);
                      }
                      else
                      {
                          throw new IllegalStateException("Unexpected factory name " + factoryName);
                      }
                  }
              }
              return facesConfig;
          }
          catch (Throwable e)
          {
              throw new FacesException(e);
          }
      }