@VisibleForTesting
    static ServiceSpecification generate(Map<Class<?>, DescriptionInfo> serviceDescription,
                                         Map<Class<?>, Set<MethodInfo>> methodInfos,
                                         DescriptiveTypeInfoProvider descriptiveTypeInfoProvider) {
        final Set<ServiceInfo> serviceInfos = methodInfos
                .entrySet().stream()
                .map(entry -> {
                    final Class<?> service = entry.getKey();
                    return new ServiceInfo(service.getName(), entry.getValue(),
                                           serviceDescription.getOrDefault(service, DescriptionInfo.empty()));
                })
                .collect(toImmutableSet());

        final Set<DescriptiveTypeSignature> requestDescriptiveTypes =
                serviceInfos.stream()
                            .flatMap(s -> s.findDescriptiveTypes(true).stream())
                            .collect(toImmutableSet());

        return ServiceSpecification.generate(
                serviceInfos,
                typeSignature -> newDescriptiveTypeInfo(typeSignature, descriptiveTypeInfoProvider,
                                                        requestDescriptiveTypes));
    }
A {@link DocServicePlugin} implementation that supports the {@link AnnotatedService}.
core/src/main/java/com/linecorp/armeria/internal/server/annotation/AnnotatedDocServicePlugin.java