public static void addEventHandlerRegistrationMethods(Option option, JDefinedClass jClass) {

    List<JClass> list = EventRegistry.INSTANCE.getRegistry().get(option.getFullname());
    if (list != null) {
      for (JClass handlerClass : list) {
        String handlerClassName = handlerClass.name();
        String paramName =
            handlerClassName.substring(0, 1).toLowerCase() + handlerClassName.substring(1);
        jClass
            .method(JMod.NONE, void.class, EventHelper.ADD_HANDLER_METHOD_PREFIX + handlerClassName)
            .param(handlerClass, paramName);
      }
    }
  }
  public static JDefinedClass createEventHandlerInterface(
      Option option, String packageName, String rootDirectoryPathName) {
    JCodeModel model = new JCodeModel();

    JDefinedClass jClass = null;

    try {
      String eventName = EventHelper.getEventNamePrefix(option);
      String handlerName = eventName + EventHelper.HANDLER_SUFFIX;
      String fullyqualifiedName = packageName + "." + handlerName;
      jClass = model._class(fullyqualifiedName, ClassType.INTERFACE);

      JClass eventClass =
          ClassRegistry.INSTANCE
              .getRegistry()
              .get(new ClassRegistry.RegistryKey(option, OutputType.Interface));

      jClass
          .method(JMod.NONE, void.class, EventHelper.ON_PREFIX + eventName)
          .param(eventClass, EventHelper.paramName(eventName));

      EventRegistry.INSTANCE.put(EventHelper.getRegistryKey(option), jClass);
      logger.info("Handler created;" + handlerName);

    } catch (JClassAlreadyExistsException e) {
      throw new RuntimeException(e);
    }

    try {
      model.build(new File(rootDirectoryPathName));
    } catch (IOException e) {
      throw new RuntimeException(e);
    }

    return jClass;
  }