static <A extends Annotation> @Nullable A getMethodOrClassAnnotation(
            final @NonNull Method method,
            final @NonNull Class<A> clazz
    ) {
        A annotation = getAnnotationRecursively(
                AnnotationAccessor.of(method),
                clazz,
                new HashSet<>()
        );
        if (annotation == null) {
            annotation = getAnnotationRecursively(
                    AnnotationAccessor.of(method.getDeclaringClass()),
                    clazz,
                    new HashSet<>()
            );
        }
        return annotation;
    }
Construct a new annotation parser

@param manager           Command manager instance
@param commandSenderType Command sender type
@param metaMapper        Function that is used to create {@link CommandMeta} instances from annotations on the
                         command methods. These annotations will be mapped to
                         {@link ParserParameter}. Mappers for the
                         parser parameters can be registered using {@link #registerAnnotationMapper(Class, AnnotationMapper)}
cloud-annotations/src/main/java/org/incendo/cloud/annotations/AnnotationParser.java