private static List<AnnotatedValueResolver> getAnnotatedValueResolvers(
            List<RequestConverterFunction> req,
            Route route, Method method,
            Class<?> clazz,
            boolean useBlockingExecutor,
            DependencyInjector dependencyInjector,
            @Nullable String queryDelimiter) {
        final Set<String> expectedParamNames = route.paramNames();
        List<AnnotatedValueResolver> resolvers;
        try {
            resolvers = AnnotatedValueResolver.ofServiceMethod(
                    method, expectedParamNames,
                    AnnotatedValueResolver.toRequestObjectResolvers(req, method),
                    useBlockingExecutor, dependencyInjector, queryDelimiter);
        } catch (NoParameterException ignored) {
            // Allow no parameter like below:
            //
            // @Get("/")
            // public String method1() { ... }
            //
            resolvers = ImmutableList.of();
        }

        final Set<String> requiredParamNames =
                resolvers.stream()
                         .filter(AnnotatedValueResolver::isPathVariable)
                         .map(AnnotatedValueResolver::httpElementName)
                         .collect(toImmutableSet());

        if (!expectedParamNames.containsAll(requiredParamNames)) {
            final Set<String> missing = Sets.difference(requiredParamNames, expectedParamNames);
            throw new IllegalArgumentException("cannot find path variables: " + missing);
        }

        // Warn unused path variables only if there's no '@RequestObject' annotation.
        if (resolvers.stream().noneMatch(r -> r.annotationType() == RequestObject.class) &&
            !requiredParamNames.containsAll(expectedParamNames)) {
            final Set<String> missing = Sets.difference(expectedParamNames, requiredParamNames);
            logger.warn("Some path variables of the method '" + method.getName() +
                        "' of the class '" + clazz.getName() +
                        "' do not have their corresponding parameters annotated with @Param. " +
                        "They would not be automatically injected: " + missing);
        }

        return resolvers;
    }
Returns a list of {@link AnnotatedService} instances. A single {@link AnnotatedService} is
created per each {@link Route} associated with the {@code method}.
core/src/main/java/com/linecorp/armeria/internal/server/annotation/AnnotatedServiceFactory.java