final List<Route> buildRouteList(Collection<Route> fallbackRoutes) {
        final ImmutableList.Builder<Route> builder = ImmutableList.builder();

        if (additionalRoutes.isEmpty()) {
            if (pathBuilders.isEmpty() && routeBuilders.isEmpty()) {
                if (fallbackRoutes.isEmpty()) {
                    throw new IllegalStateException(
                            "Should set at least one path that the service is bound to before calling this.");
                } else {
                    // Use the fallbackRoutes since a user didn't specify any routes.
                    return builder.addAll(fallbackRoutes).build();
                }
            }
            if (pathBuilders.isEmpty() && !methods.isEmpty()) {
                throw new IllegalStateException("Should set a path when the methods are set: " + methods);
            }
        }

        if (!pathBuilders.isEmpty()) {
            final Set<HttpMethod> pathMethods = methods.isEmpty() ? HttpMethod.knownMethods() : methods;
            pathBuilders.forEach(pathBuilder -> addRouteBuilder(pathBuilder, pathMethods));
        }

        routeBuilders.forEach((routeBuilder, routeMethods) -> {
            builder.add(routeBuilder.methods(routeMethods)
                                    .consumes(consumeTypes)
                                    .produces(produceTypes)
                                    .matchesParams(paramPredicates)
                                    .matchesHeaders(headerPredicates)
                                    .exclude(excludedRoutes)
                                    .build());
        });

        additionalRoutes.forEach(builder::add);

        return builder.build();
    }
Returns a newly-created {@link Route}s based on the properties of this builder.

@param fallbackRoutes the {@link Route}s to use when a user did not specify any {@link Route}s.
core/src/main/java/com/linecorp/armeria/server/AbstractBindingBuilder.java