private List<ValidationEvent> checkConflicts(
            Model model,
            OperationShape operation,
            HttpTrait httpTrait,
            List<OperationShape> operations
    ) {
        String method = httpTrait.getMethod();
        UriPattern pattern = httpTrait.getUri();

        // Some conflicts are potentially allowable, so we split them up into to lists.
        List<Pair<ShapeId, UriPattern>> conflicts = new ArrayList<>();
        List<Pair<ShapeId, UriPattern>> allowableConflicts = new ArrayList<>();

        for (OperationShape other : operations) {
            if (other != operation && other.hasTrait(HttpTrait.ID)) {
                HttpTrait otherHttpTrait = other.expectTrait(HttpTrait.class);
                if (otherHttpTrait.getMethod().equals(method)
                        && otherHttpTrait.getUri().conflictsWith(pattern)
                        && endpointConflicts(model, operation, other)) {
                    // Now that we know we have a conflict, determine whether it is allowable or not.
                    if (isAllowableConflict(model, operation, other)) {
                        allowableConflicts.add(Pair.of(other.getId(), otherHttpTrait.getUri()));
                    } else {
                        conflicts.add(Pair.of(other.getId(), otherHttpTrait.getUri()));
                    }
                }
            }
        }

        // Non-allowable conflicts get turned into ERRORs, they must be resolved to pass validation.
        List<ValidationEvent> events = new ArrayList<>();
        if (!conflicts.isEmpty()) {
            events.add(error(operation, formatConflicts(pattern, conflicts)));
        }

        // Allowable conflicts get turned into DANGERs, which must at least be acknowledged with a suppression.
        if (!allowableConflicts.isEmpty()) {
            String message = formatConflicts(pattern, allowableConflicts)
                    + ". Pattern traits applied to the label members prevent the label value from evaluating to a "
                    + "conflict, but this is still a poor design. If this is acceptable, this can be suppressed.";
            events.add(danger(operation, message));
        }

        return events;
    }
Validates that no two URIs in a service conflict with each other.
smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpUriConflictValidator.java