Program: 168752
Project: 168752
Buggy source:
@Override protected DirtyAttributeFlusher<CollectionAttributeFlusher<E,V>,E,V> getDirtyFlusherForRecordingCollection(UpdateContext context,V initial,RecordingCollection<?,?> collection){
  if (collection.hasActions()) {
    boolean queueable=areActionsQueueable(collection);
    if (queueable) {
      if (elementDescriptor.shouldFlushMutations()) {
        if (elementDescriptor.isBasic()) {
          return this;
        }
        @SuppressWarnings("String_Node_Str") List<CollectionElementAttributeFlusher<E,V>> elementFlushers=getElementFlushers(context,(V)collection);
        if (elementFlushers == null) {
          return this;
        }
        int actionUnrelatedDirtyCount=getActionUnrelatedDirtyObjectCount(initial,elementFlushers,collection.getActions());
        if (actionUnrelatedDirtyCount == 0) {
          return partialFlusher(false,PluralFlushOperation.COLLECTION_REPLAY_AND_ELEMENT,collection.resetActions(context),elementFlushers);
        }
 else {
          return partialFlusher(true,PluralFlushOperation.COLLECTION_REPLAY_AND_ELEMENT,collection.resetActions(context),elementFlushers);
        }
      }
 else {
        return partialFlusher(false,PluralFlushOperation.COLLECTION_REPLAY_ONLY,collection.resetActions(context),Collections.<CollectionElementAttributeFlusher<E,V>>emptyList());
      }
    }
 else     if (inverseFlusher != null) {
      Map<Object,Object>[] addedAndRemoved=getAddedAndRemovedElements(collection,(List<CollectionAction<Collection<?>>>)(List<?>)collection.resetActions(context));
      Map<Object,Object> added=addedAndRemoved[0];
      Map<Object,Object> removed=addedAndRemoved[1];
      List<CollectionElementAttributeFlusher<E,V>> elementFlushers=getInverseElementFlushersForActions(context,collection,added,removed);
      return partialFlusher(false,PluralFlushOperation.ELEMENT_ONLY,Collections.EMPTY_LIST,elementFlushers);
    }
 else {
      if (elementDescriptor.shouldFlushMutations()) {
        if (elementDescriptor.isBasic()) {
          return this;
        }
        List<CollectionElementAttributeFlusher<E,V>> elementFlushers=getElementFlushers(context,(V)collection);
        if (elementFlushers == null) {
          return this;
        }
        return getReplayAndElementFlusher(context,initial,(V)collection,collection.resetActions(context),elementFlushers);
      }
 else {
        return getReplayOnlyFlusher(context,initial,(V)collection,collection.resetActions(context));
      }
    }
  }
  if (elementDescriptor.shouldFlushMutations()) {
    if (elementDescriptor.isBasic()) {
      return this;
    }
    return getElementOnlyFlusher(context,(V)collection);
  }
  return null;
}

Fixed version (ground truth):
@Override protected DirtyAttributeFlusher<CollectionAttributeFlusher<E,V>,E,V> getDirtyFlusherForRecordingCollection(UpdateContext context,V initial,RecordingCollection<?,?> collection){
  if (collection.hasActions()) {
    boolean queueable=areActionsQueueable(collection);
    if (queueable) {
      if (elementDescriptor.shouldFlushMutations()) {
        if (elementDescriptor.isBasic()) {
          return this;
        }
        @SuppressWarnings("String_Node_Str") List<CollectionElementAttributeFlusher<E,V>> elementFlushers=getElementFlushers(context,(V)collection);
        if (elementFlushers == null) {
          return this;
        }
        int actionUnrelatedDirtyCount=getActionUnrelatedDirtyObjectCount(initial,elementFlushers,collection.getActions());
        if (actionUnrelatedDirtyCount == 0) {
          return partialFlusher(false,PluralFlushOperation.COLLECTION_REPLAY_AND_ELEMENT,collection.resetActions(context),elementFlushers);
        }
 else {
          return partialFlusher(true,PluralFlushOperation.COLLECTION_REPLAY_AND_ELEMENT,collection.resetActions(context),elementFlushers);
        }
      }
 else {
        return partialFlusher(false,PluralFlushOperation.COLLECTION_REPLAY_ONLY,collection.resetActions(context),Collections.<CollectionElementAttributeFlusher<E,V>>emptyList());
      }
    }
 else     if (inverseFlusher != null) {
      Map<Object,Object>[] addedAndRemoved=getAddedAndRemovedElements(collection,context);
      Map<Object,Object> added=addedAndRemoved[0];
      Map<Object,Object> removed=addedAndRemoved[1];
      List<CollectionElementAttributeFlusher<E,V>> elementFlushers=getInverseElementFlushersForActions(context,collection,added,removed);
      return partialFlusher(false,PluralFlushOperation.ELEMENT_ONLY,Collections.EMPTY_LIST,elementFlushers);
    }
 else {
      if (elementDescriptor.shouldFlushMutations()) {
        if (elementDescriptor.isBasic()) {
          return this;
        }
        List<CollectionElementAttributeFlusher<E,V>> elementFlushers=getElementFlushers(context,(V)collection);
        if (elementFlushers == null) {
          return this;
        }
        return getReplayAndElementFlusher(context,initial,(V)collection,collection.resetActions(context),elementFlushers);
      }
 else {
        return getReplayOnlyFlusher(context,initial,(V)collection,collection.resetActions(context));
      }
    }
  }
  if (elementDescriptor.shouldFlushMutations()) {
    if (elementDescriptor.isBasic()) {
      return this;
    }
    return getElementOnlyFlusher(context,(V)collection);
  }
  return null;
}