private MemberModel generateMemberModel()

in codegen/src/main/java/software/amazon/awssdk/codegen/AddShapes.java [149:244]


    private MemberModel generateMemberModel(String c2jMemberName, Member c2jMemberDefinition,
                                            String protocol, Shape parentShape,
                                            Map<String, Shape> allC2jShapes) {
        String c2jShapeName = c2jMemberDefinition.getShape();
        Shape shape = allC2jShapes.get(c2jShapeName);
        String variableName = getNamingStrategy().getVariableName(c2jMemberName);
        String variableType = getTypeUtils().getJavaDataType(allC2jShapes, c2jShapeName);
        String variableDeclarationType = getTypeUtils().getJavaDataType(allC2jShapes, c2jShapeName);

        //If member is idempotent, then it should be of string type
        //Else throw IllegalArgumentException.
        if (c2jMemberDefinition.isIdempotencyToken() &&
            !variableType.equals(String.class.getSimpleName())) {
            throw new IllegalArgumentException(c2jMemberName +
                                               " is idempotent. It's shape should be string type but it is of " +
                                               variableType + " type.");
        }

        MemberModel memberModel = new MemberModel();

        memberModel.withC2jName(c2jMemberName)
                   .withC2jShape(c2jShapeName)
                   .withName(capitalize(c2jMemberName))
                   .withVariable(new VariableModel(variableName, variableType, variableDeclarationType)
                                         .withDocumentation(c2jMemberDefinition.getDocumentation()))
                   .withSetterModel(new VariableModel(variableName, variableType, variableDeclarationType))
                   .withGetterModel(new ReturnTypeModel(variableType))
                   .withTimestampFormat(resolveTimestampFormat(c2jMemberDefinition, shape))
                   .withJsonValue(c2jMemberDefinition.getJsonvalue());
        memberModel.setDocumentation(c2jMemberDefinition.getDocumentation());
        memberModel.setDeprecated(c2jMemberDefinition.isDeprecated());
        memberModel.setDeprecatedMessage(c2jMemberDefinition.getDeprecatedMessage());
        memberModel.setSensitive(isSensitiveShapeOrContainer(c2jMemberDefinition, allC2jShapes));
        memberModel
                .withFluentGetterMethodName(namingStrategy.getFluentGetterMethodName(c2jMemberName, parentShape, shape))
                .withFluentEnumGetterMethodName(namingStrategy.getFluentEnumGetterMethodName(c2jMemberName, parentShape, shape))
                .withFluentSetterMethodName(namingStrategy.getFluentSetterMethodName(c2jMemberName, parentShape, shape))
                .withFluentEnumSetterMethodName(namingStrategy.getFluentEnumSetterMethodName(c2jMemberName, parentShape, shape))
                .withExistenceCheckMethodName(namingStrategy.getExistenceCheckMethodName(c2jMemberName, parentShape))
                .withBeanStyleGetterMethodName(namingStrategy.getBeanStyleGetterMethodName(c2jMemberName, parentShape, shape))
                .withBeanStyleSetterMethodName(namingStrategy.getBeanStyleSetterMethodName(c2jMemberName, parentShape, shape));
        memberModel.setIdempotencyToken(c2jMemberDefinition.isIdempotencyToken());
        memberModel.setEventPayload(c2jMemberDefinition.isEventpayload());
        memberModel.setEventHeader(c2jMemberDefinition.isEventheader());
        memberModel.setEndpointDiscoveryId(c2jMemberDefinition.isEndpointdiscoveryid());
        memberModel.setXmlAttribute(c2jMemberDefinition.isXmlAttribute());
        memberModel.setUnionEnumTypeName(namingStrategy.getUnionEnumTypeName(memberModel));
        memberModel.setContextParam(c2jMemberDefinition.getContextParam());
        memberModel.setRequired(isRequiredMember(c2jMemberName, parentShape));
        memberModel.setSynthetic(shape.isSynthetic());


        // Pass the xmlNameSpace from the member reference
        if (c2jMemberDefinition.getXmlNamespace() != null) {
            memberModel.setXmlNameSpaceUri(c2jMemberDefinition.getXmlNamespace().getUri());
        }

        // Additional member model metadata for list/map/enum types
        fillContainerTypeMemberMetadata(allC2jShapes, c2jMemberDefinition.getShape(), memberModel,
                                        protocol);


        String deprecatedName = c2jMemberDefinition.getDeprecatedName();
        if (StringUtils.isNotBlank(deprecatedName)) {
            checkForValidDeprecatedName(c2jMemberName, shape);

            memberModel.setDeprecatedName(deprecatedName);
            memberModel.setDeprecatedFluentGetterMethodName(
                namingStrategy.getFluentGetterMethodName(deprecatedName, parentShape, shape));
            memberModel.setDeprecatedFluentSetterMethodName(
                namingStrategy.getFluentSetterMethodName(deprecatedName, parentShape, shape));
            memberModel.setDeprecatedBeanStyleSetterMethodName(
                namingStrategy.getBeanStyleSetterMethodName(deprecatedName, parentShape, shape));
        }

        ParameterHttpMapping httpMapping = generateParameterHttpMapping(parentShape,
                                                                              c2jMemberName,
                                                                              c2jMemberDefinition,
                                                                              protocol,
                                                                              allC2jShapes);

        String payload = parentShape.getPayload();

        boolean shapeIsStreaming = shape.isStreaming();
        boolean memberIsStreaming = c2jMemberDefinition.isStreaming();
        boolean payloadIsStreaming = shapeIsStreaming || memberIsStreaming;
        boolean requiresLength = shape.isRequiresLength() || c2jMemberDefinition.isRequiresLength();

        httpMapping.withPayload(payload != null && payload.equals(c2jMemberName))
                   .withStreaming(payloadIsStreaming)
                   .withRequiresLength(requiresLength);

        memberModel.setHttp(httpMapping);

        return memberModel;
    }