@SuppressWarnings("unchecked")
	private void doRegisterServiceProvided(Class<?> interfaceClass, Object service,
			boolean dynamicRegister) {
		Objects.requireNonNull(service,
			"Service instance can not be null! Interface: " + interfaceClass.getName());
//		#if ( can_do_strict_checking_of_service_registration )
//		if (constructorFinished && !dynamicRegister) {
//			throw new IllegalArgumentException(
//				"Services must be registered during Plugin constructor: " + interfaceClass + ", " +
//					getName());
//		}
//		#endif
		if (!pluginDescription.getServicesProvided().contains(interfaceClass)) {
//		#if ( can_do_strict_checking_of_service_registration )
//			throw new IllegalArgumentException(
//				"Services must be advertised in PluginInfo annotation: " + interfaceClass + ", " +
//					getName());
//		#else
			Msg.warn(this, "Services must be advertised in @PluginInfo annotation - service " +
				interfaceClass + "; from plugin " + getName());
//		#endif
		}
		services.add(new ServiceInterfaceImplementationPair(interfaceClass, service));
		if (constructorFinished) {
			tool.addService((Class<Object>) interfaceClass, service);
		}
	}
Registers a service.
<p>
If the constructor isn't finished yet (constructorFinished == false), the service is
just queued up in the services list.
<p>
If the constructor is finished, the service is added to the services list and registered
with the PluginTool's services.
<p>
The {@link #initServices()} handles registering the services queued during the constructor.

@param interfaceClass Class that the service object implements.
@param service Service object instance.
@param dynamicRegister boolean flag that indicates that the service being registered
is being registered during the 'static' initialization phase (using information from
the static {@link PluginDescription}) or in a dynamic manner during runtime.
Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/Plugin.java