Search in sources :

Example 1 with Type

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();
}
Also used : Type(com.bluelinelabs.logansquare.processor.type.Type) Map(java.util.Map)

Example 2 with Type

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();
}
Also used : Type(com.bluelinelabs.logansquare.processor.type.Type) JsonToken(com.fasterxml.jackson.core.JsonToken)

Example 3 with Type

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);
    }
}
Also used : Type(com.bluelinelabs.logansquare.processor.type.Type) TypeConverterFieldType(com.bluelinelabs.logansquare.processor.type.field.TypeConverterFieldType) ParameterizedType(com.bluelinelabs.logansquare.ParameterizedType) ParameterizedTypeField(com.bluelinelabs.logansquare.processor.type.field.ParameterizedTypeField)

Example 4 with Type

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();
}
Also used : Type(com.bluelinelabs.logansquare.processor.type.Type) JsonToken(com.fasterxml.jackson.core.JsonToken)

Example 5 with Type

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()]);
}
Also used : Type(com.bluelinelabs.logansquare.processor.type.Type) ArrayList(java.util.ArrayList)

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