public Set<Shape> getRecursiveShapes() {
        return Collections.unmodifiableSet(recursiveShapes.keySet());
    }
Gets all shapes that have edges that are part of a recursive closure,
including container shapes (list/set/map/structure/union) and members.

<p>When iterated, the returned {@code Set} is ordered from fewest number
of edges to the most number of edges in the recursive closures, and then
alphabetically by shape ID when there are multiple entries with
the same number of edges.

@return All shapes that are part of a recursive closure.
smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/TopologicalIndex.java