docs: protected void registerProviders(Collection<?> theProviders, boolean inInit) {
  		Validate.noNullElements(theProviders, "theProviders must not contain any null elements");
  
  		List<IResourceProvider> newResourceProviders = new ArrayList<>();
  		List<Object> newPlainProviders = new ArrayList<>();
  		ProvidedResourceScanner providedResourceScanner = new ProvidedResourceScanner(getFhirContext());
  
  		if (theProviders != null) {
  			for (Object provider : theProviders) {
  				if (provider instanceof IResourceProvider) {
  					IResourceProvider rsrcProvider = (IResourceProvider) provider;
  					Class<? extends IBaseResource> resourceType = rsrcProvider.getResourceType();
  					if (resourceType == null) {
  						throw new NullPointerException("getResourceType() on class '" + rsrcProvider.getClass().getCanonicalName() + "' returned null");
  					}
  					if (!inInit) {
  						myResourceProviders.add(rsrcProvider);
  					}
  					providedResourceScanner.scanForProvidedResources(rsrcProvider);
  					newResourceProviders.add(rsrcProvider);
  				} else {
  					if (!inInit) {
  						myPlainProviders.add(provider);
  					}
  					newPlainProviders.add(provider);
  				}
  
  			}
  			if (!newResourceProviders.isEmpty()) {
  				ourLog.info("Added {} resource provider(s). Total {}", newResourceProviders.size(), myResourceProviders.size());
  				for (IResourceProvider provider : newResourceProviders) {
  					findResourceMethods(provider);
  				}
  			}
  			if (!newPlainProviders.isEmpty()) {
  				ourLog.info("Added {} plain provider(s). Total {}", newPlainProviders.size(), myPlainProviders.size());
  				for (Object provider : newPlainProviders) {
  					findResourceMethods(provider);
  				}
  			}
  			if (!inInit) {
  				ourLog.trace("Invoking provider initialize methods");
  				if (!newResourceProviders.isEmpty()) {
  					for (IResourceProvider provider : newResourceProviders) {
  						invokeInitialize(provider);
  					}
  				}
  				if (!newPlainProviders.isEmpty()) {
  					for (Object provider : newPlainProviders) {
  						invokeInitialize(provider);
  					}
  				}
  			}
  		}
  	}