code: public List<RouteMethod> parseFully(String application, List<Route.Definition> routes)
        throws Exception {
      List<RouteMethod> methods = parse(application);
  
      BiFunction<String, String, OptionalInt> routeIndex = (verb, pattern) -> {
        RouteMethod it = new RouteMethod(verb, pattern, new RouteResponse(void.class));
        return IntStream.range(0, methods.size())
            .filter(i -> methods.get(i).equals(it))
            .findFirst();
      };
  
      List<RouteMethod> result = new ArrayList<>(routes.size());
      for (Route.Definition route : routes) {
        routeIndex.apply(route.method(), route.pattern())
            .ifPresent(i -> result.add(complement(route, methods.remove(i))));
      }
  
      customizer.entrySet().forEach(it ->
          result.stream()
              .filter(it.getKey())
              .forEach(it.getValue())
      );
  
      return result;
    }
docs: Parse application bytecode, build route methods from it and merge output with the given routes.
  
  @param application Application to parse.
  @param routes Application routes.
  @return List of route methods.
  @throws Exception If something goes wrong.