*/
private MemberTypeAdditions getMethodAdditions(final String callerMID,
final String methodName, final JavaType serviceInterface,
final List<MethodParameter> parameters, boolean autowire) {
// The method is supported by this service interface; make a builder
final ClassOrInterfaceTypeDetailsBuilder cidBuilder = new ClassOrInterfaceTypeDetailsBuilder(
callerMID);
final String fieldName = StringUtils.uncapitalize(serviceInterface
.getSimpleTypeName());
if (autowire) {
// Add an autowired field of the type of this service
cidBuilder.addField(new FieldMetadataBuilder(callerMID, 0, Arrays
.asList(new AnnotationMetadataBuilder(AUTOWIRED)),
new JavaSymbolName(fieldName), serviceInterface));
}
else {
// Add a set method of the type of this service
cidBuilder.addField(new FieldMetadataBuilder(callerMID, 0,
new JavaSymbolName(fieldName), serviceInterface, null));
JavaSymbolName setMethodName = new JavaSymbolName("set"
+ serviceInterface.getSimpleTypeName());
List<JavaType> parameterTypes = new ArrayList<JavaType>();
parameterTypes.add(serviceInterface);
List<JavaSymbolName> parameterNames = new ArrayList<JavaSymbolName>();
parameterNames.add(new JavaSymbolName(fieldName));
final InvocableMemberBodyBuilder bodyBuilder = new InvocableMemberBodyBuilder();
bodyBuilder.append("\n\tthis." + fieldName + " = " + fieldName
+ ";\n");
MethodMetadataBuilder setSeviceMethod = new MethodMetadataBuilder(
callerMID, PUBLIC, setMethodName, JavaType.VOID_PRIMITIVE,
AnnotatedJavaType.convertFromJavaTypes(parameterTypes),
parameterNames, bodyBuilder);
cidBuilder.addMethod(setSeviceMethod);
}
// Generate an additions object that includes a call to the method
return MemberTypeAdditions.getInstance(cidBuilder, fieldName,
methodName, false, parameters);