code: public HashMap<String, Class> discoverHandlerClasses(List<String> basePackages) {
          //always include the Chorus handlers package
          HashMap<String, Class> handlerNameToHandlerClass = new HashMap<>();
  
          HandlerAnnotationFilter handlerAnnotationFilter = new HandlerAnnotationFilter();
          ClassFilter filter = new ClassFilterDecorator().decorateWithPackageNameFilters(handlerAnnotationFilter, basePackages);
  
          Set<Class> classes = ClasspathScanner.doScan(filter, log);
          for (Class handlerClass : classes) {
              Handler f = (Handler) handlerClass.getAnnotation(Handler.class);
              String handlerName = f.value();
              if (handlerNameToHandlerClass.containsKey(handlerName)) {
                  String currentHandler = handlerNameToHandlerClass.get(handlerName).getName();
                  String newHandler = handlerClass.getName();
  
                  //since we test the log output, inconsistencies in the order can break the test
                  String handlerTxt = currentHandler.compareTo(newHandler) < 0 ?
                          newHandler + " and " + currentHandler :
                          currentHandler + " and " + newHandler;
  
                  if ( log.isDebugEnabled()) {
                      log.debug("More than one handler class is defined with the name [" + handlerName + "]");
                      log.debug("The value of the @Handler annotation is [" + handlerName + "] for both " + handlerTxt);
                      log.debug("Any features which attempt to use handler [" + handlerName + "] will fail");
                  }
  
                  //put a special class into the map which tells the interpreter to fail any features
                  handlerNameToHandlerClass.put(handlerName, DuplicateHandlers.class);
                  duplicateNameToDescription.put(handlerName, handlerTxt);
              } else {
                  handlerNameToHandlerClass.put(handlerName, handlerClass);
              }
          }
          
          if ( log.isTraceEnabled()) {
              log.trace("These were the handler classes discovered by handler class scanning " + handlerNameToHandlerClass);
          }
          return handlerNameToHandlerClass;
      }
docs: Scans the classpath for handler classes
  
  @param basePackages name of the base package under which a recursive scan for @Handler classes will be performed
  @return a Map of [feature-name -&gt; feature class]