private void validateResource(
            Model model,
            ResourceShape parent,
            IdentifierBindingIndex bindingIndex,
            List<ValidationEvent> events
    ) {
        for (ShapeId childId : parent.getResources()) {
            ResourceShape child = model.expectShape(childId, ResourceShape.class);
            for (ShapeId operationId : child.getAllOperations()) {
                OperationShape operation = model.expectShape(operationId, OperationShape.class);
                validateOperation(parent, child, operation, bindingIndex).ifPresent(events::add);
            }
        }
    }
Validates that operations bound to resource shapes have identifier
bindings for all the identifiers of the parent of the binding resource,
that operations bound to a resource with the {@code collection}
trait are bound using a collection binding, and operations bound with
no {@code collection} trait are bound using an instance binding.
smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ResourceIdentifierBindingValidator.java