public synchronized <T> void addService(Class<? extends T> interfaceClass, T service) {
		List<Object> list =
			servicesByInterface.computeIfAbsent(interfaceClass, (k) -> new ArrayList<>());
		if (list.contains(service)) {
			// Note: this can happen if a plugin implements a service it declares and also calls
			// Plugin.registerServiceProvided(), which is a mistake, since the plugin will get
			// auto-wired when it implements the service interface.
			throw new AssertException(
				"The same Service implementation cannot be added more than once.  Interface: " +
					interfaceClass + ". Service: " + service);
		}

		list.add(service);
		if (notifyAdd) {
			notifyServiceAdded(interfaceClass, service);
		}
		else {
			notifications.add(new Object[] { interfaceClass, service });
		}
	}
Add the service to the tool. Notify the service listeners if the
notification indicator is true; otherwise, add the service to a list
that will be used to notify listeners when notifications are
turned on again.
@param interfaceClass class of the service interface being added
@param service implementation of the service; it may be a plugin or
may be some object created by the plugin

@see #setServiceAddedNotificationsOn(boolean)
Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/mgr/ServiceManager.java