@Override
	public boolean isSubFilterOf(Filter<T> otherFilter) {

		Class<?> clazz = getClass();
		Class<?> otherClazz = otherFilter.getClass();
		if (!clazz.equals(otherClazz)) {
			return false; // must be the same class
		}

		CheckBoxBasedAncillaryFilter<?> otherCheckboxFilter =
			(CheckBoxBasedAncillaryFilter<?>) otherFilter;
		Set<String> names = getEnabledFilterNames();
		Set<String> otherNames = otherCheckboxFilter.getEnabledFilterNames();

		// 
		// This filter is a collection of 'things', that are allowed to pass the filter.   We are
		// only a sub-filter if the other filter has all of our 'things'.  Suppose our filter 
		// consists of: 'cat', 'dog'.  We would then be a sub-filter if the other filter's set 
		// consists of: 'cat', 'dog', and 'mouse', since our items will be in the results of 
		// that filter.
		//
		if (otherNames.containsAll(names)) {
			return true;
		}

		return false;
	}
A basic class to extract out code I was repeating over and over again.  This class creates
a component that contains series of check boxes and can answer questions about filtering.

@param <T> the type of item being filtered
Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/filters/CheckBoxBasedAncillaryFilter.java