docs: protected void generateRoutes()
      {
          try {
  
  //			Optional<io.sinistral.proteus.annotations.Chain> typeLevelWrapAnnotation = Optional.ofNullable(controllerClass.getAnnotation(io.sinistral.proteus.annotations.Chain.class));
  //			
  //			typeLevelWrapAnnotation.ifPresent( a -> {
  //				 
  //				io.sinistral.proteus.annotations.Chain w = typeLevelWrapAnnotation.get();
  //
  //				Class<? extends HandlerWrapper> wrapperClasses[] = w.value();
  //
  //				for (int i = 0; i < wrapperClasses.length; i++)
  //				{
  //					Class<? extends HandlerWrapper> wrapperClass = wrapperClasses[i];
  //
  //					String wrapperName = generateFieldName(wrapperClass.getCanonicalName());
  //
  //					handlerWrapperMap.put(wrapperClass, wrapperName);
  //				}
  //				
  //			});
  //			
  //			for(Method m : this.controllerClass.getDeclaredMethods())
  //			{
  //			
  //				Optional<io.sinistral.proteus.annotations.Chain> methodLevelWrapAnnotation = Optional.ofNullable(m.getAnnotation(io.sinistral.proteus.annotations.Chain.class));
  //				
  //				methodLevelWrapAnnotation.ifPresent( a -> {
  //					 
  //					io.sinistral.proteus.annotations.Chain w = methodLevelWrapAnnotation.get();
  //	
  //					Class<? extends HandlerWrapper> wrapperClasses[] = w.value();
  //	
  //					for (int i = 0; i < wrapperClasses.length; i++)
  //					{
  //						Class<? extends HandlerWrapper> wrapperClass = wrapperClasses[i];
  //	
  //						String wrapperName = generateFieldName(wrapperClass.getCanonicalName());
  //	
  //						handlerWrapperMap.put(wrapperClass, wrapperName);
  //					}
  //					
  //				});
  //
  //			}
  //			
  //			log.info("handlerWrapperMap: " + handlerWrapperMap);
  
              TypeSpec.Builder typeBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC)
                      .addSuperinterface(ParameterizedTypeName.get(Supplier.class, RoutingHandler.class));
  
              ClassName extractorClass = ClassName.get("io.sinistral.proteus.server", "Extractors");
  
              ClassName injectClass = ClassName.get("com.google.inject", "Inject");
  
  
              MethodSpec.Builder constructor = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC).addAnnotation(injectClass);
  
              String className = this.controllerClass.getSimpleName().toLowerCase() + "Controller";
  
              typeBuilder.addField(this.controllerClass, className, Modifier.PROTECTED, Modifier.FINAL);
  
              ClassName wrapperClass = ClassName.get("io.undertow.server", "HandlerWrapper");
              ClassName stringClass = ClassName.get("java.lang", "String");
              ClassName mapClass = ClassName.get("java.util", "Map");
  
              TypeName mapOfWrappers = ParameterizedTypeName.get(mapClass, stringClass, wrapperClass);
  
              TypeName annotatedMapOfWrappers = mapOfWrappers
                      .annotated(AnnotationSpec.builder(com.google.inject.name.Named.class).addMember("value", "$S", "registeredHandlerWrappers").build());
  
              typeBuilder.addField(mapOfWrappers, "registeredHandlerWrappers", Modifier.PROTECTED, Modifier.FINAL);
  
  
              constructor.addParameter(this.controllerClass, className);
              constructor.addParameter(annotatedMapOfWrappers, "registeredHandlerWrappers");
  
              constructor.addStatement("this.$N = $N", className, className);
              constructor.addStatement("this.$N = $N", "registeredHandlerWrappers", "registeredHandlerWrappers");
  
              addClassMethodHandlers(typeBuilder, this.controllerClass);
  
              typeBuilder.addMethod(constructor.build());
  
              JavaFile javaFile = JavaFile.builder(packageName, typeBuilder.build()).addStaticImport(extractorClass, "*").build();
  
              StringBuilder sb = new StringBuilder();
  
              javaFile.writeTo(sb);
  
              this.sourceString = sb.toString();
  
          } catch (Exception e) {
              log.error(e.getMessage(), e);
          }
      }