in codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/TypeProvider.java [125:182]
public TypeName typeName(MemberModel model, TypeNameOptions options) {
if (model.isSdkBytesType() && options.useByteBufferTypes) {
return ClassName.get(ByteBuffer.class);
}
if (model.getEnumType() != null && options.useEnumTypes) {
return poetExtensions.getModelClass(model.getEnumType());
}
if (model.isSimple()) {
return getTypeNameForSimpleType(model.getVariable().getVariableType());
}
if (model.isList()) {
MemberModel entryModel = model.getListModel().getListMemberModel();
TypeName entryType = typeName(entryModel, options);
if (options.useSubtypeWildcardsForCollections && isContainerType(entryModel) ||
options.useSubtypeWildcardsForBuilders && entryModel.hasBuilder()) {
entryType = WildcardTypeName.subtypeOf(entryType);
}
Class<?> collectionType = options.useCollectionForList ? Collection.class : List.class;
return ParameterizedTypeName.get(ClassName.get(collectionType), entryType);
}
if (model.isMap()) {
MemberModel keyModel = model.getMapModel().getKeyModel();
MemberModel valueModel = model.getMapModel().getValueModel();
TypeName keyType = typeName(keyModel, options);
TypeName valueType = typeName(valueModel, options);
if (options.useSubtypeWildcardsForCollections && isContainerType(keyModel) ||
options.useSubtypeWildcardsForBuilders && keyModel.hasBuilder()) {
keyType = WildcardTypeName.subtypeOf(keyType);
}
if (options.useSubtypeWildcardsForCollections && isContainerType(valueModel) ||
options.useSubtypeWildcardsForBuilders && valueModel.hasBuilder()) {
valueType = WildcardTypeName.subtypeOf(valueType);
}
return ParameterizedTypeName.get(ClassName.get(Map.class), keyType, valueType);
}
if (model.hasBuilder()) {
ClassName shapeClass = poetExtensions.getModelClass(model.getC2jShape());
switch (options.shapeTransformation) {
case NONE: return shapeClass;
case USE_BUILDER: return shapeClass.nestedClass("Builder");
case USE_BUILDER_IMPL: return shapeClass.nestedClass("BuilderImpl");
default: throw new IllegalStateException();
}
}
throw new IllegalArgumentException("Unsupported member model: " + model);
}