private static void findClassesInJar(String jarFilename, String pkgName, Class<?> searchClass,
			HashSet<String> classNames) {

		try (JarFile jarFile = new JarFile(jarFilename)) {

			String pkgPath = pkgName != null ? pkgName.replace('.', JAR_FILE_SEPARATOR) : "";
			if (pkgPath.length() > 0) {
				pkgPath += JAR_FILE_SEPARATOR;
			}
			int lastSepIx = pkgPath.length() - 1;

			Enumeration<JarEntry> entries = jarFile.entries();
			while (entries.hasMoreElements()) {
				JarEntry entry = entries.nextElement();
				String name = entry.getName();
				if (!name.endsWith(".class")) {
					continue; // file is not a class file
				}
				if ((lastSepIx != -1 && name.indexOf(pkgPath) != 0) ||
					name.lastIndexOf(JAR_FILE_SEPARATOR) != lastSepIx) {
					continue; // file not contained within specified package
				}

				String className = createClassName(name, pkgName, JAR_FILE_SEPARATOR);
				if (!classNames.contains(className)) {
					try {
						Class<?> c = Class.forName(className);
						if (isClassOfInterest(c, searchClass)) {
							classNames.add(className);
						}
					}
					catch (Throwable t) {
						continue;
					}
				}
			}
		}
		catch (IOException e) {
			//System.out.println("searchJarFile: " + e);
			return;
		}
	}
Find and add to classNames, all classes within a jar file and the specified package 
which extend or implement the specified searchClass.
@param jarFilename jar filename
@param pkgName name of package
@param searchClass base or interface class to search for.
@param classNames set of unique class names
Ghidra/Framework/Generic/src/main/java/ghidra/util/TestSuiteUtilities.java