public static List<MemberShape> resolveFullPath(
            String path,
            Model model,
            StructureShape shape
    ) {
        List<MemberShape> memberShapes = new ArrayList<>();

        // For each member name in the path, try to find that member in the previous structure
        Optional<MemberShape> memberShape;
        Optional<StructureShape> container = Optional.of(shape);
        for (String memberName : PATH_PATTERN.split(path)) {
            memberShape = container.flatMap(structure -> structure.getMember(memberName));
            if (!memberShape.isPresent()) {
                return ListUtils.of();
            }
            memberShapes.add(memberShape.get());
            container = model.getShape(memberShape.get().getTarget())
                    .flatMap(Shape::asStructureShape);
        }
        return memberShapes;
    }
Resolves an output path to a list of {@link MemberShape}.

<p>A path is a series of identifiers separated by dots (`.`) where each identifier
represents a member name in a structure.

@param path  The path to resolve.
@param model The model to be searched when resolving the path.
@param shape The shape where path resolution should start, e.g. the output shape
             of an operation.
@return The list of member shapes corresponding to each path identifier. An unresolvable path will be returned
as an empty list.
smithy-model/src/main/java/software/amazon/smithy/model/traits/PaginatedTrait.java