/** * Adds a field to constructor parameters and body * * @param bodyBuilder * @param constructorBuilder * @param field * @param lazy */ private void addFieldToConstructor(final InvocableMemberBodyBuilder bodyBuilder, final ConstructorMetadataBuilder constructorBuilder, final FieldMetadata field, final boolean lazy) { final String fieldName = field.getFieldName().getSymbolName(); final JavaType fieldType = field.getFieldType(); if (lazy) { importResolver.addImport(SpringJavaType.LAZY); constructorBuilder.addParameterName(field.getFieldName()); constructorBuilder.addParameterType(new AnnotatedJavaType(fieldType, LAZY_ANNOTATION)); } else { constructorBuilder.addParameter(fieldName, fieldType); } bodyBuilder.appendFormalLine(String.format("%s(" + fieldName + ");", getMutatorMethod(field) .getMethodName())); }
public static ConstructorMetadata getConstructor(String declaredByMetadataId, FieldMetadata serviceField, FieldMetadata conversionServiceField) { InvocableMemberBodyBuilder bodyBuilder = new InvocableMemberBodyBuilder(); // Generating constructor ConstructorMetadataBuilder constructor = new ConstructorMetadataBuilder(declaredByMetadataId); constructor.setModifier(Modifier.PUBLIC); constructor.addAnnotation(new AnnotationMetadataBuilder(SpringJavaType.AUTOWIRED)); // add Service to constructor String serviceFieldName = serviceField.getFieldName().getSymbolName(); AnnotatedJavaType serviceParameter = new AnnotatedJavaType(serviceField.getFieldType(), new AnnotationMetadataBuilder( SpringJavaType.LAZY).build()); constructor.addParameterName(serviceField.getFieldName()); constructor.addParameterType(serviceParameter); // Generating body bodyBuilder.appendFormalLine("this.%1$s = %1$s;", serviceFieldName); // add Conversion service to constructor String conversionServiceFieldName = conversionServiceField.getFieldName().getSymbolName(); constructor.addParameter(conversionServiceFieldName, conversionServiceField.getFieldType()); // Generating body bodyBuilder.appendFormalLine("this.%1$s = %1$s;", conversionServiceFieldName); // Adding body constructor.setBodyBuilder(bodyBuilder); return constructor.build(); }