use of com.bluelinelabs.logansquare.processor.type.Type in project LoganSquare by bluelinelabs.
the class MapCollectionType 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(1);
final String cleanFieldName = TextUtils.toUniqueFieldNameVariable(fieldName, processedFieldNames);
final String mapVariableName = "lslocal" + cleanFieldName;
final String entryVariableName = "entry" + depth;
final String instanceCreator = String.format("final $T<$T, %s> $L = $L", parameterType.getParameterizedTypeString());
final Object[] instanceCreatorArgs = expandStringArgs(Map.class, String.class, parameterType.getParameterizedTypeStringArgs(), mapVariableName, getter);
final String forLine = String.format("for ($T<$T, %s> $L : $L.entrySet())", parameterType.getParameterizedTypeString());
final Object[] forLineArgs = expandStringArgs(Map.Entry.class, String.class, parameterType.getParameterizedTypeStringArgs(), entryVariableName, mapVariableName);
builder.addStatement(instanceCreator, instanceCreatorArgs).beginControlFlow("if ($L != null)", mapVariableName);
if (isObjectProperty) {
builder.addStatement("$L.writeFieldName($S)", JSON_GENERATOR_VARIABLE_NAME, fieldName);
}
builder.addStatement("$L.writeStartObject()", JSON_GENERATOR_VARIABLE_NAME).beginControlFlow(forLine, forLineArgs).addStatement("$L.writeFieldName($L.getKey().toString())", JSON_GENERATOR_VARIABLE_NAME, entryVariableName).beginControlFlow("if ($L.getValue() != null)", entryVariableName);
parameterType.serialize(builder, depth + 1, mapVariableName + "Element", processedFieldNames, entryVariableName + ".getValue()", false, false, true, writeCollectionElementIfNull);
if (writeCollectionElementIfNull) {
builder.nextControlFlow("else").addStatement("$L.writeNull()", JSON_GENERATOR_VARIABLE_NAME);
}
builder.endControlFlow().endControlFlow().addStatement("$L.writeEndObject()", JSON_GENERATOR_VARIABLE_NAME).endControlFlow();
}
use of com.bluelinelabs.logansquare.processor.type.Type in project LoganSquare by bluelinelabs.
the class MapCollectionType method parse.
@Override
public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {
Type parameterType = parameterTypes.get(1);
final String mapVariableName = "map" + depth;
final String keyVariableName = "key" + depth;
final String instanceCreator = String.format("$T<$T, %s> $L = new $T<$T, %s>()", parameterType.getParameterizedTypeString(), parameterType.getParameterizedTypeString());
final Object[] instanceCreatorArgs = expandStringArgs(getTypeName(), String.class, parameterType.getParameterizedTypeStringArgs(), mapVariableName, getTypeName(), String.class, parameterType.getParameterizedTypeStringArgs());
builder.beginControlFlow("if ($L.getCurrentToken() == $T.START_OBJECT)", JSON_PARSER_VARIABLE_NAME, JsonToken.class).addStatement(instanceCreator, instanceCreatorArgs).beginControlFlow("while ($L.nextToken() != $T.END_OBJECT)", JSON_PARSER_VARIABLE_NAME, JsonToken.class).addStatement("$T $L = $L.getText()", String.class, keyVariableName, JSON_PARSER_VARIABLE_NAME).addStatement("$L.nextToken()", JSON_PARSER_VARIABLE_NAME).beginControlFlow("if ($L.getCurrentToken() == $T.VALUE_NULL)", JSON_PARSER_VARIABLE_NAME, JsonToken.class).addStatement("$L.put($L, null)", mapVariableName, keyVariableName).nextControlFlow("else");
parameterType.parse(builder, depth + 1, "$L.put($L, $L)", mapVariableName, keyVariableName);
builder.endControlFlow().endControlFlow().addStatement(setter, expandStringArgs(setterFormatArgs, mapVariableName)).nextControlFlow("else").addStatement(setter, expandStringArgs(setterFormatArgs, "null")).endControlFlow();
}
use of com.bluelinelabs.logansquare.processor.type.Type in project LoganSquare by bluelinelabs.
the class ObjectMapperInjector method setFieldHolderJsonMapperVariableName.
private void setFieldHolderJsonMapperVariableName(Type type) {
if (type instanceof ParameterizedTypeField) {
ParameterizedTypeField parameterizedType = (ParameterizedTypeField) type;
parameterizedType.setJsonMapperVariableName(getJsonMapperVariableNameForTypeParameter(parameterizedType.getParameterName()));
}
for (Type subType : type.parameterTypes) {
setFieldHolderJsonMapperVariableName(subType);
}
}
use of com.bluelinelabs.logansquare.processor.type.Type in project LoganSquare by bluelinelabs.
the class SingleParameterCollectionType method parse.
@Override
public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {
Type parameterType = parameterTypes.get(0);
final String collectionVarName = "collection" + depth;
final String valueVarName = "value" + depth;
final String instanceCreator = String.format("$T<%s> $L = new $T<%s>()", parameterType.getParameterizedTypeString(), parameterType.getParameterizedTypeString());
final Object[] instanceCreatorArgs = expandStringArgs(getTypeName(), parameterType.getParameterizedTypeStringArgs(), collectionVarName, getTypeName(), parameterType.getParameterizedTypeStringArgs());
builder.beginControlFlow("if ($L.getCurrentToken() == $T.START_ARRAY)", JSON_PARSER_VARIABLE_NAME, JsonToken.class).addStatement(instanceCreator, instanceCreatorArgs).beginControlFlow("while ($L.nextToken() != $T.END_ARRAY)", JSON_PARSER_VARIABLE_NAME, JsonToken.class).addStatement("$T $L", parameterType.getTypeName(), valueVarName);
parameterType.parse(builder, depth + 1, "$L = $L", valueVarName);
builder.addStatement("$L.add($L)", collectionVarName, valueVarName).endControlFlow();
builder.addStatement(setter, expandStringArgs(setterFormatArgs, collectionVarName)).nextControlFlow("else").addStatement(setter, expandStringArgs(setterFormatArgs, "null")).endControlFlow();
}
use of com.bluelinelabs.logansquare.processor.type.Type in project LoganSquare by bluelinelabs.
the class ParameterizedTypeField method getParameterizedTypeStringArgs.
@Override
public Object[] getParameterizedTypeStringArgs() {
List<Object> args = new ArrayList<>();
args.add(mTypeName);
for (Type parameterType : parameterTypes) {
args.add(parameterType.getParameterizedTypeStringArgs());
}
return args.toArray(new Object[args.size()]);
}
Aggregations