public TypeName typeName()

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);
    }