private List<Plugin> getPluginsByServiceOrder(int startIndex) {
		List<Plugin> plugins = new ArrayList<>(pluginList.subList(startIndex, pluginList.size()));
		List<Plugin> orderedList = new ArrayList<>(plugins.size());
		while (plugins.size() > 0) {
			int n = plugins.size();
			for (Iterator<Plugin> it = plugins.iterator(); it.hasNext();) {
				Plugin p = it.next();
				if (checkServices(p, plugins)) {
					orderedList.add(p);
					it.remove();
				}
			}
			if (n == plugins.size()) {
				showWarning(plugins);
				orderedList.addAll(plugins);
				plugins.clear();
			}
		}
		return orderedList;
	}
Tries to find and pull in the plugin that provides a service.

@param dependency service class that someone depends on
@return boolean true if the dependency was fixed, false if it was not fixed.
Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginManager.java