private ValidationEvent createChangeEvent(Differences differences, ChangedShape<MemberShape> change) {
        Shape oldTarget = getShapeTarget(differences.getOldModel(), change.getOldShape().getTarget());
        Shape newTarget = getShapeTarget(differences.getNewModel(), change.getNewShape().getTarget());
        List<String> issues = areShapesCompatible(oldTarget, newTarget);
        Severity severity = issues.isEmpty() ? Severity.WARNING : Severity.ERROR;

        String message = createSimpleMessage(change, oldTarget, newTarget);
        if (severity == Severity.WARNING) {
            message += "This was determined backward compatible.";
        } else {
            message += String.join(". ", issues) + ".";
        }

        return ValidationEvent.builder()
                .severity(severity)
                .id(getEventId())
                .shape(change.getNewShape())
                .message(message)
                .build();
    }
These traits are traits that are known to significantly influence
code generation. Right now it just contains the enum trait, but
other traits could be added in the future as needed.
smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/ChangedMemberTarget.java