java类com.squareup.javapoet.MethodSpec.Builder的实例源码

StringFieldType.java 文件源码 项目:GitHub 阅读 24 收藏 0 点赞 0 评论 0
@Override
public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {
    if (checkIfNull) {
        builder.beginControlFlow("if ($L != null)", getter);
    }

    if (isObjectProperty) {
        builder.addStatement("$L.writeStringField($S, $L)", JSON_GENERATOR_VARIABLE_NAME, fieldName, getter);
    } else {
        builder.addStatement("$L.writeString($L)", JSON_GENERATOR_VARIABLE_NAME, getter);
    }

    if (checkIfNull) {
        if (writeIfNull) {
            builder.nextControlFlow("else");

            if (isObjectProperty) {
                builder.addStatement("$L.writeFieldName($S)", JSON_GENERATOR_VARIABLE_NAME, fieldName);
            }
            builder.addStatement("$L.writeNull()", JSON_GENERATOR_VARIABLE_NAME);
        }

        builder.endControlFlow();
    }
}
ParameterizedTypeField.java 文件源码 项目:GitHub 阅读 20 收藏 0 点赞 0 评论 0
@Override
public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {
    if (checkIfNull) {
        builder.beginControlFlow("if ($L != null)", getter);
    }

    if (isObjectProperty) {
        builder.addStatement("$L.writeFieldName($S)", JSON_GENERATOR_VARIABLE_NAME, fieldName);
    }
    builder.addStatement("$L.serialize($L, $L, true)", mJsonMapperVariableName, getter, JSON_GENERATOR_VARIABLE_NAME);

    if (checkIfNull) {
        if (writeIfNull) {
            builder.nextControlFlow("else");

            if (isObjectProperty) {
                builder.addStatement("$L.writeFieldName($S)", JSON_GENERATOR_VARIABLE_NAME, fieldName);
            }
            builder.addStatement("$L.writeNull()", JSON_GENERATOR_VARIABLE_NAME);
        }
        builder.endControlFlow();
    }
}
BooleanFieldType.java 文件源码 项目:GitHub 阅读 19 收藏 0 点赞 0 评论 0
@Override
public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {
    if (!isPrimitive && checkIfNull) {
        builder.beginControlFlow("if ($L != null)", getter);
    }

    if (isObjectProperty) {
        builder.addStatement("$L.writeBooleanField($S, $L)", JSON_GENERATOR_VARIABLE_NAME, fieldName, getter);
    } else {
        builder.addStatement("$L.writeBoolean($L)", JSON_GENERATOR_VARIABLE_NAME, getter);
    }

    if (!isPrimitive && checkIfNull) {
        if (writeIfNull) {
            builder.nextControlFlow("else");

            if (isObjectProperty) {
                builder.addStatement("$L.writeFieldName($S)", JSON_GENERATOR_VARIABLE_NAME, fieldName);
            }
            builder.addStatement("$L.writeNull()", JSON_GENERATOR_VARIABLE_NAME);
        }

        builder.endControlFlow();
    }
}
NumberFieldType.java 文件源码 项目:GitHub 阅读 23 收藏 0 点赞 0 评论 0
@Override
public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {
    if (!isPrimitive && checkIfNull) {
        builder.beginControlFlow("if ($L != null)", getter);
    }

    if (isObjectProperty) {
        builder.addStatement("$L.writeNumberField($S, $L)", JSON_GENERATOR_VARIABLE_NAME, fieldName, getter);
    } else {
        builder.addStatement("$L.writeNumber($L)", JSON_GENERATOR_VARIABLE_NAME, getter);
    }

    if (!isPrimitive && checkIfNull) {
        if (writeIfNull) {
            builder.nextControlFlow("else");

            if (isObjectProperty) {
                builder.addStatement("$L.writeFieldName($S)", JSON_GENERATOR_VARIABLE_NAME, fieldName);
            }
            builder.addStatement("$L.writeNull()", JSON_GENERATOR_VARIABLE_NAME);
        }

        builder.endControlFlow();
    }
}
JsonFieldType.java 文件源码 项目:GitHub 阅读 19 收藏 0 点赞 0 评论 0
@Override
public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {

    if (checkIfNull) {
        builder.beginControlFlow("if ($L != null)", getter);
    }

    if (isObjectProperty) {
        builder.addStatement("$L.writeFieldName($S)", JSON_GENERATOR_VARIABLE_NAME, fieldName);
    }

    builder.addStatement("$L.serialize($L, $L, true)", mMapperVariableName, getter, JSON_GENERATOR_VARIABLE_NAME);

    if (checkIfNull) {
        if (writeIfNull) {
            builder.nextControlFlow("else");

            if (isObjectProperty) {
                builder.addStatement("$L.writeFieldName($S)", JSON_GENERATOR_VARIABLE_NAME, fieldName);
            }
            builder.addStatement("$L.writeNull()", JSON_GENERATOR_VARIABLE_NAME);
        }

        builder.endControlFlow();
    }
}
DynamicFieldType.java 文件源码 项目:GitHub 阅读 21 收藏 0 点赞 0 评论 0
@Override
public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {
    if (!mTypeName.isPrimitive() && checkIfNull) {
        builder.beginControlFlow("if ($L != null)", getter);
    }

    builder.addStatement("$T.typeConverterFor($T.class).serialize($L, $S, $L, $L)", LoganSquare.class, mTypeName, getter, isObjectProperty
            ? fieldName : null, isObjectProperty, JSON_GENERATOR_VARIABLE_NAME);

    if (!mTypeName.isPrimitive() && checkIfNull) {
        if (writeIfNull) {
            builder.nextControlFlow("else");

            if (isObjectProperty) {
                builder.addStatement("$L.writeFieldName($S)", JSON_GENERATOR_VARIABLE_NAME, fieldName);
            }
            builder.addStatement("$L.writeNull()", JSON_GENERATOR_VARIABLE_NAME);
        }
        builder.endControlFlow();
    }
}
UnknownFieldType.java 文件源码 项目:GitHub 阅读 23 收藏 0 点赞 0 评论 0
@Override
public void serialize(Builder builder, int depth, String fieldName, List<String> processedFieldNames, String getter, boolean isObjectProperty, boolean checkIfNull, boolean writeIfNull, boolean writeCollectionElementIfNull) {
    if (checkIfNull) {
        builder.beginControlFlow("if ($L != null)", getter);
    }

    builder.addStatement("$L.serialize($L, $L, $L)", ObjectMapperInjector.getMapperVariableName(ObjectMapper.class), getter, JSON_GENERATOR_VARIABLE_NAME, isObjectProperty);

    if (checkIfNull) {
        if (writeIfNull) {
            builder.nextControlFlow("else");

            if (isObjectProperty) {
                builder.addStatement("$L.writeFieldName($S)", JSON_GENERATOR_VARIABLE_NAME, fieldName);
            }
            builder.addStatement("$L.writeNull()", JSON_GENERATOR_VARIABLE_NAME);
        }

        builder.endControlFlow();
    }
}
ValueTypeFactory.java 文件源码 项目:dataenum 阅读 29 收藏 0 点赞 0 评论 0
private static MethodSpec createAsSpecMethod(OutputValue value, OutputSpec spec) {
  List<TypeVariableName> missingTypeVariables = extractMissingTypeVariablesForValue(value, spec);

  Builder builder =
      MethodSpec.methodBuilder("as" + spec.outputClass().simpleName())
          .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
          .returns(spec.parameterizedOutputClass())
          .addTypeVariables(missingTypeVariables)
          .addStatement("return ($T) this", spec.parameterizedOutputClass());

  // if there are type variables that this sub-type doesn't use, they will lead to 'unchecked
  // cast'
  // warnings when compiling the generated code. These warnings are safe to suppress, since this
  // sub type will never use those type variables.
  if (!missingTypeVariables.isEmpty()) {
    builder.addAnnotation(SUPPRESS_UNCHECKED_WARNINGS);
  }

  return builder.build();
}
AnnotatedDurableEntityClass.java 文件源码 项目:mnemonic 阅读 23 收藏 0 点赞 0 评论 0
protected void buildExtraMethodSpecs(TypeSpec.Builder typespecbuilder) throws AnnotationProcessingException {
  MethodInfo methodinfo;
  CodeBlock.Builder code;
  for (String name : m_extramtdinfo.keySet()) {
    methodinfo = m_extramtdinfo.get(name);
    code = CodeBlock.builder();
    switch (name) {
      case "getNativeFieldInfo_static":
        code.addStatement("return $1N", m_fieldsinfo.get("nfieldinfo").name);
        break;
      default:
        throw new AnnotationProcessingException(null, "Method %s is not supported.", name);
    }
    typespecbuilder.addMethod(methodinfo.specbuilder.addCode(code.build()).build());
  }
}
SensorAnnotationsFileBuilder.java 文件源码 项目:SensorAnnotations 阅读 26 收藏 0 点赞 0 评论 0
/**
 * Creates the implementation of {@code SensorEventListener#onSensorChanged(SensorEvent)} which
 * calls the annotated method on our target class.
 *
 * @param annotatedMethod Method annotated with {@code OnSensorChanged}.
 * @return {@link MethodSpec} of {@code SensorEventListener#onSensorChanged(SensorEvent)}.
 */
