Changeset 2591 in josm


Ignore:
Timestamp:
2009-12-06T20:26:21+01:00 (14 years ago)
Author:
jttt
Message:

Fix #4114 - NPE when zooming out after updating a partially downloaded relation or downloding the referrers of a node

Location:
trunk/src/org/openstreetmap/josm
Files:
4 edited

Legend:

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

    r2589 r2591  
    145145        if (myWay == null)
    146146            throw new RuntimeException(tr("Missing merge target for way with id {0}", other.getUniqueId()));
    147         if (!myWay.isIncomplete() || other.getNodesCount() == 0) return;
    148         for (Node n: myWay.getNodes()) {
    149             if (n.isIncomplete()) return;
    150         }
    151         myWay.setHasIncompleteNodes(false);
     147        myWay.setHasIncompleteNodes();
    152148    }
    153149
     
    168164        if (myNode.isIncomplete() || myNode.isDeleted() || !myNode.isVisible()) return;
    169165
    170         wayloop:
    171             for (Way w: OsmPrimitive.getFilteredList(myNode.getReferrers(), Way.class)) {
    172                 if (w.isDeleted() || ! w.isVisible() || ! w.isIncomplete()) {
    173                     continue;
    174                 }
    175                 for (Node n: w.getNodes()) {
    176                     if (n.isIncomplete()) {
    177                         continue wayloop;
    178                     }
    179                 }
    180                 // all nodes are complete - set the way complete too
    181                 w.setHasIncompleteNodes(false);
    182             }
     166        for (Way w: OsmPrimitive.getFilteredList(myNode.getReferrers(), Way.class)) {
     167            w.setHasIncompleteNodes();
     168        }
    183169    }
    184170
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r2587 r2591  
    11191119        StringBuilder builder = new StringBuilder();
    11201120
     1121        if (isIncomplete()) {
     1122            builder.append("I");
     1123        }
    11211124        if (isModified()) {
    11221125            builder.append("M");
  • trunk/src/org/openstreetmap/josm/data/osm/Way.java

    r2587 r2591  
    378378
    379379    //TODO This method should not be necessary. hasIncomplete state should be updated automatically when incomplete state of nodes change
    380     public void setHasIncompleteNodes(boolean hasIncompleteNodes) {
    381         this.hasIncompleteNodes = hasIncompleteNodes;
     380    public void setHasIncompleteNodes() {
     381        hasIncompleteNodes = false;
     382        for (Node node:getNodes()) {
     383            if (node.isIncomplete()) {
     384                hasIncompleteNodes = true;
     385                break;
     386            }
     387        }
    382388    }
    383389
  • trunk/src/org/openstreetmap/josm/io/OsmReader.java

    r2587 r2591  
    418418        for (Long externalWayId: ways.keySet()) {
    419419            Way w = (Way)externalIdMap.get("w" + externalWayId);
    420             boolean hasIncompleteNodes = false;
    421420            List<Node> wayNodes = new ArrayList<Node>();
    422421            for (long id : ways.get(externalWayId)) {
     
    438437                        ds.addPrimitive(n);
    439438                    }
    440                     hasIncompleteNodes = true;
    441439                }
    442440                wayNodes.add(n);
    443441            }
    444442            w.setNodes(wayNodes);
    445             if (hasIncompleteNodes) {
     443            w.setHasIncompleteNodes();
     444            if (w.hasIncompleteNodes()) {
    446445                if (logger.isLoggable(Level.FINE)) {
    447446                    logger.fine(tr("Marked way {0} with {1} nodes incomplete because at least one node was missing in the " +
    448447                            "loaded data and is therefore incomplete too.", externalWayId, w.getNodesCount()));
    449448                }
    450                 w.setHasIncompleteNodes(true);
    451449                ds.addPrimitive(w);
    452450            } else {
    453                 w.setHasIncompleteNodes(false);
    454451                ds.addPrimitive(w);
    455452            }
Note: See TracChangeset for help on using the changeset viewer.