private void addFactory(Class<? extends GFileSystem> fsClass) {
		FileSystemInfoRec fsir = FileSystemInfoRec.fromClass(fsClass);
		if (fsir == null) {
			Msg.error(this, "No valid FileSystemInfo found for " + fsClass.getName());
			return;
		}
		if (fsByType.containsKey(fsir.getType())) {
			FileSystemInfoRec prevFSI = fsByType.get(fsir.getType());
			Msg.error(this,
				"GFileSystem type '" + fsir.getType() + "' registered more than one time: " +
					fsClass.getName() + ", " + prevFSI.getFSClass().getName() +
					", ommitting second instance.");
			return;
		}

		if (fsir.getFactory() instanceof GFileSystemFactoryIgnore) {
			// don't register any filesystem that uses this factory
			return;
		}
		if (fsir.getFactory() instanceof GFileSystemProbeBytesOnly) {
			GFileSystemProbeBytesOnly pbo = (GFileSystemProbeBytesOnly) fsir.getFactory();
			if (pbo.getBytesRequired() > GFileSystemProbeBytesOnly.MAX_BYTESREQUIRED) {
				Msg.error(this,
					"GFileSystemProbeBytesOnly for " + fsClass.getName() +
						" specifies too large value for bytes_required: " + pbo.getBytesRequired() +
						", skipping this probe.");
			}
			else {
				largestBytesRequired = Math.max(largestBytesRequired, pbo.getBytesRequired());
			}
		}

		fsByType.put(fsir.getType(), fsir);
		sortedFactories.add(fsir);
	}
Private constructor.  Use {@link FileSystemFactoryMgr#getInstance()} to retrieve
the singleton.
Ghidra/Features/Base/src/main/java/ghidra/formats/gfilesystem/factory/FileSystemFactoryMgr.java