Ignore:
Timestamp:
2019-06-21T01:53:11+02:00 (5 years ago)
Author:
Don-vip
Message:

fix #17810 - incompletely downloaded turn restrictions sometimes break when splitting the from way (patch by taylor.smock, modified)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java

    r15078 r15186  
    4343    private static volatile Consumer<String> warningNotifier = Logging::warn;
    4444
     45    private static final class RelationInformation {
     46        boolean warnme;
     47        boolean insert;
     48        Relation relation;
     49    }
     50
    4551    /**
    4652     * Sets the global warning notifier.
     
    320326                    boolean insert = true;
    321327                    if (relationSpecialTypes.containsKey(type) && "restriction".equals(relationSpecialTypes.get(type))) {
    322                         Map<String, Boolean> rValue = treatAsRestriction(r, rm, c, newWays, way, changedWay);
    323                         warnme = rValue.containsKey("warnme") ? rValue.get("warnme") : warnme;
    324                         insert = rValue.containsKey("insert") ? rValue.get("insert") : insert;
     328                        RelationInformation rValue = treatAsRestriction(r, rm, c, newWays, way, changedWay);
     329                        warnme = rValue.warnme;
     330                        insert = rValue.insert;
     331                        c = rValue.relation;
    325332                    } else if (!("route".equals(type)) && !("multipolygon".equals(type))) {
    326333                        warnme = true;
     
    410417    }
    411418
    412     private static Map<String, Boolean> treatAsRestriction(Relation r,
     419    private static RelationInformation treatAsRestriction(Relation r,
    413420            RelationMember rm, Relation c, Collection<Way> newWays, Way way,
    414421            Way changedWay) {
    415         HashMap<String, Boolean> rMap = new HashMap<>();
     422        RelationInformation relationInformation = new RelationInformation();
    416423        /* this code assumes the restriction is correct. No real error checking done */
    417424        String role = rm.getRole();
     
    448455                    c.addMember(new RelationMember(role, res));
    449456                    c.removeMembersFor(way);
    450                     rMap.put("insert", false);
     457                    relationInformation.insert = false;
    451458                }
    452459            } else {
    453                 rMap.put("insert", false);
     460                relationInformation.insert = false;
    454461            }
    455462        } else if (!"via".equals(role)) {
    456             rMap.put("warnme", true);
    457         }
    458         return rMap;
     463            relationInformation.warnme = true;
     464        }
     465        relationInformation.relation = c;
     466        return relationInformation;
    459467    }
    460468
Note: See TracChangeset for help on using the changeset viewer.