private UMLOperationBodyMapper createMapperForExtractedMethod(UMLOperationBodyMapper mapper,
UMLOperation originalOperation, UMLOperation addedOperation, OperationInvocation addedOperationInvocation) {
List<UMLParameter> originalMethodParameters = originalOperation.getParametersWithoutReturnType();
Map<UMLParameter, UMLParameter> originalMethodParametersPassedAsArgumentsMappedToCalledMethodParameters = new LinkedHashMap<UMLParameter, UMLParameter>();
List<String> arguments = addedOperationInvocation.getArguments();
List<UMLParameter> parameters = addedOperation.getParametersWithoutReturnType();
Map<String, String> parameterToArgumentMap = new LinkedHashMap<String, String>();
int size = Math.min(arguments.size(), parameters.size());
for(int i=0; i<size; i++) {
String argumentName = arguments.get(i);
String parameterName = parameters.get(i).getName();
parameterToArgumentMap.put(parameterName, argumentName);
for(UMLParameter originalMethodParameter : originalMethodParameters) {
if(originalMethodParameter.getName().equals(argumentName)) {
originalMethodParametersPassedAsArgumentsMappedToCalledMethodParameters.put(originalMethodParameter, parameters.get(i));
}
}
}
if(parameterTypesMatch(originalMethodParametersPassedAsArgumentsMappedToCalledMethodParameters)) {
UMLOperation delegateMethod = findDelegateMethod(originalOperation, addedOperation, addedOperationInvocation);
return new UMLOperationBodyMapper(mapper,
delegateMethod != null ? delegateMethod : addedOperation,
new LinkedHashMap<String, String>(), parameterToArgumentMap);
}
return null;
}