in facebook-share/src/main/java/com/facebook/internal/CollectionMapper.java [34:87]
public static <T> void iterate(
final Collection<T> collection,
final ValueMapper valueMapper,
final OnMapperCompleteListener onMapperCompleteListener) {
final Mutable<Boolean> didReturnError = new Mutable<Boolean>(false);
final Mutable<Integer> pendingJobCount = new Mutable<Integer>(1);
final OnMapperCompleteListener jobCompleteListener =
new OnMapperCompleteListener() {
@Override
public void onComplete() {
if (didReturnError.value) {
return;
}
if (--pendingJobCount.value == 0) {
onMapperCompleteListener.onComplete();
}
}
@Override
public void onError(FacebookException exception) {
if (didReturnError.value) {
return;
}
didReturnError.value = true;
onMapperCompleteListener.onError(exception);
}
};
Iterator<T> keyIterator = collection.keyIterator();
List<T> keys = new LinkedList<>();
while (keyIterator.hasNext()) {
keys.add(keyIterator.next());
}
for (final T key : keys) {
final Object value = collection.get(key);
final OnMapValueCompleteListener onMapValueCompleteListener =
new OnMapValueCompleteListener() {
@Override
public void onComplete(Object mappedValue) {
collection.set(key, mappedValue, jobCompleteListener);
jobCompleteListener.onComplete();
}
@Override
public void onError(FacebookException exception) {
jobCompleteListener.onError(exception);
}
};
pendingJobCount.value++;
valueMapper.mapValue(value, onMapValueCompleteListener);
}
jobCompleteListener.onComplete();
}