@NonNull
private static MethodSpec createOnSensorChangedListenerMethod(
    @Nullable AnnotatedMethod annotatedMethod) {
    ParameterSpec sensorEventParameter = ParameterSpec.builder(SENSOR_EVENT, "event").build();
    Builder methodBuilder =
        getBaseMethodBuilder("onSensorChanged").addParameter(sensorEventParameter);

    if (annotatedMethod != null) {
        ExecutableElement sensorChangedExecutableElement =
            annotatedMethod.getExecutableElement();
        methodBuilder.addStatement("target.$L($N)",
            sensorChangedExecutableElement.getSimpleName(), sensorEventParameter);
    }

    return methodBuilder.build();
}
SensorAnnotationsFileBuilder.java 文件源码 项目:SensorAnnotations 阅读 25 收藏 0 点赞 0 评论 0
/**
 * Creates the implementation of {@code SensorEventListener#onAccuracyChanged(Sensor, int)}
 * which calls the annotated method on our target class.
 *
 * @param annotatedMethod Method annotated with {@link OnAccuracyChanged}.
 * @return {@link MethodSpec} of {@code SensorEventListener#onAccuracyChanged(Sensor, int)}.
 */
@NonNull
private static MethodSpec createOnAccuracyChangedListenerMethod(
    @Nullable AnnotatedMethod annotatedMethod) {
    ParameterSpec sensorParameter = ParameterSpec.builder(SENSOR, "sensor").build();
    ParameterSpec accuracyParameter = ParameterSpec.builder(TypeName.INT, "accuracy").build();
    Builder methodBuilder =
        getBaseMethodBuilder("onAccuracyChanged").addParameter(sensorParameter)
            .addParameter(accuracyParameter);

    if (annotatedMethod != null) {
        ExecutableElement accuracyChangedExecutableElement =
            annotatedMethod.getExecutableElement();
        methodBuilder.addStatement("target.$L($N, $N)",
            accuracyChangedExecutableElement.getSimpleName(), sensorParameter,
            accuracyParameter);
    }

    return methodBuilder.build();
}
BsoneeCodecProviderGenerator.java 文件源码 项目:bsoneer 阅读 23 收藏 0 点赞 0 评论 0
public JavaFile getJavaFile() {
    ClassName bsoneerCodecProviderClassName = ClassName.get(basePackage, "BsoneeCodecProvider");

    TypeSpec.Builder codecProviderBuilder = TypeSpec.classBuilder(bsoneerCodecProviderClassName.simpleName())
            .addJavadoc(ProcessorJavadocs.GENERATED_BY_BSONEER)
            .addSuperinterface(CodeUtil.bsonCodecProviderTypeName())
            .addModifiers(PUBLIC).addAnnotation(AnnotationSpec.builder(Generated.class)
                    .addMember("value", "$S", BsonProcessor.class.getCanonicalName())
                    .build());;

    addBaseConstructor(codecProviderBuilder);
    addGetCodecMethod(codecProviderBuilder);

    return JavaFile.builder(bsoneerCodecProviderClassName.packageName(), codecProviderBuilder.build())
            .addFileComment(ProcessorJavadocs.GENERATED_BY_BSONEER)
            .indent("\t")
            .build();
}
BsoneeCodecProviderGenerator.java 文件源码 项目:bsoneer 阅读 24 收藏 0 点赞 0 评论 0
private void addGetCodecMethod(com.squareup.javapoet.TypeSpec.Builder codecProviderBuilder) {
    TypeVariableName typeVariableName = TypeVariableName.get("T");
    TypeName clazzName = ParameterizedTypeName.get(ClassName.get(Class.class), typeVariableName);
    TypeName codecName = ParameterizedTypeName.get((ClassName) CodeUtil.bsonCodecTypeName(), typeVariableName);

    Builder methodSpec = MethodSpec.methodBuilder("get")
            .addAnnotation(Override.class)
            .addAnnotation(Util.suppressWarningsAnnotation(true, false))
            .addModifiers(Modifier.PUBLIC)
            .addParameter(ParameterSpec.builder(clazzName, "clazz", Modifier.FINAL).build())
            .addParameter(CodeUtil.bsonRegistryParameter())
            .addTypeVariable(typeVariableName)
            .returns(codecName)
            .addJavadoc("{@inhericDoc}\n");

    for (ClassName entityClassName : generated) {
        ClassName bsoneerCodecClassName = Util.bsoneeName(entityClassName, GeneratedClasses.BSONEE_CODEC_SUFFIX);
        methodSpec.beginControlFlow("if (clazz == $T.class)", entityClassName);
        methodSpec.addStatement("return (Codec<T>) new $T(registry)", bsoneerCodecClassName);
        methodSpec.endControlFlow();
    }

    methodSpec.addStatement("return null");
    codecProviderBuilder.addMethod(methodSpec.build());
}
SetterGenerator.java 文件源码 项目:bsoneer 阅读 22 收藏 0 点赞 0 评论 0
public void writeBody(TypeSpec.Builder codecBuilder, ClassName entityClassName) {
    TypeName setterIface = ParameterizedTypeName.get(ClassName.get(BsoneeBaseSetter.class), entityClassName);
    Map<String, String> setters = new LinkedHashMap<String, String>();

    for (Property property : bean.getOwnAndInheritedProperties()) {
        String setterClassName = property.getUpperName() + "Setter";
        setters.put(property.getBsonNames().iterator().next(), setterClassName);
        codecBuilder.addType(createSetterClass(entityClassName, setterIface, setterClassName, property).build());
    }

    Builder setupSetterBuilder = MethodSpec.methodBuilder("setupSetters").addModifiers(Modifier.PROTECTED);
    for (Entry<String, String> entry : setters.entrySet()) {
        setupSetterBuilder.addStatement("settersByName.put(\"$L\",new $L())",
                entry.getKey(), entry.getValue());
    }
    codecBuilder.addMethod(setupSetterBuilder.build());
}
ConversionObjectIdCodeGen.java 文件源码 项目:bsoncodec-apt 阅读 19 收藏 0 点赞 0 评论 0
@Override
public void addDecodeStatements(CodeGeneratorContext ctx) {
    Builder builder = ctx.builder();
    IdModel idModel = ctx.field().idModel();

    builder.addStatement("$T id = reader.readObjectId()", ObjectId.class);

    if (idModel != null) {
        if (idModel.conversion() == IdConversion.HEX_OBJECTID) {
            builder.addStatement(ctx.setter("id.toHexString()"));
        }
        else if (idModel.conversion() == IdConversion.BASE64_OBJECTID) {
            builder.addStatement(
                    ctx.setter("$T.getUrlEncoder().encodeToString(id.toByteArray())"),
                    Base64.class);
        }
    }
}
ConversionUUIDCodeGen.java 文件源码 项目:bsoncodec-apt 阅读 17 收藏 0 点赞 0 评论 0
@Override
public void addDecodeStatements(CodeGeneratorContext ctx) {
    Builder builder = ctx.builder();
    IdModel idModel = ctx.field().idModel();

    builder.addStatement("$T id = this.uUIDCodec.decode(reader, decoderContext)",
            UUID.class);

    if (idModel != null) {
        if (idModel.conversion() == IdConversion.HEX_UUID) {
            builder.addStatement(ctx.setter("id.toString()"));
        }
        else if (idModel.conversion() == IdConversion.BASE64_UUID) {
            builder.addStatement("$T bb = $T.wrap(new byte[16])", ByteBuffer.class,
                    ByteBuffer.class);
            builder.addStatement("bb.putLong(id.getMostSignificantBits())");
            builder.addStatement("bb.putLong(id.getLeastSignificantBits())");
            builder.addStatement(
                    ctx.setter("$T.getUrlEncoder().encodeToString(bb.array())"),
                    Base64.class);
        }
    }
}
BooleanFieldType.java 文件源码 项目:GitHub 阅读 20 收藏 0 点赞 0 评论 0
@Override
public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {
    if (isPrimitive) {
        setter = replaceLastLiteral(setter, "$L.getValueAsBoolean()");
        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));
    } else {
        setter = replaceLastLiteral(setter, "$L.getCurrentToken() == $T.VALUE_NULL ? null : Boolean.valueOf($L.getValueAsBoolean())");
        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME, JsonToken.class, JSON_PARSER_VARIABLE_NAME));
    }
}
ByteFieldType.java 文件源码 项目:GitHub 阅读 22 收藏 0 点赞 0 评论 0
@Override
public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {
    if (isPrimitive) {
        setter = replaceLastLiteral(setter, "(byte)$L.getValueAsInt()");
        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));
    } else {
        setter = replaceLastLiteral(setter, "$L.getCurrentToken() == $T.VALUE_NULL ? null : Byte.valueOf((byte)$L.getValueAsInt())");
        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME, JsonToken.class, JSON_PARSER_VARIABLE_NAME));
    }
}
DoubleFieldType.java 文件源码 项目:GitHub 阅读 21 收藏 0 点赞 0 评论 0
@Override
public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {
    if (isPrimitive) {
        setter = replaceLastLiteral(setter, "$L.getValueAsDouble()");
        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));
    } else {
        setter = replaceLastLiteral(setter, "$L.getCurrentToken() == $T.VALUE_NULL ? null : Double.valueOf($L.getValueAsDouble())");
        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME, JsonToken.class, JSON_PARSER_VARIABLE_NAME));
    }
}
LongFieldType.java 文件源码 项目:GitHub 阅读 22 收藏 0 点赞 0 评论 0
@Override
public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {
    if (isPrimitive) {
        setter = replaceLastLiteral(setter, "$L.getValueAsLong()");
        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));
    } else {
        setter = replaceLastLiteral(setter, "$L.getCurrentToken() == $T.VALUE_NULL ? null : Long.valueOf($L.getValueAsLong())");
        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME, JsonToken.class, JSON_PARSER_VARIABLE_NAME));
    }
}
FloatFieldType.java 文件源码 项目:GitHub 阅读 24 收藏 0 点赞 0 评论 0
@Override
public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {
    if (isPrimitive) {
        setter = replaceLastLiteral(setter, "(float)$L.getValueAsDouble()");
        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));
    } else {
        setter = replaceLastLiteral(setter, "$L.getCurrentToken() == $T.VALUE_NULL ? null : new Float($L.getValueAsDouble())");
        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME, JsonToken.class, JSON_PARSER_VARIABLE_NAME));
    }
}
IntegerFieldType.java 文件源码 项目:GitHub 阅读 24 收藏 0 点赞 0 评论 0
@Override
public void parse(Builder builder, int depth, String setter, Object... setterFormatArgs) {
    if (isPrimitive) {
        setter = replaceLastLiteral(setter, "$L.getValueAsInt()");
        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME));
    } else {
        setter = replaceLastLiteral(setter, "$L.getCurrentToken() == $T.VALUE_NULL ? null : Integer.valueOf($L.getValueAsInt())");
        builder.addStatement(setter, expandStringArgs(setterFormatArgs, JSON_PARSER_VARIABLE_NAME, JsonToken.class, JSON_PARSER_VARIABLE_NAME));
    }
}
MapCollectionType.java 文件源码 项目:GitHub 阅读 24 收藏 0 点赞 0 评论 0
@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();
}
SingleParameterCollectionType.java 文件源码 项目:GitHub 阅读 28 收藏 0 点赞 0 评论 0
@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();
}
SingleParameterCollectionType.java 文件源码 项目:GitHub 阅读 18 收藏 0 点赞 0 评论 0
@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();
}
ValueTypeFactory.java 文件源码 项目:dataenum 阅读 22 收藏 0 点赞 0 评论 0
public static TypeSpec create(
    OutputValue value, OutputSpec spec, MatchMethods matchMethods, MapMethods mapMethods)
    throws ParserException {

  TypeSpec.Builder typeBuilder =
      TypeSpec.classBuilder(value.outputClass())
          .addTypeVariables(value.typeVariables())
          .superclass(getSuperclassForValue(value, spec))
          .addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL);

  typeBuilder.addMethod(createConstructor(value));
  typeBuilder.addFields(createFields(value));
  typeBuilder.addMethods(createGetters(value));
  typeBuilder.addMethod(createEquals(value));

  typeBuilder.addMethod(createHashCode(value));

  typeBuilder.addMethod(createToString(value));
  typeBuilder.addMethod(matchMethods.createFoldVoidMethod(value));
  typeBuilder.addMethod(mapMethods.createFoldMethod(value));

  if (spec.hasTypeVariables()) {
    typeBuilder.addMethod(createAsSpecMethod(value, spec));
  }

  return typeBuilder.build();
}
ValueTypeFactory.java 文件源码 项目:dataenum 阅读 25 收藏 0 点赞 0 评论 0
private static MethodSpec createConstructor(OutputValue value) {
  MethodSpec.Builder constructor = MethodSpec.constructorBuilder().addModifiers(Modifier.PRIVATE);
  for (Parameter parameter : value.parameters()) {
    constructor.addParameter(parameter.type(), parameter.name());

    if (parameter.type().isPrimitive() || parameter.canBeNull()) {
      constructor.addStatement("this.$1L = $1L", parameter.name());
    } else {
      constructor.addStatement("this.$1L = checkNotNull($1L)", parameter.name());
    }
  }
  return constructor.build();
}
ValueTypeFactory.java 文件源码 项目:dataenum 阅读 27 收藏 0 点赞 0 评论 0
private static MethodSpec createGetter(Parameter parameter) {
  MethodSpec.Builder builder =
      MethodSpec.methodBuilder(parameter.name())
          .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
          .returns(parameter.type())
          .addStatement("return $L", parameter.name());

  if (parameter.canBeNull()) {
    builder.addAnnotation(Nullable.class);
  } else if (!parameter.type().isPrimitive()) {
    builder.addAnnotation(Nonnull.class);
  }

  return builder.build();
}
ValueTypeFactory.java 文件源码 项目:dataenum 阅读 25 收藏 0 点赞 0 评论 0
private static MethodSpec createHashCode(OutputValue value) {
  MethodSpec.Builder result =
      MethodSpec.methodBuilder("hashCode")
          .addAnnotation(Override.class)
          .addModifiers(Modifier.PUBLIC)
          .returns(int.class);

  if (!value.hasParameters()) {
    result.addStatement("return 0");
    return result.build();
  }

  result.addStatement("int result = 0");
  for (Parameter parameter : value.parameters()) {
    String fieldName = parameter.name();
    result.addCode("result = result * 31 + ");
    if (parameter.type().isPrimitive()) {
      TypeName boxedType = parameter.type().box();
      result.addStatement("$T.valueOf($L).hashCode()", boxedType, fieldName);
    } else {
      if (parameter.canBeNull()) {
        result.addStatement("($1L != null ? $1L.hashCode() : 0)", fieldName);
      } else {
        result.addStatement("$L.hashCode()", fieldName);
      }
    }
  }
  result.addStatement("return result");
  return result.build();
}
ValueTypeFactory.java 文件源码 项目:dataenum 阅读 26 收藏 0 点赞 0 评论 0
private static MethodSpec createToString(OutputValue value) {
  MethodSpec.Builder result =
      MethodSpec.methodBuilder("toString")
          .addAnnotation(Override.class)
          .addModifiers(Modifier.PUBLIC)
          .returns(String.class);

  if (!value.parameters().iterator().hasNext()) {
    result.addStatement("return \"$L{}\"", value.name());
    return result.build();
  }

  result.addStatement("$1T builder = new $1T()", StringBuilder.class);

  boolean first = true;
  for (Parameter parameter : value.parameters()) {
    String fieldName = parameter.name();

    if (first) {
      first = false;
      result.addStatement("builder.append(\"$2L{$1N=\").append($1L)", fieldName, value.name());
    } else {
      result.addStatement("builder.append(\", $1N=\").append($1L)", fieldName);
    }
  }

  result.addStatement("return builder.append('}').toString()", value.name());

  return result.build();
}


问题


面经


文章

微信
公众号

扫码关注公众号