protected void overrideInstanceAttributes(ObjectNode memberAttributes, MemberScope<?, ?> member, SchemaGenerationContext context) {
        Schema annotation = this.getSchemaAnnotationValue(member, Function.identity(), x -> true)
                .orElse(null);
        if (annotation == null) {
            return;
        }
        if (annotation.not() != Void.class) {
            memberAttributes.set(context.getKeyword(SchemaKeyword.TAG_NOT),
                    context.createDefinitionReference(context.getTypeContext().resolve(annotation.not())));
        }
        if (annotation.allOf().length > 0) {
            ArrayNode allOfArray = memberAttributes.withArray(context.getKeyword(SchemaKeyword.TAG_ALLOF));
            Stream.of(annotation.allOf())
                    .map(context.getTypeContext()::resolve)
                    .map(context::createDefinitionReference)
                    .forEach(allOfArray::add);
        }
        if (annotation.anyOf().length > 0) {
            // since 4.26.0
            ArrayNode allOfArray = memberAttributes.withArray(context.getKeyword(SchemaKeyword.TAG_ALLOF));
            ArrayNode anyOfArray = allOfArray.addObject().withArray(context.getKeyword(SchemaKeyword.TAG_ANYOF));
            Stream.of(annotation.anyOf())
                    .map(context.getTypeContext()::resolve)
                    .map(context::createDefinitionReference)
                    .forEach(anyOfArray::add);
        }
        if (annotation.oneOf().length > 0) {
            // since 4.26.0
            ArrayNode allOfArray = memberAttributes.withArray(context.getKeyword(SchemaKeyword.TAG_ALLOF));
            ArrayNode oneOfArray = allOfArray.addObject().withArray(context.getKeyword(SchemaKeyword.TAG_ONEOF));
            Stream.of(annotation.oneOf())
                    .map(context.getTypeContext()::resolve)
                    .map(context::createDefinitionReference)
                    .forEach(oneOfArray::add);
        }
        if (annotation.minProperties() > 0) {
            memberAttributes.put(context.getKeyword(SchemaKeyword.TAG_PROPERTIES_MIN), annotation.minProperties());
        }
        if (annotation.maxProperties() > 0) {
            memberAttributes.put(context.getKeyword(SchemaKeyword.TAG_PROPERTIES_MAX), annotation.maxProperties());
        }
        if (annotation.requiredProperties().length > 0) {
            Set<String> alreadyMentionedRequiredFields = new HashSet<>();
            ArrayNode requiredFieldNames = memberAttributes
                    .withArray(context.getKeyword(SchemaKeyword.TAG_REQUIRED));
            requiredFieldNames
                    .forEach(arrayItem -> alreadyMentionedRequiredFields.add(arrayItem.asText()));
            Stream.of(annotation.requiredProperties())
                    .filter(field -> !alreadyMentionedRequiredFields.contains(field))
                    .forEach(requiredFieldNames::add);
        }
    }
Consider various remaining aspects.
<ul>
<li>{@code @Schema(not = ...)}</li>
<li>{@code @Schema(allOf = ...)}</li>
<li>{@code @Schema(minProperties = ...)}</li>
<li>{@code @Schema(maxProperties = ...)}</li>
<li>{@code @Schema(requiredProperties = ...)}</li>
</ul>

@param memberAttributes already collected schema for the field/method
@param member targeted field/method
@param context generation context
jsonschema-module-swagger-2/src/main/java/com/github/victools/jsonschema/module/swagger2/Swagger2Module.java