Search in sources :

Example 6 with Type

use of com.bluelinelabs.logansquare.processor.type.Type in project LoganSquare by bluelinelabs.

the class SingleParameterCollectionType method serialize.

@Override
public void serialize(MethodSpec.Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {
    Type parameterType = parameterTypes.get(0);
    final String cleanFieldName = TextUtils.toUniqueFieldNameVariable(fieldName, processedFieldNames);
    final String collectionVariableName = "lslocal" + cleanFieldName;
    final String elementVarName = "element" + depth;
    final String instanceCreator = String.format("final $T<%s> $L = $L", parameterType.getParameterizedTypeString());
    final Object[] instanceCreatorArgs = expandStringArgs(getGenericClass(), parameterType.getParameterizedTypeStringArgs(), collectionVariableName, getter);
    final String forLine = String.format("for (%s $L : $L)", parameterType.getParameterizedTypeString());
    final Object[] forLineArgs = expandStringArgs(parameterType.getParameterizedTypeStringArgs(), elementVarName, collectionVariableName);
    builder.addStatement(instanceCreator, instanceCreatorArgs).beginControlFlow("if ($L != null)", collectionVariableName);
    if (isObjectProperty) {
        builder.addStatement("$L.writeFieldName($S)", JSON_GENERATOR_VARIABLE_NAME, fieldName);
    }
    builder.addStatement("$L.writeStartArray()", JSON_GENERATOR_VARIABLE_NAME).beginControlFlow(forLine, forLineArgs).beginControlFlow("if ($L != null)", elementVarName);
    parameterType.serialize(builder, depth + 1, collectionVariableName + "Element", processedFieldNames, elementVarName, false, false, false, writeCollectionElementIfNull);
    if (writeCollectionElementIfNull) {
        builder.nextControlFlow("else").addStatement("$L.writeNull()", JSON_GENERATOR_VARIABLE_NAME);
    }
    builder.endControlFlow().endControlFlow().addStatement("$L.writeEndArray()", JSON_GENERATOR_VARIABLE_NAME).endControlFlow();
}
Also used : Type(com.bluelinelabs.logansquare.processor.type.Type)

Aggregations

Type (com.bluelinelabs.logansquare.processor.type.Type)6 JsonToken (com.fasterxml.jackson.core.JsonToken)2 ParameterizedType (com.bluelinelabs.logansquare.ParameterizedType)1 ParameterizedTypeField (com.bluelinelabs.logansquare.processor.type.field.ParameterizedTypeField)1 TypeConverterFieldType (com.bluelinelabs.logansquare.processor.type.field.TypeConverterFieldType)1 ArrayList (java.util.ArrayList)1 Map (java.util.Map)1