private <T> Optional<T> getSchemaAnnotationValue(MemberScope<?, ?> member, Function<Schema, T> valueExtractor, Predicate<T> valueFilter) {
        if (member.isFakeContainerItemScope()) {
            return this.getArraySchemaAnnotation(member)
                    .map(ArraySchema::schema)
                    .map(valueExtractor)
                    .filter(valueFilter);
        }
        Schema annotation = member.getAnnotationConsideringFieldAndGetter(Schema.class);
        if (annotation != null) {
            return Optional.of(annotation)
                    .map(valueExtractor)
                    .filter(valueFilter);
        }
        return this.getArraySchemaAnnotation(member)
                .map(ArraySchema::arraySchema)
                .map(valueExtractor)
                .filter(valueFilter);
    }
Look up a value from a {@link Schema} annotation on the given property or its associated field/getter or an external class referenced by
{@link Schema#implementation()}.

@param member field/method for which to look-up any present {@link Schema} annotation
@param valueExtractor the getter for the value from the annotation
@param valueFilter filter that determines whether the value from a given annotation matches our criteria
@param <T> the type of the returned value

@return the value from one of the matching {@link Schema} annotations or {@code Optional.empty()}
jsonschema-module-swagger-2/src/main/java/com/github/victools/jsonschema/module/swagger2/Swagger2Module.java