Ignore:
Timestamp:
2010-01-11T18:57:34+01:00 (14 years ago)
Author:
mjulius
Message:

fixed potential problem when different primitive types with same IDs are copied

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/PrimitiveDeepCopy.java

    r2305 r2815  
    3636        referenced.clear();
    3737
    38         final Set<Long> visitedIds = new HashSet<Long>();
     38        final Set<Long> visitedNodeIds = new HashSet<Long>();
     39        final Set<Long> visitedWayIds = new HashSet<Long>();
     40        final Set<Long> visitedRelationIds = new HashSet<Long>();
    3941
    4042        new AbstractVisitor() {
     
    4244
    4345            public void visit(Node n) {
    44                 if (!visitedIds.add(n.getUniqueId()))
     46                if (!visitedNodeIds.add(n.getUniqueId()))
    4547                    return;
    46                 (firstIteration?directlyAdded:referenced).add(n.save());
     48                (firstIteration ? directlyAdded : referenced).add(n.save());
    4749            }
    4850            public void visit(Way w) {
    49                 if (!visitedIds.add(w.getUniqueId()))
     51                if (!visitedWayIds.add(w.getUniqueId()))
    5052                    return;
    51                 (firstIteration?directlyAdded:referenced).add(w.save());
     53                (firstIteration ? directlyAdded : referenced).add(w.save());
    5254                firstIteration = false;
    5355                for (Node n : w.getNodes()) {
     
    5557                }
    5658            }
    57             public void visit(Relation e) {
    58                 if (!visitedIds.add(e.getUniqueId()))
     59            public void visit(Relation r) {
     60                if (!visitedRelationIds.add(r.getUniqueId()))
    5961                    return;
    60                 (firstIteration?directlyAdded:referenced).add(e.save());
     62                (firstIteration ? directlyAdded : referenced).add(r.save());
    6163                firstIteration = false;
    62                 for (RelationMember m : e.getMembers()) {
     64                for (RelationMember m : r.getMembers()) {
    6365                    m.getMember().visit(this);
    6466                }
Note: See TracChangeset for help on using the changeset viewer.