@Override
    public List<ValidationEvent> validate(Model model) {
        // There are usually far fewer resources than members, precompute the identifiers
        // so various short circuits can be added.
        Set<String> identifierNames = getAllIdentifierNames(model);
        // Short circuit validating all the members if we don't have any resources to test.
        if (identifierNames.isEmpty()) {
            return ListUtils.of();
        }

        // Check every member to see if it's a potential reference.
        List<ValidationEvent> events = new ArrayList<>();
        for (MemberShape member : model.getMemberShapes()) {
            // Only the known identifier names can match for this, skip names that we don't know.
            if (!identifierNames.contains(member.getMemberName())) {
                continue;
            }
            // Only strings can be identifiers, so skip non-String targets.
            if (!model.expectShape(member.getTarget()).isStringShape()) {
                continue;
            }

            Set<ShapeId> potentialReferences = computePotentialReferences(model, member);
            if (!potentialReferences.isEmpty()) {
                events.add(warning(member,
                        format("This member appears to reference the following resources without "
                                + "being included in a `@references` trait: [%s]",
                                ValidationUtils.tickedList(potentialReferences))));
            }
        }

        return events;
    }
Validates if a member matches a resource identifier without the
proper configuration of a `@references` trait.
smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/MemberShouldReferenceResourceValidator.java