Changeset 15357 in josm for trunk


Ignore:
Timestamp:
2019-09-19T11:46:51+02:00 (5 years ago)
Author:
Don-vip
Message:

fix #18142 - fix AIOOBE after changing imagery source filter in imagery preferences

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryProvidersPanel.java

    r15158 r15357  
    2424import java.util.Set;
    2525import java.util.function.BiConsumer;
     26import java.util.function.Consumer;
    2627import java.util.function.Function;
    2728
     
    348349                // Only process complete (final) selection events
    349350                for (int i = e.getFirstIndex(); i <= e.getLastIndex(); i++) {
    350                     updateBoundsAndShapes(defaultTable.convertRowIndexToModel(i));
    351                 }
     351                    if (i < defaultTable.getRowCount()) {
     352                        updateBoundsAndShapes(defaultTable.convertRowIndexToModel(i));
     353                    }
     354                }
     355                // Cleanup residual selected bounds which may have disappeared after a filter
     356                cleanupResidualBounds();
    352357                // If needed, adjust map to show all map rectangles and polygons
    353358                if (!mapRectangles.isEmpty() || !mapPolygons.isEmpty()) {
     
    405410            }
    406411        }
     412
     413        private <T> void doCleanupResidualBounds(Map<Integer, T> map, Consumer<T> removalEffect) {
     414            for (Integer i : map.keySet()) {
     415                int viewIndex = defaultTable.convertRowIndexToView(i);
     416                if (!defaultTable.getSelectionModel().isSelectedIndex(viewIndex)) {
     417                    removalEffect.accept(map.remove(i));
     418                }
     419            }
     420        }
     421
     422        private void cleanupResidualBounds() {
     423            doCleanupResidualBounds(mapPolygons, l -> l.forEach(defaultMap::removeMapPolygon));
     424            doCleanupResidualBounds(mapRectangles, defaultMap::removeMapRectangle);
     425        }
    407426    }
    408427
Note: See TracChangeset for help on using the changeset viewer.