code: 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(
                          "Equivalent Java data type cannot be found for data type : " + shapeType);
              }
              return dataType;
          }
      }
docs: Returns the Java type of the specified shape with potential customization (such as
  auto-construct list or map).