Changeset 17408 in josm for trunk/src


Ignore:
Timestamp:
2020-12-14T11:52:24+01:00 (3 years ago)
Author:
GerdP
Message:

fix #20238: update multipolygon on old-style multipolygon action cannot be fully undone

  • make sure that a command to update the relation is generated
  • add unit test
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java

    r17406 r17408  
    339339            return null;
    340340        }
    341         boolean unchanged = rr.a == rr.b;
     341        boolean changedMembers = rr.a != rr.b;
    342342        final Relation existingRelation = rr.a;
    343         final Relation relation = rr.b;
     343        final Relation relation = changedMembers ? rr.b : new Relation(rr.a);
    344344
    345345        final List<Command> list = removeTagsFromWaysIfNeeded(relation);
     
    349349            commandName = getName(false);
    350350        } else {
    351             if (!unchanged) {
    352                 if (relation.getKeys().equals(existingRelation.getKeys()))
    353                     list.add(new ChangeMembersCommand(existingRelation, new ArrayList<>(relation.getMembers())));
    354                 else
    355                     list.add(new ChangeCommand(existingRelation, relation));
     351            boolean changedKeys = !relation.getKeys().equals(existingRelation.getKeys());
     352            if (changedKeys && changedMembers)
     353                list.add(new ChangeCommand(existingRelation, relation));
     354            else if (changedMembers) {
     355                list.add(new ChangeMembersCommand(existingRelation, new ArrayList<>(relation.getMembers())));
     356            } else if (changedKeys) {
     357                list.add(ChangePropertyCommand.build(existingRelation, relation));
    356358            }
    357359            if (list.isEmpty()) {
    358                 if (unchanged) {
     360                if (!changedMembers) {
    359361                    MultipolygonTest mpTest = new MultipolygonTest();
    360362                    mpTest.visit(existingRelation);
Note: See TracChangeset for help on using the changeset viewer.