private String deconflict(Shape shape, String pointer, Map<String, ShapeId> reversePointers) {
        LOGGER.info(() -> String.format(
                "Attempting to de-conflict `%s` JSON schema pointer `%s` that conflicts with `%s`",
                shape.getId(),
                pointer,
                reversePointers.get(pointer)));

        if (!isSafeToDeconflict(shape)) {
            throw new ConflictingShapeNameException(String.format(
                    "Shape %s conflicts with %s using a JSON schema pointer of %s",
                    shape,
                    reversePointers.get(pointer),
                    pointer));
        }

        // Create a de-conflicted JSON schema pointer that just appends
        // the PascalCase formatted version of the shape's namespace to the
        // resulting pointer.
        StringBuilder builder = new StringBuilder(pointer);
        for (String part : SPLIT_PATTERN.split(shape.getId().getNamespace())) {
            builder.append(StringUtils.capitalize(part));
        }

        String updatedPointer = builder.toString();

        if (reversePointers.containsKey(updatedPointer)) {
            // Note: I don't know if this can ever actually happen... but just in case.
            throw new ConflictingShapeNameException(String.format(
                    "Unable to de-conflict shape %s because the de-conflicted name resolves "
                            + "to another generated name: %s",
                    shape,
                    updatedPointer));
        }

        return updatedPointer;
    }
Automatically de-conflicts map shapes, list shapes, and set shapes
by sorting conflicting shapes by ID and then appending a formatted
version of the shape ID namespace to the colliding shape.

<p>Simple types are never generated at the top level because they
are always inlined into complex shapes; however, string shapes
marked with the enum trait are never allowed to conflict since
they can easily drift away from compatibility over time.
Structures and unions are not allowed to conflict either.
smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/DeconflictingStrategy.java