@Override
protected void processElement(ProcessorContext context) {
FormattedPrintWriter pw = context.getPrintWriter();
converterProviderPrinter = getConverterProviderPrinter(pw);
TypeElement cachedConverterType = processingEnv.getElementUtils().getTypeElement(BasicCachedConverter.class.getCanonicalName());
ParameterElement[] constructorAdditionalParameters = getParametersResolverProvider().getParameterResolver(UsageType.DEFINITION).getConstructorAditionalParameters();
ConstructorPrinter constructorPrinter = new ConstructorPrinter(context.getOutputType(), processingEnv);
constructorPrinter.printConstructors(cachedConverterType, constructorAdditionalParameters);
TypeElement superClassElement = context.getOutputType().getSuperClass() != null ? context.getOutputType().getSuperClass().asElement() : null;
for (ParameterElement constructorAdditionalParameter: constructorAdditionalParameters) {
String parameterName = constructorAdditionalParameter.getName().toString();
if (constructorAdditionalParameter.getPropagationType().equals(PropagationType.PROPAGATED_MUTABLE) && !containsField(superClassElement, constructorAdditionalParameter)) {
MutableVariableElement field = processingEnv.getElementUtils().getParameterElement(constructorAdditionalParameter.getType(), parameterName);
context.getOutputType().addField((MutableVariableElement) field.addModifier(Modifier.PROTECTED));
MutableExecutableType setterMethod = processingEnv.getTypeUtils().getExecutable(
processingEnv.getTypeUtils().toMutableType(processingEnv.getTypeUtils().getNoType(TypeKind.VOID)), MethodHelper.toSetter(parameterName)).
addParameter(processingEnv.getElementUtils().getParameterElement(constructorAdditionalParameter.getType(), parameterName)).addModifier(Modifier.PUBLIC);
context.getOutputType().addMethod(setterMethod);
setterMethod.getPrintWriter().println("this." + parameterName + " = " + parameterName + ";");
}
}
super.processElement(context);
converterProviderPrinter.printConverterMethods(context.getOutputType(), false, ConverterInstancerType.REFERENCED_CONVERTER_INSTANCER);
}