docs: private Set<String> getJarMemberSet(String absolutePathToJar) {
  		/*
  		 * Note:
  		 * Our implementation returns a HashSet. initialCapacity and loadFactor are carefully tweaked for speed and RAM optimization purposes.
  		 * 
  		 * Benchmark:
  		 * The HashSet implementation is about 10% slower to build (only happens once) than the ArrayList.
  		 * The HashSet with shiftBits = 1 was about 33 times(!) faster than the ArrayList for retrievals.
  		 */
  		try {
  			int shiftBits = 1;  //  (fast, but big)  0 <= shiftBits <= 5, say  (slower & compact)
  			JarFile jar = new JarFile(absolutePathToJar);
  			
  			/*
  			 * Find the first power of 2 >= JarSize (as calculated in HashSet constructor)
  			 */
  			int jarSizePower2 = Integer.highestOneBit(jar.size());
  			if (jarSizePower2 != jar.size()) jarSizePower2 <<= 1;
  			if (jarSizePower2 == 0) jarSizePower2 = 1;
  			
  			Set<String> jarMembers = new HashSet<String>(jarSizePower2 >> shiftBits,  1 << shiftBits);
  			try {
  				Enumeration<JarEntry> entries = jar.entries();
  				while (entries.hasMoreElements()) {
  					JarEntry jarEntry = entries.nextElement();
  					if (jarEntry.isDirectory()) continue;
  					jarMembers.add(jarEntry.getName());
  				}
  			} catch (Exception ignore) {
  				// ignored; if the jar can't be read, treating it as if the jar contains no classes is just what we want.
  			} finally {
  				jar.close();
  			}
  			return jarMembers;
  		}
  		catch (Exception newJarFileException) {
  			return Collections.emptySet();
  		}
  	}