public synchronized Model getModelWithoutTraitShapes() {
        if (nonTraitsModel == null) {
            nonTraitsModel = ModelTransformer.create().getModelWithoutTraitShapes(model);
        }

        return nonTraitsModel;
    }
Creates a new Model where shapes that define traits or shapes
that are only used as part of a trait definition have been removed.

<p>This is typically functionality used by code generators when
generating data structures from a model. It's useful because it only
provides shapes that are used to describe data structures rather than
shapes used to describe metadata about the data structures.

<p>Note: this method just calls {@link ModelTransformer#getModelWithoutTraitShapes}.
It's added to {@code PluginContext} to make it more easily available
to code generators.

@return Returns a Model containing matching shapes.
smithy-build/src/main/java/software/amazon/smithy/build/PluginContext.java