Changeset 17110 in josm


Ignore:
Timestamp:
2020-10-08T10:37:27+02:00 (4 years ago)
Author:
GerdP
Message:

see #19885: memory leak with "temporary" objects in validator and actions
first bunch of changes

  • use ChangeNodesCommand instead of ChangeCommand
  • call DataSet.clearSelectionHistory() in Dataset.clear()
  • remove fake parent way in AbstractMapRenderer
Location:
trunk/src/org/openstreetmap/josm
Files:
7 edited

Legend:

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

    r16438 r17110  
    1616
    1717import org.openstreetmap.josm.command.AddCommand;
    18 import org.openstreetmap.josm.command.ChangeCommand;
     18import org.openstreetmap.josm.command.ChangeNodesCommand;
    1919import org.openstreetmap.josm.command.Command;
    2020import org.openstreetmap.josm.command.SequenceCommand;
     
    234234            cmds.add(new AddCommand(ds, newWay));
    235235        } else {
    236             Way newWay = new Way(existingWay);
    237             newWay.setNodes(nodesToAdd);
    238             cmds.add(new ChangeCommand(ds, existingWay, newWay));
     236            cmds.add(new ChangeNodesCommand(ds, existingWay, nodesToAdd));
    239237        }
    240238
  • trunk/src/org/openstreetmap/josm/actions/SimplifyWayAction.java

    r16630 r17110  
    3131import javax.swing.event.ChangeListener;
    3232
    33 import org.openstreetmap.josm.command.ChangeCommand;
     33import org.openstreetmap.josm.command.ChangeNodesCommand;
    3434import org.openstreetmap.josm.command.Command;
    3535import org.openstreetmap.josm.command.DeleteCommand;
     
    411411
    412412        Collection<Command> cmds = new LinkedList<>();
    413         Way newWay = new Way(w);
    414         newWay.setNodes(newNodes);
    415         cmds.add(new ChangeCommand(w, newWay));
     413        cmds.add(new ChangeNodesCommand(w, newNodes));
    416414        cmds.add(new DeleteCommand(w.getDataSet(), delNodes));
    417415        w.getDataSet().clearSelection(delNodes);
  • trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java

    r15063 r17110  
    490490                            UndoRedoHandler.getInstance().add(deleteCmd);
    491491                        }
     492                        newWay.setNodes(null);
    492493                    } else {
    493494                        UndoRedoHandler.getInstance().add(new ChangeCommand(targetWay, newWay));
  • trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java

    r16968 r17110  
    1717import java.util.Iterator;
    1818import java.util.LinkedList;
     19import java.util.List;
    1920import java.util.Optional;
    2021
     
    2324import org.openstreetmap.josm.actions.MergeNodesAction;
    2425import org.openstreetmap.josm.command.AddCommand;
    25 import org.openstreetmap.josm.command.ChangeCommand;
     26import org.openstreetmap.josm.command.ChangeNodesCommand;
    2627import org.openstreetmap.josm.command.Command;
    2728import org.openstreetmap.josm.command.MoveCommand;
     
    12421243            for (WaySegment virtualWay : virtualWays) {
    12431244                Way w = virtualWay.way;
    1244                 Way wnew = new Way(w);
    1245                 wnew.addNode(virtualWay.lowerIndex + 1, virtualNode);
    1246                 virtualCmds.add(new ChangeCommand(ds, w, wnew));
     1245                List<Node> modNodes = w.getNodes();
     1246                modNodes.add(virtualWay.lowerIndex + 1, virtualNode);
     1247                virtualCmds.add(new ChangeNodesCommand(ds, w, modNodes));
    12471248            }
    12481249            virtualCmds.add(new MoveCommand(ds, virtualNode, startEN, currentEN));
  • trunk/src/org/openstreetmap/josm/data/osm/DataSet.java

    r16553 r17110  
    10961096        update(() -> {
    10971097            clearSelection();
     1098            clearSelectionHistory();
    10981099            for (OsmPrimitive primitive : allPrimitives) {
    10991100                primitive.setDataset(null);
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java

    r16553 r17110  
    1313import org.openstreetmap.josm.data.osm.IWay;
    1414import org.openstreetmap.josm.data.osm.OsmData;
     15import org.openstreetmap.josm.data.osm.Way;
    1516import org.openstreetmap.josm.data.osm.WaySegment;
    1617import org.openstreetmap.josm.gui.MapViewState;
     
    149150            for (WaySegment wseg: data.getHighlightedVirtualNodes()) {
    150151                if (wseg.way.isUsable() && !wseg.way.isDisabled()) {
    151                     visitVirtual(path, wseg.toWay());
     152                    Way tmpWay = wseg.toWay();
     153                    visitVirtual(path, tmpWay);
     154                    tmpWay.setNodes(null);
    152155                }
    153156            }
  • trunk/src/org/openstreetmap/josm/data/validation/tests/Coastlines.java

    r14302 r17110  
    1414import java.util.Set;
    1515
    16 import org.openstreetmap.josm.command.ChangeCommand;
     16import org.openstreetmap.josm.command.ChangeNodesCommand;
    1717import org.openstreetmap.josm.command.Command;
    1818import org.openstreetmap.josm.data.osm.Node;
     
    261261            if (it.hasNext()) {
    262262                Way way = (Way) it.next();
    263                 Way newWay = new Way(way);
    264 
    265                 List<Node> nodesCopy = newWay.getNodes();
     263
     264                List<Node> nodesCopy = way.getNodes();
    266265                Collections.reverse(nodesCopy);
    267                 newWay.setNodes(nodesCopy);
    268 
    269                 return new ChangeCommand(way, newWay);
     266
     267                return new ChangeNodesCommand(way, nodesCopy);
    270268            }
    271269        }
Note: See TracChangeset for help on using the changeset viewer.