Ticket #11647: 0002-MapView-Use-enum-set-instead-of-integer-flags.2.patch

File 0002-MapView-Use-enum-set-instead-of-integer-flags.2.patch, 7.6 KB (added by michael2402, 10 years ago)
  • src/org/openstreetmap/josm/gui/MapView.java

    From 34bd8d2e5f45fd0abf0bf14b54d376b8beea50ac Mon Sep 17 00:00:00 2001
    From: Michael Zangl <michael.zangl@student.kit.edu>
    Date: Sun, 5 Jul 2015 14:21:51 +0200
    Subject: [PATCH 2/2] MapView: Use enum set instead of integer flags.
    
    ---
     src/org/openstreetmap/josm/gui/MapView.java | 48 +++++++++++++++--------------
     1 file changed, 25 insertions(+), 23 deletions(-)
    
    diff --git a/src/org/openstreetmap/josm/gui/MapView.java b/src/org/openstreetmap/josm/gui/MapView.java
    index 70afe09..a0b161d 100644
    a b import java.util.Arrays;  
    2626import java.util.Collection;
    2727import java.util.Collections;
    2828import java.util.Comparator;
     29import java.util.EnumSet;
    2930import java.util.LinkedHashSet;
    3031import java.util.List;
    3132import java.util.Set;
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    406407        boolean isOsmDataLayer = layer instanceof OsmDataLayer;
    407408        layerLock.writeLock().lock();
    408409        layerLock.readLock().lock();
    409         int listenersToFire = 0;
     410        EnumSet<LayerListenerType> listenersToFire = EnumSet.noneOf(LayerListenerType.class);
    410411        Layer oldActiveLayer = activeLayer;
    411412        OsmDataLayer oldEditLayer = editLayer;
    412413        try {
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    433434
    434435                if (isOsmDataLayer || oldActiveLayer == null) {
    435436                    // autoselect the new layer
    436                     listenersToFire = setActiveLayer(layer, true);
     437                    listenersToFire.addAll(setActiveLayer(layer, true));
    437438                }
    438439            } finally {
    439440                layerLock.writeLock().unlock();
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    450451        } finally {
    451452            layerLock.readLock().unlock();
    452453        }
    453         if (listenersToFire != 0) {
     454        if (!listenersToFire.isEmpty()) {
    454455            repaint();
    455456        }
    456457    }
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    532533        layerLock.writeLock().lock();
    533534        layerLock.readLock().lock();
    534535
    535         int listenersToFire = 0;
     536        EnumSet<LayerListenerType> listenersToFire = EnumSet.noneOf(LayerListenerType.class);
    536537        Layer oldActiveLayer = activeLayer;
    537538        OsmDataLayer oldEditLayer = editLayer;
    538539        try {
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    545546                listenersToFire = setEditLayer(layersList);
    546547
    547548                if (layer == activeLayer) {
    548                     listenersToFire |= setActiveLayer(determineNextActiveLayer(layersList), false);
     549                    listenersToFire.addAll(setActiveLayer(determineNextActiveLayer(layersList), false));
    549550                }
    550551
    551552                if (layer instanceof OsmDataLayer) {
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    602603    public void moveLayer(Layer layer, int pos) {
    603604        layerLock.writeLock().lock();
    604605        layerLock.readLock().lock();
    605         int listenersToFire;
     606        EnumSet<LayerListenerType> listenersToFire;
    606607        Layer oldActiveLayer = activeLayer;
    607608        OsmDataLayer oldEditLayer = editLayer;
    608609        try {
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    936937     * <p>
    937938     * You must own a write {@link #layerLock} when calling this method.
    938939     * @param layersList A list to select that layer from.
    939      * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, Layer, int)}
     940     * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, OsmDataLayer, EnumSet)}
    940941     */
    941     private int setEditLayer(List<Layer> layersList) {
     942    private EnumSet<LayerListenerType> setEditLayer(List<Layer> layersList) {
    942943        final OsmDataLayer newEditLayer = findNewEditLayer(layersList);
    943944
    944945        // Set new edit layer
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    949950            }
    950951
    951952            editLayer = newEditLayer;
    952             return FIRE_CHANGE_EDIT_LAYER;
     953            return EnumSet.of(LayerListenerType.EDIT_LAYER_CHANGE);
    953954        } else {
    954             return 0;
     955            return EnumSet.noneOf(LayerListenerType.class);
    955956        }
    956957
    957958    }
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    984985    public void setActiveLayer(Layer layer) {
    985986        layerLock.writeLock().lock();
    986987        layerLock.readLock().lock();
    987         int listenersToFire;
     988        EnumSet<LayerListenerType> listenersToFire;
    988989        Layer oldActiveLayer = activeLayer;
    989990        OsmDataLayer oldEditLayer = editLayer;
    990991        try {
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    10041005     * Sets the active layer. Propagates this change to all map buttons.
    10051006     * @param layer The layer to be active.
    10061007     * @param setEditLayer if this is <code>true</code>, the edit layer is also set.
    1007      * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, Layer, int)}
     1008     * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, OsmDataLayer, EnumSet)}
    10081009     */
    1009     private int setActiveLayer(final Layer layer, boolean setEditLayer) {
     1010    private EnumSet<LayerListenerType> setActiveLayer(final Layer layer, boolean setEditLayer) {
    10101011        if (layer != null && !layers.contains(layer))
    10111012            throw new IllegalArgumentException(tr("Layer ''{0}'' must be in list of layers", layer.toString()));
    10121013
    10131014        if (layer == activeLayer)
    1014             return 0;
    1015 
     1015            return EnumSet.noneOf(LayerListenerType.class);
    10161016
    10171017        activeLayer = layer;
    1018         int listenersToFire = FIRE_CHANGE_ACTIVE_LAYER;
     1018        EnumSet<LayerListenerType> listenersToFire = EnumSet.of(LayerListenerType.ACTIVE_LAYER_CHANGE);
    10191019        if (setEditLayer) {
    1020             listenersToFire |= setEditLayer(layers);
     1020            listenersToFire.addAll(setEditLayer(layers));
    10211021        }
    10221022
    10231023        return listenersToFire;
    implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer  
    10371037        }
    10381038    }
    10391039
    1040     private static final int FIRE_CHANGE_ACTIVE_LAYER = 1;
    1041     private static final int FIRE_CHANGE_EDIT_LAYER = 2;
     1040    private enum LayerListenerType {
     1041        ACTIVE_LAYER_CHANGE,
     1042        EDIT_LAYER_CHANGE
     1043    }
    10421044
    10431045    /**
    10441046     * This is called whenever one of active layer/edit layer or both may have been changed,
    10451047     * @param oldActive The old active layer
    10461048     * @param oldEdit The old edit layer.
    1047      * @param listenersToFire A bitmask using {@link #FIRE_CHANGE_ACTIVE_LAYER} and {@link #FIRE_CHANGE_EDIT_LAYER}
     1049     * @param listenersToFire A mask of listeners to fire using {@link LayerListenerType}s
    10481050     */
    1049     private void onActiveEditLayerChanged(final Layer oldActive, final OsmDataLayer oldEdit, int listenersToFire) {
    1050         if ((listenersToFire & FIRE_CHANGE_EDIT_LAYER) != 0) {
     1051    private void onActiveEditLayerChanged(final Layer oldActive, final OsmDataLayer oldEdit, EnumSet<LayerListenerType> listenersToFire) {
     1052        if (listenersToFire.contains(LayerListenerType.EDIT_LAYER_CHANGE)) {
    10511053            onEditLayerChanged(oldEdit);
    10521054        }
    1053         if ((listenersToFire & FIRE_CHANGE_ACTIVE_LAYER) != 0) {
     1055        if (listenersToFire.contains(LayerListenerType.ACTIVE_LAYER_CHANGE)) {
    10541056            onActiveLayerChanged(oldActive);
    10551057        }
    10561058    }