code: private SortedSet<String> findHandledClasses(ScanResult scanResult, List<ClassInfo> handledTypes) {
  
  		SortedSet<String> classes = new TreeSet<>(String::compareTo);
  
  		handledTypes.forEach(handledType -> {
  			String name = handledType.getName();
  
  			if (handledType.isAnnotation()) {
  				classes.addAll(scanResult.getClassesWithAnnotation(name).getNames());
  				classes.addAll(scanResult.getClassesWithMethodAnnotation(name).getNames());
  				classes.addAll(scanResult.getClassesWithFieldAnnotation(name).getNames());
  			}
  			else if (handledType.isInterface()) {
  				classes.addAll(scanResult.getClassesImplementing(name).getNames());
  			}
  			else {
  				classes.addAll(scanResult.getSubclasses(name).getNames());
  			}
  
  		});
  
  		return classes;
  	}
docs: Find the classes which match the given {@code HandlesTypes} spec.
  
  @param scanResult   The {@link ScanResult} in which the classes are searched.
  @param handledTypes The filter spec as found in the {@code HandlesTypes} annotation.
  @return The {@link SortedSet set} of classes which implement, extend or are annotated with the given classes.