Index: trunk/src/org/openstreetmap/josm/tools/CopyList.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/CopyList.java	(revision 19048)
+++ trunk/src/org/openstreetmap/josm/tools/CopyList.java	(revision 19050)
@@ -139,5 +139,5 @@
     }
 
-    private class Itr implements Iterator<E> {
+    private final class Itr implements Iterator<E> {
         /**
          * Index of element to be returned by subsequent call to next.
@@ -198,5 +198,5 @@
         }
 
-        final void checkForComodification() {
+        void checkForComodification() {
             if (modCount != expectedModCount)
                 throw new ConcurrentModificationException();
Index: trunk/src/org/openstreetmap/josm/tools/I18n.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 19048)
+++ trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 19050)
@@ -646,5 +646,5 @@
 
     private static int pluralEval(long n) {
-        switch(pluralMode) {
+        switch (pluralMode) {
         case MODE_NOTONE: /* bg, da, de, el, en, en_AU, en_CA, en_GB, es, et, eu, fi, gl, is, it, iw_IL, mr, nb, nl, sv */
             return (n != 1) ? 1 : 0;
Index: trunk/src/org/openstreetmap/josm/tools/ImageResizeMode.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageResizeMode.java	(revision 19048)
+++ trunk/src/org/openstreetmap/josm/tools/ImageResizeMode.java	(revision 19050)
@@ -87,6 +87,6 @@
      */
     BufferedImage createBufferedImage(Dimension dim, Dimension icon, Consumer<Graphics2D> renderer, Image sourceIcon) {
-        final var real = computeDimension(dim, icon);
-        final var bufferedImage = new BufferedImage(real.width, real.height, BufferedImage.TYPE_INT_ARGB);
+        final Dimension real = computeDimension(dim, icon);
+        final BufferedImage bufferedImage = new BufferedImage(real.width, real.height, BufferedImage.TYPE_INT_ARGB);
         final Graphics2D g = bufferedImage.createGraphics();
         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Index: trunk/src/org/openstreetmap/josm/tools/ListenerList.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ListenerList.java	(revision 19048)
+++ trunk/src/org/openstreetmap/josm/tools/ListenerList.java	(revision 19050)
@@ -224,5 +224,5 @@
     }
 
-    private static class UncheckedListenerList<T> extends ListenerList<T> {
+    private static final class UncheckedListenerList<T> extends ListenerList<T> {
         @Override
         protected void failAdd(T listener) {
Index: trunk/src/org/openstreetmap/josm/tools/Logging.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Logging.java	(revision 19048)
+++ trunk/src/org/openstreetmap/josm/tools/Logging.java	(revision 19050)
@@ -130,7 +130,7 @@
 
         @Override
-        public synchronized void publish(LogRecord record) {
-            if (this.prioritizedHandler == null || !this.prioritizedHandler.isLoggable(record)) {
-                super.publish(record);
+        public synchronized void publish(LogRecord logRecord) {
+            if (this.prioritizedHandler == null || !this.prioritizedHandler.isLoggable(logRecord)) {
+                super.publish(logRecord);
             }
         }
@@ -481,5 +481,5 @@
     }
 
-    private static class RememberWarningHandler extends Handler {
+    private static final class RememberWarningHandler extends Handler {
         private final String[] log = new String[10];
         private int messagesLogged;
@@ -491,11 +491,11 @@
 
         @Override
-        public synchronized void publish(LogRecord record) {
+        public synchronized void publish(LogRecord logRecord) {
             // We don't use setLevel + isLoggable to work in WebStart Sandbox mode
-            if (record.getLevel().intValue() < LEVEL_WARN.intValue()) {
+            if (logRecord.getLevel().intValue() < LEVEL_WARN.intValue()) {
                 return;
             }
 
-            String msg = String.format(Locale.ROOT, "%09.3f %s%s", startup.elapsed() / 1000., getPrefix(record), record.getMessage());
+            String msg = String.format(Locale.ROOT, "%09.3f %s%s", startup.elapsed() / 1000., getPrefix(logRecord), logRecord.getMessage());
 
             // Only remember first line of message
@@ -508,6 +508,6 @@
         }
 
-        private static String getPrefix(LogRecord record) {
-            if (record.getLevel().equals(LEVEL_WARN)) {
+        private static String getPrefix(LogRecord logRecord) {
+            if (logRecord.getLevel().equals(LEVEL_WARN)) {
                 return "W: ";
             } else {
Index: trunk/src/org/openstreetmap/josm/tools/Shortcut.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 19048)
+++ trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 19050)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
 import java.util.ArrayList;
@@ -246,5 +247,5 @@
     public void setAccelerator(AbstractAction action) {
         if (getKeyStroke() != null) {
-            action.putValue(AbstractAction.ACCELERATOR_KEY, getKeyStroke());
+            action.putValue(Action.ACCELERATOR_KEY, getKeyStroke());
         }
     }
@@ -266,5 +267,5 @@
     public static String getKeyText(KeyStroke keyStroke) {
         if (keyStroke == null) return "";
-        String modifText = KeyEvent.getModifiersExText(keyStroke.getModifiers());
+        String modifText = InputEvent.getModifiersExText(keyStroke.getModifiers());
         if (modifText.isEmpty()) return KeyEvent.getKeyText(keyStroke.getKeyCode());
         return modifText + '+' + KeyEvent.getKeyText(keyStroke.getKeyCode());
@@ -307,5 +308,5 @@
     private static final ShortcutCollection shortcuts = new ShortcutCollection();
 
-    private static class ShortcutCollection extends CopyOnWriteArrayList<Shortcut> {
+    private static final class ShortcutCollection extends CopyOnWriteArrayList<Shortcut> {
         private static final long serialVersionUID = 1L;
         @Override
@@ -398,13 +399,13 @@
         int commandDownMask = PlatformManager.getPlatform().getMenuShortcutKeyMaskEx();
         groups.put(NONE, -1);
-        groups.put(MNEMONIC, KeyEvent.ALT_DOWN_MASK);
+        groups.put(MNEMONIC, InputEvent.ALT_DOWN_MASK);
         groups.put(DIRECT, 0);
-        groups.put(ALT, KeyEvent.ALT_DOWN_MASK);
-        groups.put(SHIFT, KeyEvent.SHIFT_DOWN_MASK);
+        groups.put(ALT, InputEvent.ALT_DOWN_MASK);
+        groups.put(SHIFT, InputEvent.SHIFT_DOWN_MASK);
         groups.put(CTRL, commandDownMask);
-        groups.put(ALT_SHIFT, KeyEvent.ALT_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK);
-        groups.put(ALT_CTRL, KeyEvent.ALT_DOWN_MASK | commandDownMask);
-        groups.put(CTRL_SHIFT, commandDownMask | KeyEvent.SHIFT_DOWN_MASK);
-        groups.put(ALT_CTRL_SHIFT, KeyEvent.ALT_DOWN_MASK | commandDownMask | KeyEvent.SHIFT_DOWN_MASK);
+        groups.put(ALT_SHIFT, InputEvent.ALT_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK);
+        groups.put(ALT_CTRL, InputEvent.ALT_DOWN_MASK | commandDownMask);
+        groups.put(CTRL_SHIFT, commandDownMask | InputEvent.SHIFT_DOWN_MASK);
+        groups.put(ALT_CTRL_SHIFT, InputEvent.ALT_DOWN_MASK | commandDownMask | InputEvent.SHIFT_DOWN_MASK);
 
         // (1) System reserved shortcuts
@@ -567,8 +568,8 @@
     private static int findNewOsxModifier(int requestedGroup) {
         switch (requestedGroup) {
-            case CTRL: return KeyEvent.CTRL_DOWN_MASK;
-            case ALT_CTRL: return KeyEvent.ALT_DOWN_MASK | KeyEvent.CTRL_DOWN_MASK;
-            case CTRL_SHIFT: return KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK;
-            case ALT_CTRL_SHIFT: return KeyEvent.ALT_DOWN_MASK | KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK;
+            case CTRL: return InputEvent.CTRL_DOWN_MASK;
+            case ALT_CTRL: return InputEvent.ALT_DOWN_MASK | InputEvent.CTRL_DOWN_MASK;
+            case CTRL_SHIFT: return InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK;
+            case ALT_CTRL_SHIFT: return InputEvent.ALT_DOWN_MASK | InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK;
             default: return 0;
         }
Index: trunk/src/org/openstreetmap/josm/tools/Utils.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 19048)
+++ trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 19050)
@@ -9,5 +9,4 @@
 import java.awt.font.FontRenderContext;
 import java.awt.font.GlyphVector;
-import java.io.ByteArrayOutputStream;
 import java.io.Closeable;
 import java.io.File;
@@ -30,4 +29,5 @@
 import java.nio.file.StandardCopyOption;
 import java.nio.file.attribute.BasicFileAttributes;
+import java.nio.file.attribute.FileTime;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
@@ -152,6 +152,6 @@
      */
     public static <T> int indexOf(Iterable<? extends T> collection, Predicate<? super T> predicate) {
-        var i = 0;
-        for (var item : collection) {
+        int i = 0;
+        for (T item : collection) {
             if (predicate.test(item))
                 return i;
@@ -168,5 +168,5 @@
      * @throws AssertionError if the condition is not met
      */
-    public static void ensure(boolean condition, String message, Object...data) {
+    public static void ensure(boolean condition, String message, Object... data) {
         if (!condition)
             throw new AssertionError(
@@ -185,5 +185,5 @@
         if (n <= 0)
             throw new IllegalArgumentException("n must be <= 0 but is " + n);
-        var res = a % n;
+        int res = a % n;
         if (res < 0) {
             res += n;
@@ -303,8 +303,8 @@
             Logging.warn("Unable to create directory "+out.getPath());
         }
-        var files = in.listFiles();
+        File[] files = in.listFiles();
         if (files != null) {
-            for (var f : files) {
-                var target = new File(out, f.getName());
+            for (File f : files) {
+                File target = new File(out, f.getName());
                 if (f.isDirectory()) {
                     copyDirectory(f, target);
@@ -324,7 +324,7 @@
     public static boolean deleteDirectory(File path) {
         if (path.exists()) {
-            var files = path.listFiles();
+            File[] files = path.listFiles();
             if (files != null) {
-                for (var file : files) {
+                for (File file : files) {
                     if (file.isDirectory()) {
                         deleteDirectory(file);
@@ -371,5 +371,5 @@
      */
     public static boolean deleteFile(File file, String warnMsg) {
-        var result = file.delete();
+        boolean result = file.delete();
         if (!result) {
             Logging.warn(tr(warnMsg, file.getPath()));
@@ -397,5 +397,5 @@
      */
     public static boolean mkDirs(File dir, String warnMsg) {
-        var result = dir.mkdirs();
+        boolean result = dir.mkdirs();
         if (!result) {
             Logging.warn(tr(warnMsg, dir.getPath()));
@@ -497,6 +497,6 @@
             throw new JosmRuntimeException(e);
         }
-        var byteData = data.getBytes(StandardCharsets.UTF_8);
-        var byteDigest = md.digest(byteData);
+        byte[] byteData = data.getBytes(StandardCharsets.UTF_8);
+        byte[] byteDigest = md.digest(byteData);
         return toHexString(byteDigest);
     }
@@ -517,11 +517,11 @@
         }
 
-        final var len = bytes.length;
+        final int len = bytes.length;
         if (len == 0) {
             return "";
         }
 
-        var hexChars = new char[len * 2];
-        var j = 0;
+        char[] hexChars = new char[len * 2];
+        int j = 0;
         for (final int v : bytes) {
             hexChars[j++] = HEX_ARRAY[(v & 0xf0) >> 4];
@@ -541,8 +541,8 @@
      */
     public static <T> List<T> topologicalSort(final MultiMap<T, T> dependencies) {
-        var deps = new MultiMap<T, T>();
-        for (var key : dependencies.keySet()) {
+        MultiMap<T, T> deps = new MultiMap<>();
+        for (T key : dependencies.keySet()) {
             deps.putVoid(key);
-            for (var val : dependencies.get(key)) {
+            for (T val : dependencies.get(key)) {
                 deps.putVoid(val);
                 deps.put(key, val);
@@ -550,8 +550,8 @@
         }
 
-        var size = deps.size();
+        int size = deps.size();
         List<T> sorted = new ArrayList<>();
-        for (var i = 0; i < size; ++i) {
-            var parentless = deps.keySet().stream()
+        for (int i = 0; i < size; ++i) {
+            T parentless = deps.keySet().stream()
                     .filter(key -> deps.get(key).isEmpty())
                     .findFirst().orElse(null);
@@ -559,5 +559,5 @@
             sorted.add(parentless);
             deps.remove(parentless);
-            for (var key : deps.keySet()) {
+            for (T key : deps.keySet()) {
                 deps.remove(key, parentless);
             }
@@ -679,5 +679,5 @@
             return Collections.emptyMap();
         } else if (map.size() == 1) {
-            final var entry = map.entrySet().iterator().next();
+            final Map.Entry<K, V> entry = map.entrySet().iterator().next();
             return Collections.singletonMap(entry.getKey(), entry.getValue());
         } else if (mapOfEntries != null) {
@@ -795,7 +795,7 @@
         }
 
-        var start = 0;
-        var end = str.length();
-        var leadingSkipChar = true;
+        int start = 0;
+        int end = str.length();
+        boolean leadingSkipChar = true;
         while (leadingSkipChar && start < end) {
             leadingSkipChar = isStrippedChar(str.charAt(start), skipChars);
@@ -804,5 +804,5 @@
             }
         }
-        var trailingSkipChar = true;
+        boolean trailingSkipChar = true;
         while (trailingSkipChar && end > start) {
             trailingSkipChar = isStrippedChar(str.charAt(end - 1), skipChars);
@@ -866,7 +866,7 @@
             Logging.debug(String.join(" ", command));
         }
-        var out = Files.createTempFile("josm_exec_" + command.get(0) + "_", ".txt");
+        Path out = Files.createTempFile("josm_exec_" + command.get(0) + "_", ".txt");
         try {
-            var p = new ProcessBuilder(command).redirectErrorStream(true).redirectOutput(out.toFile()).start();
+            Process p = new ProcessBuilder(command).redirectErrorStream(true).redirectOutput(out.toFile()).start();
             if (!p.waitFor(timeout, unit) || p.exitValue() != 0) {
                 throw new ExecutionException(command.toString(), null);
@@ -888,9 +888,9 @@
      */
     public static File getJosmTempDir() {
-        var tmpDir = getSystemProperty("java.io.tmpdir");
+        String tmpDir = getSystemProperty("java.io.tmpdir");
         if (tmpDir == null) {
             return null;
         }
-        final var josmTmpDir = new File(tmpDir, "JOSM");
+        final File josmTmpDir = new File(tmpDir, "JOSM");
         if (!josmTmpDir.exists() && !josmTmpDir.mkdirs()) {
             Logging.warn("Unable to create temp directory " + josmTmpDir);
@@ -920,13 +920,13 @@
         // Is it less than 1 hour ?
         if (elapsedTime < MILLIS_OF_HOUR) {
-            final var min = elapsedTime / MILLIS_OF_MINUTE;
+            final long min = elapsedTime / MILLIS_OF_MINUTE;
             return String.format("%d %s %d %s", min, tr("min"), (elapsedTime - min * MILLIS_OF_MINUTE) / MILLIS_OF_SECOND, tr("s"));
         }
         // Is it less than 1 day ?
         if (elapsedTime < MILLIS_OF_DAY) {
-            final var hour = elapsedTime / MILLIS_OF_HOUR;
+            final long hour = elapsedTime / MILLIS_OF_HOUR;
             return String.format("%d %s %d %s", hour, tr("h"), (elapsedTime - hour * MILLIS_OF_HOUR) / MILLIS_OF_MINUTE, tr("min"));
         }
-        var days = elapsedTime / MILLIS_OF_DAY;
+        long days = elapsedTime / MILLIS_OF_DAY;
         return String.format("%d %s %d %s", days, trn("day", "days", days), (elapsedTime - days * MILLIS_OF_DAY) / MILLIS_OF_HOUR, tr("h"));
     }
@@ -943,5 +943,5 @@
             throw new IllegalArgumentException("bytes must be >= 0");
         }
-        var unitIndex = 0;
+        int unitIndex = 0;
         double value = bytes;
         while (value >= 1024 && unitIndex < SIZE_UNITS.length) {
@@ -967,9 +967,9 @@
     public static String getPositionListString(List<Integer> positionList) {
         Collections.sort(positionList);
-        final var sb = new StringBuilder(32);
+        final StringBuilder sb = new StringBuilder(32);
         sb.append(positionList.get(0));
-        var cnt = 0;
+        int cnt = 0;
         int last = positionList.get(0);
-        for (var i = 1; i < positionList.size(); ++i) {
+        for (int i = 1; i < positionList.size(); ++i) {
             int cur = positionList.get(i);
             if (cur == last + 1) {
@@ -1030,7 +1030,7 @@
      */
     public static Throwable getRootCause(Throwable t) {
-        var result = t;
+        Throwable result = t;
         if (result != null) {
-            var cause = result.getCause();
+            Throwable cause = result.getCause();
             while (cause != null && !cause.equals(result)) {
                 result = cause;
@@ -1050,5 +1050,5 @@
      */
     public static <T> T[] addInArrayCopy(T[] array, T item) {
-        var biggerCopy = Arrays.copyOf(array, array.length + 1);
+        T[] biggerCopy = Arrays.copyOf(array, array.length + 1);
         biggerCopy[array.length] = item;
         return biggerCopy;
@@ -1063,5 +1063,5 @@
      */
     public static String shortenString(String s, int maxLength) {
-        final var ellipses = "...";
+        final String ellipses = "...";
         CheckParameterUtil.ensureThat(maxLength >= ellipses.length(), "maxLength is shorter than " + ellipses.length());
         if (s != null && s.length() > maxLength) {
@@ -1101,5 +1101,5 @@
             if (elements.size() > maxElements) {
                 final Collection<T> r = new ArrayList<>(maxElements);
-                final var it = elements.iterator();
+                final Iterator<T> it = elements.iterator();
                 while (r.size() < maxElements - 1) {
                     r.add(it.next());
@@ -1126,10 +1126,10 @@
             return url;
 
-        final var query = url.substring(url.indexOf('?') + 1);
-
-        final var sb = new StringBuilder(url.substring(0, url.indexOf('?') + 1));
-
-        for (var i = 0; i < query.length(); i++) {
-            final var c = query.substring(i, i + 1);
+        final String query = url.substring(url.indexOf('?') + 1);
+
+        final StringBuilder sb = new StringBuilder(url.substring(0, url.indexOf('?') + 1));
+
+        for (int i = 0; i < query.length(); i++) {
+            final String c = query.substring(i, i + 1);
             if (URL_CHARS.contains(c)) {
                 sb.append(c);
@@ -1152,5 +1152,5 @@
      */
     public static String encodeUrl(String s) {
-        final var enc = StandardCharsets.UTF_8.name();
+        final String enc = StandardCharsets.UTF_8.name();
         try {
             return URLEncoder.encode(s, enc);
@@ -1172,5 +1172,5 @@
      */
     public static String decodeUrl(String s) {
-        final var enc = StandardCharsets.UTF_8.name();
+        final String enc = StandardCharsets.UTF_8.name();
         try {
             return URLDecoder.decode(s, enc);
@@ -1220,5 +1220,5 @@
             @Override
             public Thread newThread(final Runnable runnable) {
-                final var thread = new Thread(runnable, String.format(Locale.ENGLISH, nameFormat, count.getAndIncrement()));
+                final Thread thread = new Thread(runnable, String.format(Locale.ENGLISH, nameFormat, count.getAndIncrement()));
                 thread.setPriority(threadPriority);
                 return thread;
@@ -1298,5 +1298,5 @@
     public static boolean isSimilar(String string1, String string2) {
         // check plain strings
-        var distance = getLevenshteinDistance(string1, string2);
+        int distance = getLevenshteinDistance(string1, string2);
 
         // check if only the case differs, so we don't consider large distance as different strings
@@ -1339,5 +1339,5 @@
         }
 
-        for (var length : values) {
+        for (double length : values) {
             standardDeviation += Math.pow(length - mean, 2);
         }
@@ -1360,7 +1360,7 @@
         }
         List<int[]> groups = new ArrayList<>();
-        var current = new int[]{Integer.MIN_VALUE, Integer.MIN_VALUE};
+        int[] current = {Integer.MIN_VALUE, Integer.MIN_VALUE};
         groups.add(current);
-        for (var row : integers) {
+        for (int row : integers) {
             if (current[0] == Integer.MIN_VALUE) {
                 current[0] = row;
@@ -1397,5 +1397,5 @@
     @SuppressWarnings("ThreadPriorityCheck")
     public static ForkJoinPool newForkJoinPool(String pref, final String nameFormat, final int threadPriority) {
-        final var noThreads = Config.getPref().getInt(pref, Runtime.getRuntime().availableProcessors());
+        final int noThreads = Config.getPref().getInt(pref, Runtime.getRuntime().availableProcessors());
         return new ForkJoinPool(noThreads, new ForkJoinPool.ForkJoinWorkerThreadFactory() {
             final AtomicLong count = new AtomicLong(0);
@@ -1467,5 +1467,5 @@
         if (value != null) {
             try {
-                var old = System.setProperty(key, value);
+                String old = System.setProperty(key, value);
                 if (Logging.isDebugEnabled() && !value.equals(old)) {
                     if (!key.toLowerCase(Locale.ENGLISH).contains("password")) {
@@ -1493,5 +1493,5 @@
      */
     public static boolean hasExtension(String filename, String... extensions) {
-        var name = filename.toLowerCase(Locale.ENGLISH).replace("?format=raw", "");
+        String name = filename.toLowerCase(Locale.ENGLISH).replace("?format=raw", "");
         return Arrays.stream(extensions)
                 .anyMatch(ext -> name.endsWith('.' + ext.toLowerCase(Locale.ENGLISH)));
@@ -1516,25 +1516,12 @@
      * @return byte array of data in input stream (empty if stream is null)
      * @throws IOException if any I/O error occurs
-     */
+     * @deprecated since xxx -- use {@link InputStream#readAllBytes()} instead
+     */
+    @Deprecated
     public static byte[] readBytesFromStream(InputStream stream) throws IOException {
-        // TODO: remove this method when switching to Java 11 and use InputStream.readAllBytes
         if (stream == null) {
             return new byte[0];
         }
-        try (stream; var bout = new ByteArrayOutputStream(stream.available())) {
-            final var buffer = new byte[8192];
-            var finished = false;
-            do {
-                var read = stream.read(buffer);
-                if (read >= 0) {
-                    bout.write(buffer, 0, read);
-                } else {
-                    finished = true;
-                }
-            } while (!finished);
-            if (bout.size() == 0)
-                return new byte[0];
-            return bout.toByteArray();
-        }
+        return stream.readAllBytes();
     }
 
@@ -1600,17 +1587,17 @@
      */
     public static List<GlyphVector> getGlyphVectorsBidi(String string, Font font, FontRenderContext frc) {
-        final var gvs = new ArrayList<GlyphVector>();
-        final var bidi = new Bidi(string, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
-        final var levels = new byte[bidi.getRunCount()];
-        final var dirStrings = new DirectionString[levels.length];
-        for (var i = 0; i < levels.length; ++i) {
+        final List<GlyphVector> gvs = new ArrayList<>();
+        final Bidi bidi = new Bidi(string, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
+        final byte[] levels = new byte[bidi.getRunCount()];
+        final DirectionString[] dirStrings = new DirectionString[levels.length];
+        for (int i = 0; i < levels.length; ++i) {
             levels[i] = (byte) bidi.getRunLevel(i);
-            final var substr = string.substring(bidi.getRunStart(i), bidi.getRunLimit(i));
-            final var dir = levels[i] % 2 == 0 ? Bidi.DIRECTION_LEFT_TO_RIGHT : Bidi.DIRECTION_RIGHT_TO_LEFT;
+            final String substr = string.substring(bidi.getRunStart(i), bidi.getRunLimit(i));
+            final int dir = levels[i] % 2 == 0 ? Bidi.DIRECTION_LEFT_TO_RIGHT : Bidi.DIRECTION_RIGHT_TO_LEFT;
             dirStrings[i] = new DirectionString(dir, substr);
         }
         Bidi.reorderVisually(levels, 0, dirStrings, 0, levels.length);
-        for (var dirString : dirStrings) {
-            var chars = dirString.str.toCharArray();
+        for (DirectionString dirString : dirStrings) {
+            final char[] chars = dirString.str.toCharArray();
             gvs.add(font.layoutGlyphVector(frc, chars, 0, chars.length, dirString.direction));
         }
@@ -1709,5 +1696,5 @@
     public static int getJavaVersion() {
         // Switch to Runtime.version() once we move past Java 8
-        var version = Objects.requireNonNull(getSystemProperty("java.version"));
+        String version = Objects.requireNonNull(getSystemProperty("java.version"));
         if (version.startsWith("1.")) {
             version = version.substring(2);
@@ -1718,6 +1705,6 @@
         // 9
         // 9.0.1
-        var dotPos = version.indexOf('.');
-        var dashPos = version.indexOf('-');
+        int dotPos = version.indexOf('.');
+        int dashPos = version.indexOf('-');
         return Integer.parseInt(version.substring(0,
                 dotPos > -1 ? dotPos : dashPos > -1 ? dashPos : version.length()));
@@ -1731,5 +1718,5 @@
     public static int getJavaUpdate() {
         // Switch to Runtime.version() once we move past Java 8
-        var version = Objects.requireNonNull(getSystemProperty("java.version"));
+        String version = Objects.requireNonNull(getSystemProperty("java.version"));
         if (version.startsWith("1.")) {
             version = version.substring(2);
@@ -1742,12 +1729,12 @@
         // 17.0.4.1+1-LTS
         // $MAJOR.$MINOR.$SECURITY.$PATCH
-        var undePos = version.indexOf('_');
-        var dashPos = version.indexOf('-');
+        int undePos = version.indexOf('_');
+        int dashPos = version.indexOf('-');
         if (undePos > -1) {
             return Integer.parseInt(version.substring(undePos + 1,
                     dashPos > -1 ? dashPos : version.length()));
         }
-        var firstDotPos = version.indexOf('.');
-        var secondDotPos = version.indexOf('.', firstDotPos + 1);
+        int firstDotPos = version.indexOf('.');
+        int secondDotPos = version.indexOf('.', firstDotPos + 1);
         if (firstDotPos == secondDotPos) {
             return 0;
@@ -1764,7 +1751,7 @@
     public static int getJavaBuild() {
         // Switch to Runtime.version() once we move past Java 8
-        var version = Objects.requireNonNull(getSystemProperty("java.runtime.version"));
-        var bPos = version.indexOf('b');
-        var pPos = version.indexOf('+');
+        String version = Objects.requireNonNull(getSystemProperty("java.runtime.version"));
+        int bPos = version.indexOf('b');
+        int pPos = version.indexOf('+');
         try {
             return Integer.parseInt(version.substring(bPos > -1 ? bPos + 1 : pPos + 1));
@@ -1783,5 +1770,5 @@
         try {
             Object value;
-            var c = Class.forName("com.sun.deploy.config.BuiltInProperties");
+            Class<?> c = Class.forName("com.sun.deploy.config.BuiltInProperties");
             try {
                 value = c.getDeclaredField("JRE_EXPIRATION_DATE").get(null);
@@ -1807,5 +1794,5 @@
     public static String getJavaLatestVersion() {
         try {
-            var versions = HttpClient.create(
+            String[] versions = HttpClient.create(
                     new URL(Config.getPref().get(
                             "java.baseline.version.url",
@@ -1813,5 +1800,5 @@
                     .connect().fetchContent().split("\n", -1);
             if (getJavaVersion() <= 11 && isRunningWebStart()) { // OpenWebStart currently only has Java 11
-                for (var version : versions) {
+                for (String version : versions) {
                     if (version.startsWith("11")) {
                         return version;
@@ -1819,5 +1806,5 @@
                 }
             } else if (getJavaVersion() <= 17) {
-                for (var version : versions) {
+                for (String version : versions) {
                     if (version.startsWith("17")) { // Use current Java LTS
                         return version;
@@ -1942,5 +1929,5 @@
                     return url.openStream();
                 } catch (FileNotFoundException | InvalidPathException e) {
-                    final var betterUrl = betterJarUrl(url);
+                    final URL betterUrl = betterJarUrl(url);
                     if (betterUrl != null) {
                         try {
@@ -1979,13 +1966,13 @@
     public static URL betterJarUrl(URL jarUrl, URL defaultUrl) throws IOException {
         // Workaround to https://bugs.openjdk.java.net/browse/JDK-4523159
-        var urlPath = jarUrl.getPath().replace("%20", " ");
+        String urlPath = jarUrl.getPath().replace("%20", " ");
         if (urlPath.startsWith("file:/") && urlPath.split("!", -1).length > 2) {
             // Locate jar file
-            var index = urlPath.lastIndexOf("!/");
-            final var jarFile = Paths.get(urlPath.substring("file:/".length(), index));
-            var filename = jarFile.getFileName();
-            var jarTime = Files.readAttributes(jarFile, BasicFileAttributes.class).lastModifiedTime();
+            int index = urlPath.lastIndexOf("!/");
+            final Path jarFile = Paths.get(urlPath.substring("file:/".length(), index));
+            Path filename = jarFile.getFileName();
+            FileTime jarTime = Files.readAttributes(jarFile, BasicFileAttributes.class).lastModifiedTime();
             // Copy it to temp directory (hopefully free of exclamation mark) if needed (missing or older jar)
-            final var jarCopy = Paths.get(getSystemProperty("java.io.tmpdir")).resolve(filename);
+            final Path jarCopy = Paths.get(getSystemProperty("java.io.tmpdir")).resolve(filename);
             if (!jarCopy.toFile().exists() ||
                     Files.readAttributes(jarCopy, BasicFileAttributes.class).lastModifiedTime().compareTo(jarTime) < 0) {
@@ -2026,5 +2013,5 @@
             Logging.trace(e);
             try {
-                final var betterUrl = betterJarUrl(cl.getResource(path));
+                final URL betterUrl = betterJarUrl(cl.getResource(path));
                 if (betterUrl != null) {
                     return betterUrl.openStream();
Index: trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java	(revision 19048)
+++ trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java	(revision 19050)
@@ -65,5 +65,5 @@
     }
 
-    private class Parser extends DefaultHandler {
+    private final class Parser extends DefaultHandler {
         private final Stack<Object> current = new Stack<>();
         private StringBuilder characters = new StringBuilder(64);
@@ -78,5 +78,5 @@
         }
 
-        protected void throwException(Exception e) throws XmlParsingException {
+        void throwException(Exception e) throws XmlParsingException {
             throw new XmlParsingException(e).rememberLocation(locator);
         }
Index: trunk/src/org/openstreetmap/josm/tools/bugreport/BugReportQueue.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/bugreport/BugReportQueue.java	(revision 19048)
+++ trunk/src/org/openstreetmap/josm/tools/bugreport/BugReportQueue.java	(revision 19050)
@@ -89,5 +89,5 @@
     }
 
-    private class BugReportDisplayRunnable implements Runnable {
+    private final class BugReportDisplayRunnable implements Runnable {
 
         private volatile boolean running = true;
