class MergingCollectionConverter implements ConditionalConverter<Object, Collection<Object>> {
  @Override
  public MatchResult match(Class<?> sourceType, Class<?> destinationType) {
    return Iterables.isIterable(sourceType) && Collection.class.isAssignableFrom(destinationType) ? MatchResult.FULL
        : MatchResult.NONE;
  }

  @Override
  public Collection<Object> convert(MappingContext<Object, Collection<Object>> context) {<FILL_FUNCTION_BODY>}
}

    Object source = context.getSource();
    if (source == null)
      return null;

    int sourceLength = Iterables.getLength(source);
    Collection<Object> originalDestination = context.getDestination();
    Collection<Object> destination = MappingContextHelper.createCollection(context);
    Class<?> elementType = MappingContextHelper.resolveDestinationGenericType(context);

    int index = 0;
    for (Iterator<Object> iterator = Iterables.iterator(source); iterator.hasNext(); index++) {
      Object sourceElement = iterator.next();
      Object element = null;
      if (originalDestination != null)
        element = Iterables.getElement(originalDestination, index);
      if (sourceElement != null) {
        MappingContext<?, ?> elementContext = element == null
            ? context.create(sourceElement, elementType)
            : context.create(sourceElement, element);
        element = context.getMappingEngine().map(elementContext);
      }
      destination.add(element);
    }
    for (Object element : Iterables.subIterable(originalDestination, sourceLength))
      destination.add(element);

    return destination;
  
<no_super_class>