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