private static <T> @NonNull Key<T> createKey(
            final @NonNull Class<T> clazz,
            final @NonNull AnnotationAccessor annotationAccessor
    ) {
        final Annotation bindingAnnotation = annotationAccessor
                .annotations()
                .stream()
                .filter(annotation -> annotation.annotationType().isAnnotationPresent(BindingAnnotation.class))
                .findFirst()
                .orElse(null);
        if (bindingAnnotation == null) {
            return Key.get(clazz);
        } else {
            return Key.get(clazz, bindingAnnotation);
        }
    }
Creates a Guice key for the given class and annotation accessor.

<p>If the annotation accessor contains a binding annotation, the key will be created with that annotation.
Otherwise, the key will be created without a binding annotation.</p>

<p>If the annotation accessor contains multiple binding annotations, the first one will be used.</p>

@param <T>                type of the key
@param clazz              class to create key for
@param annotationAccessor annotation accessor to create key for
@return the created key
cloud-core/src/main/java/org/incendo/cloud/injection/GuiceInjectionService.java