Ignore:
Timestamp:
2024-03-03T10:25:25+01:00 (22 months ago)
Author:
GerdP
Message:

fix #23521: fix some memory leaks

  • dispose dialogs
  • either avoid to create clones of ways or relations or use setNodes(null) / setMembers(null)
  • replaces most ChangeCommand instances by better specialized alternatives
  • add some comments
  • fix some checkstyle / sonar issues
File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/AddRemoveMemberAction.java

    r36102 r36217  
    1010
    1111import org.openstreetmap.josm.actions.JosmAction;
    12 import org.openstreetmap.josm.command.ChangeCommand;
     12import org.openstreetmap.josm.command.ChangeMembersCommand;
    1313import org.openstreetmap.josm.command.Command;
    1414import org.openstreetmap.josm.data.UndoRedoHandler;
     
    8282
    8383        if (!r.getMemberPrimitives().equals(rel.get().getMemberPrimitives())) {
    84             UndoRedoHandler.getInstance().add(new ChangeCommand(rel.get(), r));
     84            UndoRedoHandler.getInstance().add(new ChangeMembersCommand(rel.get(), r.getMembers()));
    8585        }
     86        r.setMembers(null); // See #19885
    8687    }
    8788
     
    9697        if (firstNode != null && !firstNode.equals(lastNode)) {
    9798            for (int i = 0; i < r.getMembersCount(); i++) {
    98                 if (r.getMember(i).getType().equals(OsmPrimitiveType.WAY)) {
     99                if (r.getMember(i).getType() == OsmPrimitiveType.WAY) {
    99100                    Way rw = (Way) r.getMember(i).getMember();
    100101                    Node firstNodeR = rw.firstNode();
     
    133134
    134135    protected void updateIcon() {
    135         // todo: change icon based on selection
    136136        final int state; // 0=unknown, 1=add, 2=remove, 3=both
    137137        DataSet ds = getLayerManager().getEditDataSet();
    138         if (ds == null || ds.getSelected() == null
    139                 || ds.getSelected().isEmpty() || rel == null || rel.get() == null) {
     138        if (ds == null || ds.getSelected().isEmpty() || rel == null || rel.get() == null) {
    140139            state = 0;
    141140        } else {
     
    156155            }
    157156        }
    158         GuiHelper.runInEDT(new Runnable() {
    159             @Override
    160             public void run() {
    161                 if (state == 0) {
    162                     putValue(LARGE_ICON_KEY, ImageProvider.get("relcontext", "addremove"));
    163                 } else {
    164                     String iconName = state == 1 ? "add" : state == 2 ? "remove" : "addremove";
    165                     putValue(NAME, null);
    166                     putValue(LARGE_ICON_KEY, ImageProvider.get("relcontext", iconName));
    167                 }
     157        GuiHelper.runInEDT(() -> {
     158            if (state == 0) {
     159                putValue(LARGE_ICON_KEY, ImageProvider.get("relcontext", "addremove"));
     160            } else {
     161                String iconName = state == 1 ? "add" : state == 2 ? "remove" : "addremove";
     162                putValue(NAME, null);
     163                putValue(LARGE_ICON_KEY, ImageProvider.get("relcontext", iconName));
    168164            }
    169165        });
Note: See TracChangeset for help on using the changeset viewer.