@Nullable
    @Override
    public ServiceDescriptor findServiceDescriptor(Class<?> clientType) {
        if (clientType.getName().endsWith("CoroutineStub")) {
            final Annotation annotation = stubForAnnotation(clientType);
            final Method getServiceDescriptor;
            final Class<?> generatedStub;
            try {
                final Method valueMethod = annotation.annotationType().getDeclaredMethod("value", null);
                generatedStub = generatedStub(annotation, valueMethod);
                getServiceDescriptor = generatedStub.getDeclaredMethod("getServiceDescriptor", null);
            } catch (NoSuchMethodException e) {
                throw new IllegalArgumentException("Could not find value getter on StubFor annotation.", e);
            }
            try {
                return (ServiceDescriptor) getServiceDescriptor.invoke(generatedStub);
            } catch (IllegalAccessException | InvocationTargetException e) {
                throw new IllegalArgumentException(
                        "Could not invoke getServiceDescriptor on a gRPC Kotlin client stub.", e);
            }
        }

        return null;
    }
A gRPC client stub factory for <a href="https://github.com/grpc/grpc-kotlin">gRPC-Kotlin</a>.
grpc/src/main/java/com/linecorp/armeria/internal/client/grpc/KotlinGrpcClientStubFactory.java