final ACollectionHelper h = worker.getHelpers();
final List<Object> oldColl = (List<Object>) h.asJuCollection(sourceOld, types.source());
final List<Object> newColl = (List<Object>) h.asJuCollection(sourceNew, types.source());
final AQualifiedSourceAndTargetType elementTypes = AQualifiedSourceAndTargetType.create (h.elementType(types.source()), h.elementType(types.target()));
final AIdentifierExtractor identifierExtractor = worker.getIdentifierExtractor();
final APredicate2NoThrow <Object, Object> equalsPredicate = new APredicate2NoThrow<Object, Object> () {
@Override public boolean apply (Object param1, Object param2) {
final Object ident1 = identifierExtractor.uniqueIdentifier (param1, types.source(), types.target());
final Object ident2 = identifierExtractor.uniqueIdentifier (param2, types.source(), types.target());
return Objects.equals (ident1, ident2);
}
};
LevenshteinDistance<Object, Object> levenshtein = new LevenshteinDistance<> (newColl, oldColl, equalsPredicate);
List<LevenshteinDistance.EditChoice> editPath = levenshtein.getEditPath();
int i=0;
int j=0;
for (LevenshteinDistance.EditChoice c: editPath) {
final APath elPath = path.withElementChild (j, worker.getIdentifierExtractor().uniqueIdentifier (oldColl.get (j), elementTypes.source (), elementTypes.target ()));
switch (c) {
case replace:
case noOp: {
worker.diff (elPath, oldColl.get (j), newColl.get (i), elementTypes, contextOld, contextNew, isDerived);
i++;