@Nullable
    private static AnnotatedValueResolver ofInjectableTypes(String name, AnnotatedElement annotatedElement,
                                                            Class<?> type, boolean useBlockingExecutor) {
        // Unwrap Optional type to support a parameter like 'Optional<RequestContext> ctx'
        // which is always non-empty.
        if (type != Optional.class) {
            return ofInjectableTypes0(name, annotatedElement, type, type, useBlockingExecutor);
        }

        final Type actual =
                ((ParameterizedType) parameterizedTypeOf(annotatedElement)).getActualTypeArguments()[0];
        final AnnotatedValueResolver resolver =
                ofInjectableTypes0(name, annotatedElement, type, actual, useBlockingExecutor);
        if (resolver != null) {
            logger.warn("Unnecessary Optional is used at '{}'", annotatedElement);
        }
        return resolver;
    }
Creates a new {@link AnnotatedValueResolver} instance if the specified {@code annotatedElement} is
a component of {@link AnnotatedService}.

@param annotatedElement an element which is annotated with a value specifier such as {@link Param} and
                        {@link Header}.
@param typeElement      an element which is used for retrieving its type and name.
@param type             a type of the given {@link Parameter} or {@link Field}. It is a type of
                        the specified {@code typeElement} parameter.
@param pathParams       a set of path variables.
@param objectResolvers  a list of {@link RequestObjectResolver} to be evaluated for the objects which
                        are annotated with {@link RequestObject} annotation.
@param implicitRequestObjectAnnotation {@code true} if an element is always treated like it is annotated
                                       with {@link RequestObject} so that conversion is always done.
                                       {@code false} if an element has to be annotated with
                                       {@link RequestObject} explicitly to get converted.
@param useBlockingExecutor whether to use blocking task executor
core/src/main/java/com/linecorp/armeria/internal/server/annotation/AnnotatedValueResolver.java