Ticket #19680: 19680.patch

File 19680.patch, 1.9 KB (added by GerdP, 6 years ago)
  • src/reverter/ChangesetReverter.java

     
    1414import java.util.Iterator;
    1515import java.util.List;
    1616import java.util.Map;
     17import java.util.stream.Collectors;
    1718
    1819import org.openstreetmap.josm.command.Command;
    1920import org.openstreetmap.josm.command.DeleteCommand;
     
    2728import org.openstreetmap.josm.data.osm.DataSet;
    2829import org.openstreetmap.josm.data.osm.Node;
    2930import org.openstreetmap.josm.data.osm.OsmPrimitive;
     31import org.openstreetmap.josm.data.osm.OsmPrimitiveComparator;
    3032import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    3133import org.openstreetmap.josm.data.osm.PrimitiveId;
    3234import org.openstreetmap.josm.data.osm.Relation;
     
    444446        /* Check referrers for deleted objects: if object is referred by another object that
    445447         * isn't going to be deleted or modified, create a conflict.
    446448         */
    447         for (Iterator<OsmPrimitive> it = toDelete.iterator(); it.hasNext();) {
    448             OsmPrimitive p = it.next();
     449                List<OsmPrimitive> delSorted = toDelete.stream()
     450                                .sorted(OsmPrimitiveComparator.orderingRelationsWaysNodes())
     451                                .collect(Collectors.toList());
     452        for (OsmPrimitive p : delSorted) {
    449453            if (p.isDeleted()) {
    450                 it.remove();
     454                toDelete.remove(p);
    451455                continue;
    452456            }
    453457            for (OsmPrimitive referrer : p.getReferrers()) {
     
    460464                    cmds.add(new ConflictAddCommand(layer.data, createConflict(p, true)));
    461465                    conflicted.add(p);
    462466                }
    463                 it.remove();
     467                toDelete.remove(p);
    464468                break;
    465469            }
    466470        }