@Override
    public ServiceSpecification generateSpecification(Set<ServiceConfig> serviceConfigs,
                                                      DocServiceFilter filter,
                                                      DescriptiveTypeInfoProvider descriptiveTypeInfoProvider) {
        requireNonNull(serviceConfigs, "serviceConfigs");
        requireNonNull(filter, "filter");
        requireNonNull(descriptiveTypeInfoProvider, "descriptiveTypeInfoProvider");

        final Map<Class<?>, Set<MethodInfo>> methodInfos = new HashMap<>();
        final Map<Class<?>, DescriptionInfo> serviceDescription = new HashMap<>();
        serviceConfigs.forEach(sc -> {
            final DefaultAnnotatedService service = sc.service().as(DefaultAnnotatedService.class);
            if (service != null) {
                final Class<?> serviceClass = service.serviceClass();
                final String className = serviceClass.getName();
                final String methodName = service.methodName();
                if (!filter.test(name(), className, methodName)) {
                    return;
                }
                addMethodInfo(methodInfos, sc.virtualHost().hostnamePattern(), service, serviceClass);
                addServiceDescription(serviceDescription, serviceClass);
            }
        });

        return generate(serviceDescription, methodInfos, descriptiveTypeInfoProvider);
    }
A {@link DocServicePlugin} implementation that supports the {@link AnnotatedService}.
core/src/main/java/com/linecorp/armeria/internal/server/annotation/AnnotatedDocServicePlugin.java