@Override
        public AttributeValue getProperty(String key) {
            if (key.equals(FIRST)) {
                return values.isEmpty() ? EMPTY : getFlattenedValues().iterator().next();
            }

            // All of the values that are yielded from the projected values
            // come together to create a new projection.
            List<AttributeValue> result = new ArrayList<>();
            for (AttributeValue value : values) {
                AttributeValue next = value.getProperty(key);
                if (next.isPresent()) {
                    result.add(next);
                }
            }

            return AttributeValue.projection(result);
        }
A projected attribute value that matches N values contained within it.

<p>Projections wrap other values and match if any contained value matches,
are only considered present if there are 1 or more values, and return
new projections based on properties contained within the projection.
smithy-model/src/main/java/software/amazon/smithy/model/selector/AttributeValueImpl.java