@VisibleForTesting
    static DescriptiveTypeInfo newDescriptiveTypeInfo(
            DescriptiveTypeSignature typeSignature,
            DescriptiveTypeInfoProvider provider,
            Set<DescriptiveTypeSignature> requestDescriptiveTypes) {
        final Object typeDescriptor = typeSignature.descriptor();
        if (typeSignature instanceof RequestObjectTypeSignature) {
            final Object annotatedValueResolvers =
                    ((RequestObjectTypeSignature) typeSignature).annotatedValueResolvers();
            if (annotatedValueResolvers instanceof AnnotatedValueResolversWrapper) {
                final AnnotatedValueResolversWrapper resolvers =
                        (AnnotatedValueResolversWrapper) annotatedValueResolvers;
                return new StructInfo(typeSignature.name(), fieldInfos(resolvers.resolvers()));
            }
        }
        DescriptiveTypeInfo descriptiveTypeInfo = provider.newDescriptiveTypeInfo(typeDescriptor);
        if (descriptiveTypeInfo != null) {
            return descriptiveTypeInfo;
        }
        if (requestDescriptiveTypes.contains(typeSignature)) {
            descriptiveTypeInfo =
                    DEFAULT_REQUEST_DESCRIPTIVE_TYPE_INFO_PROVIDER.newDescriptiveTypeInfo(typeDescriptor);
        } else {
            descriptiveTypeInfo =
                    DEFAULT_RESPONSE_DESCRIPTIVE_TYPE_INFO_PROVIDER.newDescriptiveTypeInfo(typeDescriptor);
        }
        if (descriptiveTypeInfo != null) {
            return descriptiveTypeInfo;
        } else {
            // An unresolved StructInfo.
            return new StructInfo(typeSignature.name(), ImmutableList.of());
        }
    }
A {@link DocServicePlugin} implementation that supports the {@link AnnotatedService}.
core/src/main/java/com/linecorp/armeria/internal/server/annotation/AnnotatedDocServicePlugin.java