Changeset 11366 in josm for trunk


Ignore:
Timestamp:
2016-12-08T00:54:43+01:00 (3 years ago)
Author:
Don-vip
Message:

findbugs - SIC_INNER_SHOULD_BE_STATIC_ANON

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

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/DeleteFromRelationConfirmationDialog.java

    r11357 r11366  
    1212import java.awt.event.WindowAdapter;
    1313import java.awt.event.WindowEvent;
     14import java.io.Serializable;
    1415import java.util.ArrayList;
    1516import java.util.Collection;
     
    185186     */
    186187    public static class RelationMemberTableModel extends DefaultTableModel {
    187         private static class RelationToChildReferenceComparator implements Comparator<RelationToChildReference> {
    188             private NameFormatter nf = DefaultNameFormatter.getInstance();
     188        private static class RelationToChildReferenceComparator implements Comparator<RelationToChildReference>, Serializable {
     189            private final NameFormatter nf = DefaultNameFormatter.getInstance();
    189190
    190191            @Override
  • trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java

    r11357 r11366  
    2525import javax.swing.table.JTableHeader;
    2626import javax.swing.table.TableCellRenderer;
     27import javax.swing.table.TableColumnModel;
    2728import javax.swing.table.TableModel;
    2829
     
    243244
    244245    static final class UserTable extends JTable {
     246        static final class UserTableHeader extends JTableHeader {
     247            UserTableHeader(TableColumnModel cm) {
     248                super(cm);
     249            }
     250
     251            @Override
     252            public String getToolTipText(MouseEvent e) {
     253                int index = columnModel.getColumnIndexAtX(e.getPoint().x);
     254                int realIndex = columnModel.getColumn(index).getModelIndex();
     255                return COLUMN_TOOLTIPS[realIndex];
     256            }
     257        }
     258
    245259        UserTable(TableModel dm) {
    246260            super(dm);
     
    249263        @Override
    250264        protected JTableHeader createDefaultTableHeader() {
    251             return new JTableHeader(columnModel) {
    252                 @Override
    253                 public String getToolTipText(MouseEvent e) {
    254                     int index = columnModel.getColumnIndexAtX(e.getPoint().x);
    255                     int realIndex = columnModel.getColumn(index).getModelIndex();
    256                     return COLUMN_TOOLTIPS[realIndex];
    257                 }
    258             };
     265            return new UserTableHeader(columnModel);
    259266        }
    260267    }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java

    r11357 r11366  
    326326        TableColumnModel mod = membershipTable.getColumnModel();
    327327        membershipTable.getTableHeader().setReorderingAllowed(false);
    328         mod.getColumn(0).setCellRenderer(new DefaultTableCellRenderer() {
    329             @Override public Component getTableCellRendererComponent(JTable table, Object value,
    330                     boolean isSelected, boolean hasFocus, int row, int column) {
    331                 Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
    332                 if (value == null)
    333                     return this;
    334                 if (c instanceof JLabel) {
    335                     JLabel label = (JLabel) c;
    336                     Relation r = (Relation) value;
    337                     label.setText(r.getDisplayName(DefaultNameFormatter.getInstance()));
    338                     if (r.isDisabledAndHidden()) {
    339                         label.setFont(label.getFont().deriveFont(Font.ITALIC));
    340                     }
    341                 }
    342                 return c;
    343             }
    344         });
    345 
    346         mod.getColumn(1).setCellRenderer(new DefaultTableCellRenderer() {
    347             @Override public Component getTableCellRendererComponent(JTable table, Object value,
    348                     boolean isSelected, boolean hasFocus, int row, int column) {
    349                 if (value == null)
    350                     return this;
    351                 Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
    352                 boolean isDisabledAndHidden = ((Relation) table.getValueAt(row, 0)).isDisabledAndHidden();
    353                 if (c instanceof JLabel) {
    354                     JLabel label = (JLabel) c;
    355                     label.setText(((MemberInfo) value).getRoleString());
    356                     if (isDisabledAndHidden) {
    357                         label.setFont(label.getFont().deriveFont(Font.ITALIC));
    358                     }
    359                 }
    360                 return c;
    361             }
    362         });
    363 
    364         mod.getColumn(2).setCellRenderer(new DefaultTableCellRenderer() {
    365             @Override public Component getTableCellRendererComponent(JTable table, Object value,
    366                     boolean isSelected, boolean hasFocus, int row, int column) {
    367                 Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
    368                 boolean isDisabledAndHidden = ((Relation) table.getValueAt(row, 0)).isDisabledAndHidden();
    369                 if (c instanceof JLabel) {
    370                     JLabel label = (JLabel) c;
    371                     label.setText(((MemberInfo) table.getValueAt(row, 1)).getPositionString());
    372                     if (isDisabledAndHidden) {
    373                         label.setFont(label.getFont().deriveFont(Font.ITALIC));
    374                     }
    375                 }
    376                 return c;
    377             }
    378         });
     328        mod.getColumn(0).setCellRenderer(new MemberOfCellRenderer());
     329        mod.getColumn(1).setCellRenderer(new RoleCellRenderer());
     330        mod.getColumn(2).setCellRenderer(new PositionCellRenderer());
    379331        mod.getColumn(2).setPreferredWidth(20);
    380332        mod.getColumn(1).setPreferredWidth(40);
     
    388340        if (Main.pref.getBoolean("properties.menu.add_edit_delete", true)) {
    389341            blankSpaceMenuHandler.addAction(addAction);
    390             PopupMenuLauncher launcher = new PopupMenuLauncher(blankSpaceMenu) {
    391                 @Override
    392                 protected boolean checkSelection(Component component, Point p) {
    393                     if (component instanceof JTable) {
    394                         return ((JTable) component).rowAtPoint(p) == -1;
    395                     }
    396                     return true;
    397                 }
    398             };
     342            PopupMenuLauncher launcher = new BlankSpaceMenuLauncher(blankSpaceMenu);
    399343            bothTables.addMouseListener(launcher);
    400344            tagTable.addMouseListener(launcher);
     
    818762    }
    819763
     764    static final class MemberOfCellRenderer extends DefaultTableCellRenderer {
     765        @Override
     766        public Component getTableCellRendererComponent(JTable table, Object value,
     767                boolean isSelected, boolean hasFocus, int row, int column) {
     768            Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
     769            if (value == null)
     770                return this;
     771            if (c instanceof JLabel) {
     772                JLabel label = (JLabel) c;
     773                Relation r = (Relation) value;
     774                label.setText(r.getDisplayName(DefaultNameFormatter.getInstance()));
     775                if (r.isDisabledAndHidden()) {
     776                    label.setFont(label.getFont().deriveFont(Font.ITALIC));
     777                }
     778            }
     779            return c;
     780        }
     781    }
     782
     783    static final class RoleCellRenderer extends DefaultTableCellRenderer {
     784        @Override
     785        public Component getTableCellRendererComponent(JTable table, Object value,
     786                boolean isSelected, boolean hasFocus, int row, int column) {
     787            if (value == null)
     788                return this;
     789            Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
     790            boolean isDisabledAndHidden = ((Relation) table.getValueAt(row, 0)).isDisabledAndHidden();
     791            if (c instanceof JLabel) {
     792                JLabel label = (JLabel) c;
     793                label.setText(((MemberInfo) value).getRoleString());
     794                if (isDisabledAndHidden) {
     795                    label.setFont(label.getFont().deriveFont(Font.ITALIC));
     796                }
     797            }
     798            return c;
     799        }
     800    }
     801
     802    static final class PositionCellRenderer extends DefaultTableCellRenderer {
     803        @Override
     804        public Component getTableCellRendererComponent(JTable table, Object value,
     805                boolean isSelected, boolean hasFocus, int row, int column) {
     806            Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
     807            boolean isDisabledAndHidden = ((Relation) table.getValueAt(row, 0)).isDisabledAndHidden();
     808            if (c instanceof JLabel) {
     809                JLabel label = (JLabel) c;
     810                label.setText(((MemberInfo) table.getValueAt(row, 1)).getPositionString());
     811                if (isDisabledAndHidden) {
     812                    label.setFont(label.getFont().deriveFont(Font.ITALIC));
     813                }
     814            }
     815            return c;
     816        }
     817    }
     818
     819    static final class BlankSpaceMenuLauncher extends PopupMenuLauncher {
     820        BlankSpaceMenuLauncher(JPopupMenu menu) {
     821            super(menu);
     822        }
     823
     824        @Override
     825        protected boolean checkSelection(Component component, Point p) {
     826            if (component instanceof JTable) {
     827                return ((JTable) component).rowAtPoint(p) == -1;
     828            }
     829            return true;
     830        }
     831    }
     832
    820833    static final class TaggingPresetCommandHandler implements TaggingPresetHandler {
    821834        @Override
  • trunk/src/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollection.java

    r11339 r11366  
    1515class RecentTagCollection {
    1616
     17    /**
     18     * LRU cache for recently added tags (http://java-planet.blogspot.com/2005/08/how-to-set-up-simple-lru-cache-using.html)
     19     */
     20    static final class LruCache extends LinkedHashMap<Tag, Void> {
     21        private final int capacity;
     22
     23        LruCache(int capacity) {
     24            super(capacity + 1, 1.1f, true);
     25            this.capacity = capacity;
     26        }
     27
     28        @Override
     29        protected boolean removeEldestEntry(Map.Entry<Tag, Void> eldest) {
     30            return size() > capacity;
     31        }
     32    }
     33
    1734    private final Map<Tag, Void> recentTags;
    1835    private SearchCompiler.Match tagsToIgnore;
    1936
    2037    RecentTagCollection(final int capacity) {
    21         // LRU cache for recently added tags (http://java-planet.blogspot.com/2005/08/how-to-set-up-simple-lru-cache-using.html)
    22         recentTags = new LinkedHashMap<Tag, Void>(capacity + 1, 1.1f, true) {
    23             @Override
    24             protected boolean removeEldestEntry(Map.Entry<Tag, Void> eldest) {
    25                 return size() > capacity;
    26             }
    27         };
     38        recentTags = new LruCache(capacity);
    2839        tagsToIgnore = SearchCompiler.Never.INSTANCE;
    2940    }
  • trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java

    r10763 r11366  
    3737public final class HistoryBrowserDialogManager implements LayerChangeListener {
    3838
     39    static final class UnloadedHistoryPredicate implements Predicate<PrimitiveId> {
     40        private final HistoryDataSet hds = HistoryDataSet.getInstance();
     41
     42        @Override
     43        public boolean test(PrimitiveId p) {
     44            History h = hds.getHistory(p);
     45            if (h == null)
     46                // reload if the history is not in the cache yet
     47                return true;
     48            else
     49                // reload if the history object of the selected object is not in the cache yet
     50                return !p.isNew() && h.getByVersion(p.getUniqueId()) == null;
     51        }
     52    }
     53
    3954    private static final String WINDOW_GEOMETRY_PREF = HistoryBrowserDialogManager.class.getName() + ".geometry";
    4055
    4156    private static HistoryBrowserDialogManager instance;
     57
     58    private final Map<Long, HistoryBrowserDialog> dialogs;
     59
     60    private final Predicate<PrimitiveId> unloadedHistoryPredicate = new UnloadedHistoryPredicate();
     61
     62    private final Predicate<PrimitiveId> notNewPredicate = p -> !p.isNew();
     63
     64    protected HistoryBrowserDialogManager() {
     65        dialogs = new HashMap<>();
     66        Main.getLayerManager().addLayerChangeListener(this);
     67    }
    4268
    4369    /**
     
    5076        }
    5177        return instance;
    52     }
    53 
    54     private final Map<Long, HistoryBrowserDialog> dialogs;
    55 
    56     protected HistoryBrowserDialogManager() {
    57         dialogs = new HashMap<>();
    58         Main.getLayerManager().addLayerChangeListener(this);
    5978    }
    6079
     
    211230        Main.worker.submit(r);
    212231    }
    213 
    214     private final Predicate<PrimitiveId> unloadedHistoryPredicate = new Predicate<PrimitiveId>() {
    215 
    216         private HistoryDataSet hds = HistoryDataSet.getInstance();
    217 
    218         @Override
    219         public boolean test(PrimitiveId p) {
    220             History h = hds.getHistory(p);
    221             if (h == null)
    222                 // reload if the history is not in the cache yet
    223                 return true;
    224             else
    225                 // reload if the history object of the selected object is not in the cache yet
    226                 return !p.isNew() && h.getByVersion(p.getUniqueId()) == null;
    227         }
    228     };
    229 
    230     private final Predicate<PrimitiveId> notNewPredicate = p -> !p.isNew();
    231232}
  • trunk/src/org/openstreetmap/josm/gui/history/NodeListViewer.java

    r10611 r11366  
    4444 *   <li>on the right, it displays the node list for the version at {@link PointInTimeType#CURRENT_POINT_IN_TIME}</li>
    4545 * </ul>
    46  *
     46 * @since 1709
    4747 */
    4848public class NodeListViewer extends JPanel {
     
    7474        final NodeListTableColumnModel columnModel = new NodeListTableColumnModel();
    7575        final JTable table = new JTable(tableModel, columnModel);
    76         tableModel.addTableModelListener(newReversedChangeListener(table, columnModel));
     76        tableModel.addTableModelListener(new ReversedChangeListener(table, columnModel));
    7777        table.setName("table.referencenodelisttable");
    7878        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     
    8787        final NodeListTableColumnModel columnModel = new NodeListTableColumnModel();
    8888        final JTable table = new JTable(tableModel, columnModel);
    89         tableModel.addTableModelListener(newReversedChangeListener(table, columnModel));
     89        tableModel.addTableModelListener(new ReversedChangeListener(table, columnModel));
    9090        table.setName("table.currentnodelisttable");
    9191        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     
    9494        table.addMouseListener(new DoubleClickAdapter(table));
    9595        return table;
    96     }
    97 
    98     protected TableModelListener newReversedChangeListener(final JTable table, final NodeListTableColumnModel columnModel) {
    99         return new TableModelListener() {
    100             private Boolean reversed;
    101             private final String nonReversedText = tr("Nodes") + (table.getFont().canDisplay('\u25bc') ? " \u25bc" : " (1-n)");
    102             private final String reversedText = tr("Nodes") + (table.getFont().canDisplay('\u25b2') ? " \u25b2" : " (n-1)");
    103 
    104             @Override
    105             public void tableChanged(TableModelEvent e) {
    106                 if (e.getSource() instanceof DiffTableModel) {
    107                     final DiffTableModel mod = (DiffTableModel) e.getSource();
    108                     if (reversed == null || reversed != mod.isReversed()) {
    109                         reversed = mod.isReversed();
    110                         columnModel.getColumn(0).setHeaderValue(reversed ? reversedText : nonReversedText);
    111                         table.getTableHeader().setToolTipText(
    112                                 reversed ? tr("The nodes of this way are in reverse order") : null);
    113                         table.getTableHeader().repaint();
    114                     }
    115                 }
    116             }
    117         };
    11896    }
    11997
     
    205183    }
    206184
     185    static final class ReversedChangeListener implements TableModelListener {
     186        private final NodeListTableColumnModel columnModel;
     187        private final JTable table;
     188        private Boolean reversed;
     189        private final String nonReversedText;
     190        private final String reversedText;
     191
     192        ReversedChangeListener(JTable table, NodeListTableColumnModel columnModel) {
     193            this.columnModel = columnModel;
     194            this.table = table;
     195            nonReversedText = tr("Nodes") + (table.getFont().canDisplay('\u25bc') ? " \u25bc" : " (1-n)");
     196            reversedText = tr("Nodes") + (table.getFont().canDisplay('\u25b2') ? " \u25b2" : " (n-1)");
     197        }
     198
     199        @Override
     200        public void tableChanged(TableModelEvent e) {
     201            if (e.getSource() instanceof DiffTableModel) {
     202                final DiffTableModel mod = (DiffTableModel) e.getSource();
     203                if (reversed == null || reversed != mod.isReversed()) {
     204                    reversed = mod.isReversed();
     205                    columnModel.getColumn(0).setHeaderValue(reversed ? reversedText : nonReversedText);
     206                    table.getTableHeader().setToolTipText(
     207                            reversed ? tr("The nodes of this way are in reverse order") : null);
     208                    table.getTableHeader().repaint();
     209                }
     210            }
     211        }
     212    }
     213
    207214    static class NodeListPopupMenu extends JPopupMenu {
    208215        private final ZoomToNodeAction zoomToNodeAction;
  • trunk/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java

    r11288 r11366  
    131131    public void setHistoryComboBoxDownFocusTraversalHandler(final Action handler, final HistoryComboBox hcb) {
    132132        hcb.getEditor().addActionListener(handler);
    133         hcb.getEditorComponent().addKeyListener(
    134                 new KeyAdapter() {
    135                     @Override
    136                     public void keyTyped(KeyEvent e) {
    137                         if (e.getKeyCode() == KeyEvent.VK_TAB) {
    138                             handler.actionPerformed(new ActionEvent(hcb, 0, "focusDown"));
    139                         }
    140                     }
    141                 }
    142         );
     133        hcb.getEditorComponent().addKeyListener(new HistoryComboBoxKeyAdapter(hcb, handler));
    143134    }
    144135
     
    184175    }
    185176
     177    static final class HistoryComboBoxKeyAdapter extends KeyAdapter {
     178        private final HistoryComboBox hcb;
     179        private final Action handler;
     180
     181        HistoryComboBoxKeyAdapter(HistoryComboBox hcb, Action handler) {
     182            this.hcb = hcb;
     183            this.handler = handler;
     184        }
     185
     186        @Override
     187        public void keyTyped(KeyEvent e) {
     188            if (e.getKeyCode() == KeyEvent.VK_TAB) {
     189                handler.actionPerformed(new ActionEvent(hcb, 0, "focusDown"));
     190            }
     191        }
     192    }
     193
    186194    /**
    187195     * Updates the changeset comment model upon changes in the input field.
  • trunk/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java

    r10428 r11366  
    6060
    6161        for (final String file : fileHistory) {
    62             add(new AbstractAction() {
    63                 {
    64                     putValue(NAME, file);
    65                     putValue("help", ht("/Action/OpenRecent"));
    66                     putValue("toolbar", Boolean.FALSE);
    67                 }
    68                 @Override
    69                 public void actionPerformed(ActionEvent e) {
    70                     File f = new File(file);
    71                     OpenFileTask task = new OpenFileTask(Collections.singletonList(f), null);
    72                     task.setRecordHistory(true);
    73                     Main.worker.submit(task);
    74                 }
    75             });
     62            add(new OpenRecentAction(file));
    7663        }
    7764        add(new JSeparator());
     
    8269        clearItem.setEnabled(!fileHistory.isEmpty());
    8370        add(clearItem);
     71    }
     72
     73    static final class OpenRecentAction extends AbstractAction {
     74        private final String file;
     75
     76        OpenRecentAction(String file) {
     77            this.file = file;
     78            putValue(NAME, file);
     79            putValue("help", ht("/Action/OpenRecent"));
     80            putValue("toolbar", Boolean.FALSE);
     81        }
     82
     83        @Override
     84        public void actionPerformed(ActionEvent e) {
     85            OpenFileTask task = new OpenFileTask(Collections.singletonList(new File(file)), null);
     86            task.setRecordHistory(true);
     87            Main.worker.submit(task);
     88        }
    8489    }
    8590
  • trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java

    r11323 r11366  
    225225
    226226    private static class LayerListWarningMessagePanel extends JPanel {
     227        static final class LayerCellRenderer implements ListCellRenderer<SaveLayerInfo> {
     228            private final DefaultListCellRenderer def = new DefaultListCellRenderer();
     229
     230            @Override
     231            public Component getListCellRendererComponent(JList<? extends SaveLayerInfo> list, SaveLayerInfo info, int index,
     232                    boolean isSelected, boolean cellHasFocus) {
     233                def.setIcon(info.getLayer().getIcon());
     234                def.setText(info.getName());
     235                return def;
     236            }
     237        }
     238
    227239        private final JLabel lblMessage = new JLabel();
    228240        private final JList<SaveLayerInfo> lstLayers = new JList<>();
    229241
    230242        LayerListWarningMessagePanel(String msg, List<SaveLayerInfo> infos) {
     243            super(new GridBagLayout());
    231244            build();
    232245            lblMessage.setText(msg);
     
    235248
    236249        protected void build() {
    237             setLayout(new GridBagLayout());
    238250            GridBagConstraints gc = new GridBagConstraints();
    239251            gc.gridx = 0;
     
    244256            add(lblMessage, gc);
    245257            lblMessage.setHorizontalAlignment(JLabel.LEFT);
    246             lstLayers.setCellRenderer(
    247                     new ListCellRenderer<SaveLayerInfo>() {
    248                         private final DefaultListCellRenderer def = new DefaultListCellRenderer();
    249                         @Override
    250                         public Component getListCellRendererComponent(JList<? extends SaveLayerInfo> list, SaveLayerInfo info, int index,
    251                                 boolean isSelected, boolean cellHasFocus) {
    252                             def.setIcon(info.getLayer().getIcon());
    253                             def.setText(info.getName());
    254                             return def;
    255                         }
    256                     }
    257             );
     258            lstLayers.setCellRenderer(new LayerCellRenderer());
    258259            gc.gridx = 0;
    259260            gc.gridy = 1;
  • trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java

    r11293 r11366  
    5555import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
    5656import org.openstreetmap.josm.tools.InputMapUtils;
     57import org.openstreetmap.josm.tools.MultiLineFlowLayout;
    5758import org.openstreetmap.josm.tools.Utils;
    5859import org.openstreetmap.josm.tools.WindowGeometry;
    59 import org.openstreetmap.josm.tools.MultiLineFlowLayout;
    6060
    6161/**
     
    135135
    136136        // a tabbed pane with configuration panels in the lower half
    137         tpConfigPanels = new JTabbedPane() {
    138             @Override
    139             public Dimension getPreferredSize() {
    140                 // make sure the tabbed pane never grabs more space than necessary
    141                 return super.getMinimumSize();
    142             }
    143         };
     137        tpConfigPanels = new CompactTabbedPane();
    144138
    145139        pnlBasicUploadSettings = new BasicUploadSettingsPanel(changesetCommentModel, changesetSourceModel);
     
    414408    }
    415409
     410    static final class CompactTabbedPane extends JTabbedPane {
     411        @Override
     412        public Dimension getPreferredSize() {
     413            // make sure the tabbed pane never grabs more space than necessary
     414            return super.getMinimumSize();
     415        }
     416    }
     417
    416418    /**
    417419     * Handles an upload.
  • trunk/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java

    r10791 r11366  
    1010import java.awt.event.WindowAdapter;
    1111import java.awt.event.WindowEvent;
     12import java.io.Serializable;
    1213import java.util.ArrayList;
    1314import java.util.Collection;
     
    196197
    197198    static class OsmPrimitiveListModel extends AbstractListModel<OsmPrimitive> {
     199        static final class OsmPrimitiveComparator implements Comparator<OsmPrimitive>, Serializable {
     200            private final DefaultNameFormatter formatter = DefaultNameFormatter.getInstance();
     201
     202            @Override
     203            public int compare(OsmPrimitive o1, OsmPrimitive o2) {
     204                int ret = OsmPrimitiveType.from(o1).compareTo(OsmPrimitiveType.from(o2));
     205                if (ret != 0)
     206                    return ret;
     207                return o1.getDisplayName(formatter).compareTo(o1.getDisplayName(formatter));
     208            }
     209        }
     210
    198211        private transient List<OsmPrimitive> data;
    199212
    200213        protected void sort() {
    201             if (data == null)
    202                 return;
    203             data.sort(new Comparator<OsmPrimitive>() {
    204                     private DefaultNameFormatter formatter = DefaultNameFormatter.getInstance();
    205                     @Override
    206                     public int compare(OsmPrimitive o1, OsmPrimitive o2) {
    207                         int ret = OsmPrimitiveType.from(o1).compareTo(OsmPrimitiveType.from(o2));
    208                         if (ret != 0)
    209                             return ret;
    210                         return o1.getDisplayName(formatter).compareTo(o1.getDisplayName(formatter));
    211                     }
    212                 }
    213             );
     214            if (data != null)
     215                data.sort(new OsmPrimitiveComparator());
    214216        }
    215217
  • trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r11277 r11366  
    141141
    142142    /** List of recent relations */
    143     private final Map<Relation, Void> recentRelations = new LinkedHashMap<Relation, Void>(PROPERTY_RECENT_RELATIONS_NUMBER.get()+1, 1.1f, true) {
    144         @Override
    145         protected boolean removeEldestEntry(Map.Entry<Relation, Void> eldest) {
    146             return size() > PROPERTY_RECENT_RELATIONS_NUMBER.get();
    147         }
    148     };
     143    private final Map<Relation, Void> recentRelations = new LruCache(PROPERTY_RECENT_RELATIONS_NUMBER.get()+1);
    149144
    150145    /**
     
    213208    static String createLayerName(Object arg) {
    214209        return tr("Data Layer {0}", arg);
     210    }
     211
     212    static final class LruCache extends LinkedHashMap<Relation, Void> {
     213        LruCache(int initialCapacity) {
     214            super(initialCapacity, 1.1f, true);
     215        }
     216
     217        @Override
     218        protected boolean removeEldestEntry(Map.Entry<Relation, Void> eldest) {
     219            return size() > PROPERTY_RECENT_RELATIONS_NUMBER.get();
     220        }
    215221    }
    216222
  • trunk/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java

    r10647 r11366  
    4141    private final transient GpxLayer layer;
    4242
     43    static final class AudioFileFilter extends FileFilter {
     44        @Override
     45        public boolean accept(File f) {
     46            return f.isDirectory() || Utils.hasExtension(f, "wav");
     47        }
     48
     49        @Override
     50        public String getDescription() {
     51            return tr("Wave Audio files (*.wav)");
     52        }
     53    }
     54
    4355    private static class Markers {
    4456        public boolean timedMarkersOmitted;
     
    7082            return;
    7183        }
    72         FileFilter filter = new FileFilter() {
    73             @Override
    74             public boolean accept(File f) {
    75                 return f.isDirectory() || Utils.hasExtension(f, "wav");
    76             }
    77 
    78             @Override
    79             public String getDescription() {
    80                 return tr("Wave Audio files (*.wav)");
    81             }
    82         };
    83         AbstractFileChooser fc = DiskAccessAction.createAndOpenFileChooser(true, true, null, filter,
     84        AbstractFileChooser fc = DiskAccessAction.createAndOpenFileChooser(true, true, null, new AudioFileFilter(),
    8485                JFileChooser.FILES_ONLY, "markers.lastaudiodirectory");
    8586        if (fc != null) {
  • trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java

    r11365 r11366  
    7373import javax.swing.table.DefaultTableCellRenderer;
    7474import javax.swing.table.TableCellEditor;
     75import javax.swing.table.TableModel;
    7576
    7677import org.openstreetmap.josm.Main;
     
    138139        selectionModel = new DefaultListSelectionModel();
    139140        activeSourcesModel = new ActiveSourcesModel(selectionModel);
    140         tblActiveSources = new JTable(activeSourcesModel) {
    141             // some kind of hack to prevent the table from scrolling slightly to the right when clicking on the text
    142             @Override
    143             public void scrollRectToVisible(Rectangle aRect) {
    144                 super.scrollRectToVisible(new Rectangle(0, aRect.y, aRect.width, aRect.height));
    145             }
    146         };
     141        tblActiveSources = new ScrollHackTable(activeSourcesModel);
    147142        tblActiveSources.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
    148143        tblActiveSources.setSelectionModel(selectionModel);
     
    421416     */
    422417    protected abstract String getStr(I18nString ident);
     418
     419    static final class ScrollHackTable extends JTable {
     420        ScrollHackTable(TableModel dm) {
     421            super(dm);
     422        }
     423
     424        // some kind of hack to prevent the table from scrolling slightly to the right when clicking on the text
     425        @Override
     426        public void scrollRectToVisible(Rectangle aRect) {
     427            super.scrollRectToVisible(new Rectangle(0, aRect.y, aRect.width, aRect.height));
     428        }
     429    }
    423430
    424431    /**
  • trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java

    r10627 r11366  
    4545public class LafPreference implements SubPreferenceSetting {
    4646
     47    static final class LafListCellRenderer implements ListCellRenderer<LookAndFeelInfo> {
     48        private final DefaultListCellRenderer def = new DefaultListCellRenderer();
     49
     50        @Override
     51        public Component getListCellRendererComponent(JList<? extends LookAndFeelInfo> list, LookAndFeelInfo value,
     52                int index, boolean isSelected, boolean cellHasFocus) {
     53            return def.getListCellRendererComponent(list, value.getName(), index, isSelected, cellHasFocus);
     54        }
     55    }
     56
    4757    /**
    4858     * Factory used to create a new {@code LafPreference}.
     
    98108        }
    99109
    100         lafCombo.setRenderer(new ListCellRenderer<LookAndFeelInfo>() {
    101             private final DefaultListCellRenderer def = new DefaultListCellRenderer();
    102             @Override
    103             public Component getListCellRendererComponent(JList<? extends LookAndFeelInfo> list, LookAndFeelInfo value,
    104                     int index, boolean isSelected, boolean cellHasFocus) {
    105                 return def.getListCellRendererComponent(list, value.getName(), index, isSelected, cellHasFocus);
    106             }
    107         });
     110        lafCombo.setRenderer(new LafListCellRenderer());
    108111
    109112        panel = new VerticallyScrollablePanel(new GridBagLayout());
  • trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginListPanel.java

    r10828 r11366  
    2626 */
    2727public class PluginListPanel extends VerticallyScrollablePanel {
     28    static final class PluginCheckBoxMouseAdapter extends MouseAdapter {
     29        private final PluginCheckBox cbPlugin;
     30
     31        PluginCheckBoxMouseAdapter(PluginCheckBox cbPlugin) {
     32            this.cbPlugin = cbPlugin;
     33        }
     34
     35        @Override
     36        public void mouseClicked(MouseEvent e) {
     37            cbPlugin.doClick();
     38        }
     39    }
     40
    2841    private transient PluginPreferencesModel model;
    2942
     
    129142                    pi.getScaledIcon(),
    130143                    SwingConstants.LEFT);
    131             lblPlugin.addMouseListener(new MouseAdapter() {
    132                 @Override
    133                 public void mouseClicked(MouseEvent e) {
    134                     cbPlugin.doClick();
    135                 }
    136             });
     144            lblPlugin.addMouseListener(new PluginCheckBoxMouseAdapter(cbPlugin));
    137145
    138146            gbc.gridx = 0;
  • trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java

    r10179 r11366  
    4141 */
    4242public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
     43
     44    static final class AutoSizePanel extends JPanel {
     45        AutoSizePanel() {
     46            super(new GridBagLayout());
     47        }
     48
     49        @Override
     50        public Dimension getMinimumSize() {
     51            return getPreferredSize();
     52        }
     53    }
    4354
    4455    /**
     
    118129     */
    119130    protected final JPanel buildHttpProxyConfigurationPanel() {
    120         JPanel pnl = new JPanel(new GridBagLayout()) {
    121             @Override
    122             public Dimension getMinimumSize() {
    123                 return getPreferredSize();
    124             }
    125         };
     131        JPanel pnl = new AutoSizePanel();
    126132        GridBagConstraints gc = new GridBagConstraints();
    127133
     
    194200     */
    195201    protected final JPanel buildSocksProxyConfigurationPanel() {
    196         JPanel pnl = new JPanel(new GridBagLayout()) {
    197             @Override
    198             public Dimension getMinimumSize() {
    199                 return getPreferredSize();
    200             }
    201         };
     202        JPanel pnl = new AutoSizePanel();
    202203        GridBagConstraints gc = new GridBagConstraints();
    203204        gc.anchor = GridBagConstraints.WEST;
  • trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java

    r10604 r11366  
    4040
    4141    private final transient InputContext privateInputContext = InputContext.getInstance();
     42
     43    static final class InnerFocusListener implements FocusListener {
     44        private final JTextComponent editorComponent;
     45
     46        InnerFocusListener(JTextComponent editorComponent) {
     47            this.editorComponent = editorComponent;
     48        }
     49
     50        @Override
     51        public void focusLost(FocusEvent e) {
     52            if (Main.map != null) {
     53                Main.map.keyDetector.setEnabled(true);
     54            }
     55        }
     56
     57        @Override
     58        public void focusGained(FocusEvent e) {
     59            if (Main.map != null) {
     60                Main.map.keyDetector.setEnabled(false);
     61            }
     62            // save unix system selection (middle mouse paste)
     63            Clipboard sysSel = ClipboardUtils.getSystemSelection();
     64            if (sysSel != null) {
     65                Transferable old = ClipboardUtils.getClipboardContent(sysSel);
     66                editorComponent.selectAll();
     67                if (old != null) {
     68                    sysSel.setContents(old, null);
     69                }
     70            } else {
     71                editorComponent.selectAll();
     72            }
     73        }
     74    }
    4275
    4376    /**
     
    185218        final JTextComponent editorComponent = this.getEditorComponent();
    186219        editorComponent.setDocument(new AutoCompletingComboBoxDocument(this));
    187         editorComponent.addFocusListener(
    188                 new FocusListener() {
    189                     @Override
    190                     public void focusLost(FocusEvent e) {
    191                         if (Main.map != null) {
    192                             Main.map.keyDetector.setEnabled(true);
    193                         }
    194                     }
    195 
    196                     @Override
    197                     public void focusGained(FocusEvent e) {
    198                         if (Main.map != null) {
    199                             Main.map.keyDetector.setEnabled(false);
    200                         }
    201                         // save unix system selection (middle mouse paste)
    202                         Clipboard sysSel = ClipboardUtils.getSystemSelection();
    203                         if (sysSel != null) {
    204                             Transferable old = ClipboardUtils.getClipboardContent(sysSel);
    205                             editorComponent.selectAll();
    206                             if (old != null) {
    207                                 sysSel.setContents(old, null);
    208                             }
    209                         } else {
    210                             editorComponent.selectAll();
    211                         }
    212                     }
    213                 }
    214         );
     220        editorComponent.addFocusListener(new InnerFocusListener(editorComponent));
    215221    }
    216222
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/PresetLink.java

    r10590 r11366  
    2525public class PresetLink extends TaggingPresetItem {
    2626
     27    static final class TaggingPresetMouseAdapter extends MouseAdapter {
     28        private final TaggingPreset t;
     29
     30        TaggingPresetMouseAdapter(TaggingPreset t) {
     31            this.t = t;
     32        }
     33
     34        @Override
     35        public void mouseClicked(MouseEvent e) {
     36            t.actionPerformed(null);
     37        }
     38    }
     39
    2740    /** The exact name of the preset to link to. Required. */
    2841    public String preset_name = ""; // NOSONAR
     
    3649        TaggingPreset t = found.get();
    3750        JLabel lbl = new TaggingPresetLabel(t);
    38         lbl.addMouseListener(new MouseAdapter() {
    39             @Override
    40             public void mouseClicked(MouseEvent arg0) {
    41                 t.actionPerformed(null);
    42             }
    43         });
     51        lbl.addMouseListener(new TaggingPresetMouseAdapter(t));
    4452        p.add(lbl, GBC.eol().fill(GBC.HORIZONTAL));
    4553        return false;
  • trunk/src/org/openstreetmap/josm/io/OverpassDownloadReader.java

    r11288 r11366  
    3333 */
    3434public class OverpassDownloadReader extends BoundingBoxDownloader {
     35
     36    static final class OverpassOsmReader extends OsmReader {
     37        @Override
     38        protected void parseUnknown(boolean printWarning) throws XMLStreamException {
     39            if ("remark".equals(parser.getLocalName()) && parser.getEventType() == XMLStreamConstants.START_ELEMENT) {
     40                final String text = parser.getElementText();
     41                if (text.contains("runtime error")) {
     42                    throw new XMLStreamException(text);
     43                }
     44            }
     45            super.parseUnknown(printWarning);
     46        }
     47    }
    3548
    3649    final String overpassServer;
     
    148161    @Override
    149162    protected DataSet parseDataSet(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException {
    150         return new OsmReader() {
    151             @Override
    152             protected void parseUnknown(boolean printWarning) throws XMLStreamException {
    153                 if ("remark".equals(parser.getLocalName()) && parser.getEventType() == XMLStreamConstants.START_ELEMENT) {
    154                     final String text = parser.getElementText();
    155                     if (text.contains("runtime error")) {
    156                         throw new XMLStreamException(text);
    157                     }
    158                 }
    159                 super.parseUnknown(printWarning);
    160             }
    161         }.doParseDataSet(source, progressMonitor);
     163        return new OverpassOsmReader().doParseDataSet(source, progressMonitor);
    162164    }
    163165
  • trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java

    r11184 r11366  
    5353    private static final Set<String> trustedSenders = new HashSet<>();
    5454
     55    static final class PropertyTableModel extends DefaultTableModel {
     56        private final Class<?>[] types = {Boolean.class, String.class, Object.class, ExistingValues.class};
     57
     58        PropertyTableModel(int rowCount) {
     59            super(new String[] {tr("Assume"), tr("Key"), tr("Value"), tr("Existing values")}, rowCount);
     60        }
     61
     62        @Override
     63        public Class<?> getColumnClass(int c) {
     64            return types[c];
     65        }
     66    }
     67
    5568    /**
    5669     * Class for displaying "delete from ... objects" in the table
     
    131144        this.sender = senderName;
    132145
    133         final DefaultTableModel tm = new DefaultTableModel(new String[] {tr("Assume"), tr("Key"), tr("Value"), tr("Existing values")},
    134                 tags.length) {
    135             private final Class<?>[] types = {Boolean.class, String.class, Object.class, ExistingValues.class};
    136             @Override
    137             public Class<?> getColumnClass(int c) {
    138                 return types[c];
    139             }
    140         };
     146        final DefaultTableModel tm = new PropertyTableModel(tags.length);
    141147
    142148        sel = primitives;
  • trunk/src/org/openstreetmap/josm/tools/MultikeyActionsHandler.java

    r10616 r11366  
    3333    private final Map<MultikeyShortcutAction, MyAction> myActions = new HashMap<>();
    3434
    35     private static final class ShowLayersPopupWorker implements Runnable {
     35    static final class ShowLayersPopupWorker implements Runnable {
     36        static final class StatusLinePopupMenuListener implements PopupMenuListener {
     37            @Override
     38            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
     39                // Do nothing
     40            }
     41
     42            @Override
     43            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
     44                Main.map.statusLine.resetHelpText(STATUS_BAR_ID);
     45            }
     46
     47            @Override
     48            public void popupMenuCanceled(PopupMenuEvent e) {
     49                // Do nothing
     50            }
     51        }
     52
    3653        private final MyAction action;
    3754
    38         private ShowLayersPopupWorker(MyAction action) {
     55        ShowLayersPopupWorker(MyAction action) {
    3956            this.action = action;
    4057        }
     
    7794                }
    7895            }
    79             layers.addPopupMenuListener(new PopupMenuListener() {
    80 
    81                 @Override
    82                 public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
    83                     // Do nothing
    84                 }
    85 
    86                 @Override
    87                 public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
    88                     Main.map.statusLine.resetHelpText(STATUS_BAR_ID);
    89                 }
    90 
    91                 @Override
    92                 public void popupMenuCanceled(PopupMenuEvent e) {
    93                     // Do nothing
    94                 }
    95             });
    96 
     96            layers.addPopupMenuListener(new StatusLinePopupMenuListener());
    9797            layers.show(Main.parent, Integer.MAX_VALUE, Integer.MAX_VALUE);
    9898            layers.setLocation(Main.parent.getX() + Main.parent.getWidth() - layers.getWidth(),
    99                     Main.parent.getY() + Main.parent.getHeight() - layers.getHeight());
     99                               Main.parent.getY() + Main.parent.getHeight() - layers.getHeight());
    100100        }
    101101    }
Note: See TracChangeset for help on using the changeset viewer.