public String getJavaDataType(Map<String, Shape> shapes, String shapeName,
                                  CustomizationConfig customConfig) {

        if (shapeName == null || shapeName.trim().isEmpty()) {
            throw new IllegalArgumentException(
                    "Cannot derive shape type. Shape name cannot be null or empty");
        }

        final Shape shape = shapes.get(shapeName);

        if (shape == null) {
            throw new IllegalArgumentException(
                    "Cannot derive shape type. No shape information available for " + shapeName);
        }

        final String shapeType = shape.getType();

        if (Structure.getName().equals(shapeType)) {
            return namingStrategy.getJavaClassName(shapeName);
        } else if (List.getName().equals(shapeType)) {
            String listType =
                    customConfig != null && customConfig.isUseAutoConstructList() ? LIST_AUTO_CONSTRUCT_IMPL : LIST_INTERFACE;
            final String listContainerType = dataTypeMappings.get(listType);
            return listContainerType + "<" +
                   getJavaDataType(shapes, shape.getListMember().getShape()) + ">";
        } else if (Map.getName().equals(shapeType)) {
            String mapType =
                    customConfig != null && customConfig.isUseAutoConstructMap() ? MAP_AUTO_CONSTRUCT_IMPL : MAP_INTERFACE;
            final String mapContainerType = dataTypeMappings.get(mapType);
            return mapContainerType + "<" +
                   getJavaDataType(shapes, shape.getMapKeyType().getShape()) + "," +
                   getJavaDataType(shapes, shape.getMapValueType().getShape()) + ">";
        } else {

            if (shape.isStreaming()) {
                return dataTypeMappings.get("stream");
            }
            // scalar type.
            final String dataType = dataTypeMappings.get(shapeType);
            if (dataType == null) {
                throw new RuntimeException(
                        String.format("Equivalent Java data type cannot be found for shape name '%s' with data type '%s' ", shapeName, shapeType));
            }
            return dataType;
        }
    }
Returns the Java type of the specified shape with potential customization (such as
auto-construct list or map).
aws-java-sdk-code-generator/src/main/java/com/amazonaws/codegen/internal/TypeUtils.java