docs: private com.ibm.ws.javaee.ddmodel.webext.WebExtComponentImpl getConfigOverrides(
          OverlayContainer overlay,
          ArtifactContainer artifactContainer) throws UnableToAdaptException {
  
          // No match is possible, and no errors are possible, when there are no
          // web extension configuration overrides.
  
          if ( (configurations == null) || configurations.isEmpty() ) {
            return null;
          }
  
          // Maybe application information is directly available ...
          ApplicationInfo appInfo = (ApplicationInfo)
              overlay.getFromNonPersistentCache(artifactContainer.getPath(), ApplicationInfo.class);
  
          // Or, maybe module information is available and application information can
          // be obtained from that ...
          ModuleInfo moduleInfo = null;
          if ( appInfo == null ) {
              moduleInfo = (ModuleInfo) overlay.getFromNonPersistentCache(artifactContainer.getPath(), ModuleInfo.class);
              if ( moduleInfo == null ) {
                 return null;
              }
              appInfo = moduleInfo.getApplicationInfo();
              if ( appInfo == null ) {
                  return null;
              }
          }
  
          // Need a configuration helper ... but that is only available
          // if the application information is of supported type.
          if ( !(appInfo instanceof ExtendedApplicationInfo) ) {
              return null;
          }
  
          NestedConfigHelper configHelper = ((ExtendedApplicationInfo) appInfo).getConfigHelper();
          if ( configHelper == null ) {
            return null;
          }
  
          // If the module is a bare module, it's overlay is the root overlay.
          // If the module is nested, the root overlay is the parent of the
          // module's overlay.
          //
          // The root overlay is used for marking web extension override errors:
          // The errors, "module.name.invalid" and "module.name.not.specified"
          // are possible.  Note that each of these is recorded at most once,
          // regardless of how many invalid overrides are present.
  
          OverlayContainer rootOverlay = overlay;
          if ( overlay.getParentOverlay() != null ) {
              rootOverlay = overlay.getParentOverlay();
          }
  	  
          // The configurations were injected by the service machinery.
          // Loop through these to fine one which matches the target module name.
          // Generate errors along the way.
          //
          // What errors are generated depends on the order of processing.
          //
          // A web extension override which does not have a name is invalid, but
          // that won't be detected unless there is a module which matches an override
          // which follows the invalid override.
          //
          // Note that at most one error is generated, regardless of how many web
          // module overrides are missing module names.
  
          Set<String> overrideModuleNames = new HashSet<String>();
  
          String servicePid = (String) configHelper.get("service.pid");
          String extendsPid = (String) configHelper.get("ibm.extends.source.pid");
  
          for ( com.ibm.ws.javaee.dd.webext.WebExt config : configurations ) {
              com.ibm.ws.javaee.ddmodel.webext.WebExtComponentImpl configImpl =
                  (com.ibm.ws.javaee.ddmodel.webext.WebExtComponentImpl) config;
  
              String parentPid = (String) configImpl.getConfigAdminProperties().get("config.parentPID");
              if ( !servicePid.equals(parentPid) && !parentPid.equals(extendsPid)) {
                  continue;
              }
  
              if ( moduleInfo == null ) {
                  return configImpl;
              }
  
              // Try to match the web extension overrides to the current module based on
              // the module name.
              //
              // Build up a list of the web extension override module names.  Those are
              // are used if no matching override is found for the current module.
              //
              // A web extension override must supply a module name.  If one is detected,
              // emit an error, and continue on to the next override.
  
              String overrideModuleName = (String) configImpl.getConfigAdminProperties().get("moduleName");
              if ( overrideModuleName == null ) {
                  if ( markError(rootOverlay, MODULE_NAME_NOT_SPECIFIED) ) {
                      Tr.error(tc, "module.name.not.specified", "web-ext" );
                  }
                  continue;
              }
              overrideModuleName = stripExtension(overrideModuleName);
              overrideModuleNames.add(overrideModuleName);
  
              if ( moduleInfo.getName().equals(overrideModuleName) ) {
                  return configImpl;
              }
          }
  
          // If we got this far, no matching override was located.
          //
          // Not finding a web extension override is considered to be an error --
          // if there are any web extension overrides which are specified to
          // modules not named in the application descriptor.
  
          if ( (moduleInfo != null) && !overrideModuleNames.isEmpty() ) {
              if ( markError(rootOverlay, MODULE_NAME_INVALID) ) {
                  Application appDD = appInfo.getContainer().adapt(Application.class);
                  if ( appDD != null ) {
                      Set<String> moduleDDNames = new HashSet<String>();
                      for ( Module moduleDD : appDD.getModules() ) {
                          String moduleDDName = stripExtension( moduleDD.getModulePath() );
                          moduleDDNames.add(moduleDDName);
                      }
                      overrideModuleNames.removeAll(moduleDDNames);
                  }
  
                  if ( !overrideModuleNames.isEmpty() ) {
                      Tr.error(tc, "module.name.invalid", overrideModuleNames, "web-ext");
                  }
              }
          }
  
          return null;
      }