docs: protected void processInjectionMetaData(ComponentNameSpaceConfiguration compNSConfig,
                                              List<Class<?>> annotatedClasses)
                      throws InjectionException
      {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "processInjectionMetaData: " + compNSConfig.toDumpString());
  
          // Provide the default Naming ObjectFactory implementations if the
          // component has not provided an override.                         d442047
          if (compNSConfig.getIndirectJndiLookupReferenceFactory() == null)
              compNSConfig.setIndirectJndiLookupReferenceFactory(getDefaultIndirectJndiLookupReferenceFactory());
          if (compNSConfig.getResIndirectJndiLookupReferenceFactory() == null)
              compNSConfig.setResIndirectJndiLookupReferenceFactory(getDefaultResIndirectJndiLookupReferenceFactory());
          if (compNSConfig.getResRefReferenceFactory() == null)
              compNSConfig.setResRefReferenceFactory(getDefaultResRefReferenceFactory());
          if (compNSConfig.getResAutoLinkReferenceFactory() == null)
              compNSConfig.setResAutoLinkReferenceFactory(getDefaultResAutoLinkReferenceFactory()); // F48603.9
          if (compNSConfig.getEJBLinkReferenceFactory() == null)
              compNSConfig.setEJBLinkReferenceFactory(getDefaultEJBLinkReferenceFactory());
          if (compNSConfig.getMBLinkReferenceFactory() == null)
              // d703474 - FIXME: we should use a consistent MBLinkReferenceFactory
              // and a per-process MBFactory, but for now, force the injection
              // MBLinkReferenceFactory for client.
              compNSConfig.setMBLinkReferenceFactory(compNSConfig.isClientContainer() ? DEFAULT_MBLinkRefFactory : ivMBLinkRefFactory);
  
          InjectionProcessorContextImpl context = InjectionProcessorContextImpl.get(compNSConfig);
          context.ivJavaNameSpaceContext = compNSConfig.getJavaColonContext(); // d682474
  
          List<InjectionProcessorProvider<?, ?>> providers =
                          new ArrayList<InjectionProcessorProvider<?, ?>>(ivProcessorProviders.values());
          InjectionProcessorManager processorManager = new InjectionProcessorManager(this, compNSConfig, context, providers);
  
          // Extract all the persistence related specification from the deployment
          // description xml.
          processorManager.processXML();
  
          // Populate the injectionTargetMap with the  the annotation information
          // using the registered processors and instance classes
          if (annotatedClasses == null) // F743-33811.1
          {
              if (!compNSConfig.isMetaDataComplete())
              {
                  annotatedClasses = compNSConfig.getInjectionClasses();
              }
              if (annotatedClasses == null)
              {
                  annotatedClasses = Collections.emptyList();
              }
          }
  
          if (!annotatedClasses.isEmpty())
          {
              ClassLoader loader = compNSConfig.getClassLoader();
              if (loader != null)
              {
                  checkAnnotationClasses(loader); // d676633
              }
  
              for (Class<?> annotatedClass : annotatedClasses)
              {
                  processorManager.processAnnotations(annotatedClass);
              }
          }
  
          processorManager.processBindings(); //d500868
  
          // For federated client modules, collect all the client injection targets
          // and make them available to client processes.
          if (compNSConfig.getOwningFlow() == ComponentNameSpaceConfiguration.ReferenceFlowKind.CLIENT &&
              compNSConfig.getClassLoader() == null)
          {
              processClientInjections(compNSConfig, context); // F743-33811.1
          }
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "processInjectionMetaData");
      }