Ignore:
Timestamp:
2024-04-19T16:21:11+02:00 (8 months ago)
Author:
taylor.smock
Message:

Dependency updates

ivy.xml

  • org.eclipse.parsson:parsson: 1.1.5 -> 1.1.6
  • org.apache.commons:commons-compress: 1.25.0 -> 1.26.1
    • Note: This deprecated some functions
  • ch.poole:OpeningHoursParser: 0.28.1 -> 0.28.2
  • org.jacoco:org.jacoco.ant: 0.8.11 -> 0.8.12
  • com.github.spotbugs:spotbugs-annotations: 4.8.3 -> 4.8.4
  • com.github.tomakehurst:wiremock: 2.35.0 -> 3.0.1
  • io.github.classgraph:classgraph: 4.8.165 -> 4.8.171
  • nl.jqno.equalsverifier:equalsverifier: 3.15.6 -> 3.16.1
  • org.awaitility:awaitility: 4.2.0 -> 4.2.1

tools/ivy.xml

  • com.puppycrawl.tools:checkstyle: 9.3 -> 10.15.0
  • com.github.spotbugs:spotbugs: 4.8.3 -> 4.8.4
  • com.google.errorprone: 2.(10.0|24.1) -> 2.26.1
  • net.sourceforge.pmd:pmd was not updated to 7.0.0 due to a significant number of false positives.

There were some additional changes to cleanup new warnings and remove some
additional Java 8 files. There are more warnings that need to be cleaned up.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/tools/Utils.java

    r18811 r19048  
    3030import java.nio.file.StandardCopyOption;
    3131import java.nio.file.attribute.BasicFileAttributes;
    32 import java.nio.file.attribute.FileTime;
    3332import java.security.MessageDigest;
    3433import java.security.NoSuchAlgorithmException;
     
    153152     */
    154153    public static <T> int indexOf(Iterable<? extends T> collection, Predicate<? super T> predicate) {
    155         int i = 0;
    156         for (T item : collection) {
     154        var i = 0;
     155        for (var item : collection) {
    157156            if (predicate.test(item))
    158157                return i;
     
    186185        if (n <= 0)
    187186            throw new IllegalArgumentException("n must be <= 0 but is " + n);
    188         int res = a % n;
     187        var res = a % n;
    189188        if (res < 0) {
    190189            res += n;
     
    304303            Logging.warn("Unable to create directory "+out.getPath());
    305304        }
    306         File[] files = in.listFiles();
     305        var files = in.listFiles();
    307306        if (files != null) {
    308             for (File f : files) {
    309                 File target = new File(out, f.getName());
     307            for (var f : files) {
     308                var target = new File(out, f.getName());
    310309                if (f.isDirectory()) {
    311310                    copyDirectory(f, target);
     
    325324    public static boolean deleteDirectory(File path) {
    326325        if (path.exists()) {
    327             File[] files = path.listFiles();
     326            var files = path.listFiles();
    328327            if (files != null) {
    329                 for (File file : files) {
     328                for (var file : files) {
    330329                    if (file.isDirectory()) {
    331330                        deleteDirectory(file);
     
    372371     */
    373372    public static boolean deleteFile(File file, String warnMsg) {
    374         boolean result = file.delete();
     373        var result = file.delete();
    375374        if (!result) {
    376375            Logging.warn(tr(warnMsg, file.getPath()));
     
    398397     */
    399398    public static boolean mkDirs(File dir, String warnMsg) {
    400         boolean result = dir.mkdirs();
     399        var result = dir.mkdirs();
    401400        if (!result) {
    402401            Logging.warn(tr(warnMsg, dir.getPath()));
     
    498497            throw new JosmRuntimeException(e);
    499498        }
    500         byte[] byteData = data.getBytes(StandardCharsets.UTF_8);
    501         byte[] byteDigest = md.digest(byteData);
     499        var byteData = data.getBytes(StandardCharsets.UTF_8);
     500        var byteDigest = md.digest(byteData);
    502501        return toHexString(byteDigest);
    503502    }
     
    518517        }
    519518
    520         final int len = bytes.length;
     519        final var len = bytes.length;
    521520        if (len == 0) {
    522521            return "";
    523522        }
    524523
    525         char[] hexChars = new char[len * 2];
    526         int j = 0;
     524        var hexChars = new char[len * 2];
     525        var j = 0;
    527526        for (final int v : bytes) {
    528527            hexChars[j++] = HEX_ARRAY[(v & 0xf0) >> 4];
     
    542541     */
    543542    public static <T> List<T> topologicalSort(final MultiMap<T, T> dependencies) {
    544         MultiMap<T, T> deps = new MultiMap<>();
    545         for (T key : dependencies.keySet()) {
     543        var deps = new MultiMap<T, T>();
     544        for (var key : dependencies.keySet()) {
    546545            deps.putVoid(key);
    547             for (T val : dependencies.get(key)) {
     546            for (var val : dependencies.get(key)) {
    548547                deps.putVoid(val);
    549548                deps.put(key, val);
     
    551550        }
    552551
    553         int size = deps.size();
     552        var size = deps.size();
    554553        List<T> sorted = new ArrayList<>();
    555         for (int i = 0; i < size; ++i) {
    556             T parentless = deps.keySet().stream()
     554        for (var i = 0; i < size; ++i) {
     555            var parentless = deps.keySet().stream()
    557556                    .filter(key -> deps.get(key).isEmpty())
    558557                    .findFirst().orElse(null);
     
    560559            sorted.add(parentless);
    561560            deps.remove(parentless);
    562             for (T key : deps.keySet()) {
     561            for (var key : deps.keySet()) {
    563562                deps.remove(key, parentless);
    564563            }
     
    680679            return Collections.emptyMap();
    681680        } else if (map.size() == 1) {
    682             final Map.Entry<K, V> entry = map.entrySet().iterator().next();
     681            final var entry = map.entrySet().iterator().next();
    683682            return Collections.singletonMap(entry.getKey(), entry.getValue());
    684683        } else if (mapOfEntries != null) {
     
    796795        }
    797796
    798         int start = 0;
    799         int end = str.length();
    800         boolean leadingSkipChar = true;
     797        var start = 0;
     798        var end = str.length();
     799        var leadingSkipChar = true;
    801800        while (leadingSkipChar && start < end) {
    802801            leadingSkipChar = isStrippedChar(str.charAt(start), skipChars);
     
    805804            }
    806805        }
    807         boolean trailingSkipChar = true;
     806        var trailingSkipChar = true;
    808807        while (trailingSkipChar && end > start) {
    809808            trailingSkipChar = isStrippedChar(str.charAt(end - 1), skipChars);
     
    867866            Logging.debug(String.join(" ", command));
    868867        }
    869         Path out = Files.createTempFile("josm_exec_" + command.get(0) + "_", ".txt");
     868        var out = Files.createTempFile("josm_exec_" + command.get(0) + "_", ".txt");
    870869        try {
    871             Process p = new ProcessBuilder(command).redirectErrorStream(true).redirectOutput(out.toFile()).start();
     870            var p = new ProcessBuilder(command).redirectErrorStream(true).redirectOutput(out.toFile()).start();
    872871            if (!p.waitFor(timeout, unit) || p.exitValue() != 0) {
    873872                throw new ExecutionException(command.toString(), null);
     
    889888     */
    890889    public static File getJosmTempDir() {
    891         String tmpDir = getSystemProperty("java.io.tmpdir");
     890        var tmpDir = getSystemProperty("java.io.tmpdir");
    892891        if (tmpDir == null) {
    893892            return null;
    894893        }
    895         File josmTmpDir = new File(tmpDir, "JOSM");
     894        final var josmTmpDir = new File(tmpDir, "JOSM");
    896895        if (!josmTmpDir.exists() && !josmTmpDir.mkdirs()) {
    897896            Logging.warn("Unable to create temp directory " + josmTmpDir);
     
    921920        // Is it less than 1 hour ?
    922921        if (elapsedTime < MILLIS_OF_HOUR) {
    923             final long min = elapsedTime / MILLIS_OF_MINUTE;
     922            final var min = elapsedTime / MILLIS_OF_MINUTE;
    924923            return String.format("%d %s %d %s", min, tr("min"), (elapsedTime - min * MILLIS_OF_MINUTE) / MILLIS_OF_SECOND, tr("s"));
    925924        }
    926925        // Is it less than 1 day ?
    927926        if (elapsedTime < MILLIS_OF_DAY) {
    928             final long hour = elapsedTime / MILLIS_OF_HOUR;
     927            final var hour = elapsedTime / MILLIS_OF_HOUR;
    929928            return String.format("%d %s %d %s", hour, tr("h"), (elapsedTime - hour * MILLIS_OF_HOUR) / MILLIS_OF_MINUTE, tr("min"));
    930929        }
    931         long days = elapsedTime / MILLIS_OF_DAY;
     930        var days = elapsedTime / MILLIS_OF_DAY;
    932931        return String.format("%d %s %d %s", days, trn("day", "days", days), (elapsedTime - days * MILLIS_OF_DAY) / MILLIS_OF_HOUR, tr("h"));
    933932    }
     
    944943            throw new IllegalArgumentException("bytes must be >= 0");
    945944        }
    946         int unitIndex = 0;
     945        var unitIndex = 0;
    947946        double value = bytes;
    948947        while (value >= 1024 && unitIndex < SIZE_UNITS.length) {
     
    968967    public static String getPositionListString(List<Integer> positionList) {
    969968        Collections.sort(positionList);
    970         final StringBuilder sb = new StringBuilder(32);
     969        final var sb = new StringBuilder(32);
    971970        sb.append(positionList.get(0));
    972         int cnt = 0;
     971        var cnt = 0;
    973972        int last = positionList.get(0);
    974         for (int i = 1; i < positionList.size(); ++i) {
     973        for (var i = 1; i < positionList.size(); ++i) {
    975974            int cur = positionList.get(i);
    976975            if (cur == last + 1) {
     
    10311030     */
    10321031    public static Throwable getRootCause(Throwable t) {
    1033         Throwable result = t;
     1032        var result = t;
    10341033        if (result != null) {
    1035             Throwable cause = result.getCause();
     1034            var cause = result.getCause();
    10361035            while (cause != null && !cause.equals(result)) {
    10371036                result = cause;
     
    10511050     */
    10521051    public static <T> T[] addInArrayCopy(T[] array, T item) {
    1053         T[] biggerCopy = Arrays.copyOf(array, array.length + 1);
     1052        var biggerCopy = Arrays.copyOf(array, array.length + 1);
    10541053        biggerCopy[array.length] = item;
    10551054        return biggerCopy;
     
    10641063     */
    10651064    public static String shortenString(String s, int maxLength) {
    1066         final String ellipses = "...";
     1065        final var ellipses = "...";
    10671066        CheckParameterUtil.ensureThat(maxLength >= ellipses.length(), "maxLength is shorter than " + ellipses.length());
    10681067        if (s != null && s.length() > maxLength) {
     
    11021101            if (elements.size() > maxElements) {
    11031102                final Collection<T> r = new ArrayList<>(maxElements);
    1104                 final Iterator<T> it = elements.iterator();
     1103                final var it = elements.iterator();
    11051104                while (r.size() < maxElements - 1) {
    11061105                    r.add(it.next());
     
    11271126            return url;
    11281127
    1129         String query = url.substring(url.indexOf('?') + 1);
    1130 
    1131         StringBuilder sb = new StringBuilder(url.substring(0, url.indexOf('?') + 1));
    1132 
    1133         for (int i = 0; i < query.length(); i++) {
    1134             String c = query.substring(i, i + 1);
     1128        final var query = url.substring(url.indexOf('?') + 1);
     1129
     1130        final var sb = new StringBuilder(url.substring(0, url.indexOf('?') + 1));
     1131
     1132        for (var i = 0; i < query.length(); i++) {
     1133            final var c = query.substring(i, i + 1);
    11351134            if (URL_CHARS.contains(c)) {
    11361135                sb.append(c);
     
    11531152     */
    11541153    public static String encodeUrl(String s) {
    1155         final String enc = StandardCharsets.UTF_8.name();
     1154        final var enc = StandardCharsets.UTF_8.name();
    11561155        try {
    11571156            return URLEncoder.encode(s, enc);
     
    11731172     */
    11741173    public static String decodeUrl(String s) {
    1175         final String enc = StandardCharsets.UTF_8.name();
     1174        final var enc = StandardCharsets.UTF_8.name();
    11761175        try {
    11771176            return URLDecoder.decode(s, enc);
     
    12211220            @Override
    12221221            public Thread newThread(final Runnable runnable) {
    1223                 final Thread thread = new Thread(runnable, String.format(Locale.ENGLISH, nameFormat, count.getAndIncrement()));
     1222                final var thread = new Thread(runnable, String.format(Locale.ENGLISH, nameFormat, count.getAndIncrement()));
    12241223                thread.setPriority(threadPriority);
    12251224                return thread;
     
    12991298    public static boolean isSimilar(String string1, String string2) {
    13001299        // check plain strings
    1301         int distance = getLevenshteinDistance(string1, string2);
     1300        var distance = getLevenshteinDistance(string1, string2);
    13021301
    13031302        // check if only the case differs, so we don't consider large distance as different strings
     
    13401339        }
    13411340
    1342         for (double length : values) {
     1341        for (var length : values) {
    13431342            standardDeviation += Math.pow(length - mean, 2);
    13441343        }
     
    13611360        }
    13621361        List<int[]> groups = new ArrayList<>();
    1363         int[] current = {Integer.MIN_VALUE, Integer.MIN_VALUE};
     1362        var current = new int[]{Integer.MIN_VALUE, Integer.MIN_VALUE};
    13641363        groups.add(current);
    1365         for (int row : integers) {
     1364        for (var row : integers) {
    13661365            if (current[0] == Integer.MIN_VALUE) {
    13671366                current[0] = row;
     
    13981397    @SuppressWarnings("ThreadPriorityCheck")
    13991398    public static ForkJoinPool newForkJoinPool(String pref, final String nameFormat, final int threadPriority) {
    1400         int noThreads = Config.getPref().getInt(pref, Runtime.getRuntime().availableProcessors());
     1399        final var noThreads = Config.getPref().getInt(pref, Runtime.getRuntime().availableProcessors());
    14011400        return new ForkJoinPool(noThreads, new ForkJoinPool.ForkJoinWorkerThreadFactory() {
    14021401            final AtomicLong count = new AtomicLong(0);
     
    14681467        if (value != null) {
    14691468            try {
    1470                 String old = System.setProperty(key, value);
     1469                var old = System.setProperty(key, value);
    14711470                if (Logging.isDebugEnabled() && !value.equals(old)) {
    14721471                    if (!key.toLowerCase(Locale.ENGLISH).contains("password")) {
     
    14941493     */
    14951494    public static boolean hasExtension(String filename, String... extensions) {
    1496         String name = filename.toLowerCase(Locale.ENGLISH).replace("?format=raw", "");
     1495        var name = filename.toLowerCase(Locale.ENGLISH).replace("?format=raw", "");
    14971496        return Arrays.stream(extensions)
    14981497                .anyMatch(ext -> name.endsWith('.' + ext.toLowerCase(Locale.ENGLISH)));
     
    15231522            return new byte[0];
    15241523        }
    1525         try (ByteArrayOutputStream bout = new ByteArrayOutputStream(stream.available())) {
    1526             byte[] buffer = new byte[8192];
    1527             boolean finished = false;
     1524        try (stream; var bout = new ByteArrayOutputStream(stream.available())) {
     1525            final var buffer = new byte[8192];
     1526            var finished = false;
    15281527            do {
    1529                 int read = stream.read(buffer);
     1528                var read = stream.read(buffer);
    15301529                if (read >= 0) {
    15311530                    bout.write(buffer, 0, read);
     
    15371536                return new byte[0];
    15381537            return bout.toByteArray();
    1539         } finally {
    1540             stream.close();
    15411538        }
    15421539    }
     
    16031600     */
    16041601    public static List<GlyphVector> getGlyphVectorsBidi(String string, Font font, FontRenderContext frc) {
    1605         List<GlyphVector> gvs = new ArrayList<>();
    1606         Bidi bidi = new Bidi(string, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
    1607         byte[] levels = new byte[bidi.getRunCount()];
    1608         DirectionString[] dirStrings = new DirectionString[levels.length];
    1609         for (int i = 0; i < levels.length; ++i) {
     1602        final var gvs = new ArrayList<GlyphVector>();
     1603        final var bidi = new Bidi(string, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
     1604        final var levels = new byte[bidi.getRunCount()];
     1605        final var dirStrings = new DirectionString[levels.length];
     1606        for (var i = 0; i < levels.length; ++i) {
    16101607            levels[i] = (byte) bidi.getRunLevel(i);
    1611             String substr = string.substring(bidi.getRunStart(i), bidi.getRunLimit(i));
    1612             int dir = levels[i] % 2 == 0 ? Bidi.DIRECTION_LEFT_TO_RIGHT : Bidi.DIRECTION_RIGHT_TO_LEFT;
     1608            final var substr = string.substring(bidi.getRunStart(i), bidi.getRunLimit(i));
     1609            final var dir = levels[i] % 2 == 0 ? Bidi.DIRECTION_LEFT_TO_RIGHT : Bidi.DIRECTION_RIGHT_TO_LEFT;
    16131610            dirStrings[i] = new DirectionString(dir, substr);
    16141611        }
    16151612        Bidi.reorderVisually(levels, 0, dirStrings, 0, levels.length);
    1616         for (DirectionString dirString : dirStrings) {
    1617             char[] chars = dirString.str.toCharArray();
     1613        for (var dirString : dirStrings) {
     1614            var chars = dirString.str.toCharArray();
    16181615            gvs.add(font.layoutGlyphVector(frc, chars, 0, chars.length, dirString.direction));
    16191616        }
     
    17121709    public static int getJavaVersion() {
    17131710        // Switch to Runtime.version() once we move past Java 8
    1714         String version = Objects.requireNonNull(getSystemProperty("java.version"));
     1711        var version = Objects.requireNonNull(getSystemProperty("java.version"));
    17151712        if (version.startsWith("1.")) {
    17161713            version = version.substring(2);
     
    17211718        // 9
    17221719        // 9.0.1
    1723         int dotPos = version.indexOf('.');
    1724         int dashPos = version.indexOf('-');
     1720        var dotPos = version.indexOf('.');
     1721        var dashPos = version.indexOf('-');
    17251722        return Integer.parseInt(version.substring(0,
    17261723                dotPos > -1 ? dotPos : dashPos > -1 ? dashPos : version.length()));
     
    17341731    public static int getJavaUpdate() {
    17351732        // Switch to Runtime.version() once we move past Java 8
    1736         String version = Objects.requireNonNull(getSystemProperty("java.version"));
     1733        var version = Objects.requireNonNull(getSystemProperty("java.version"));
    17371734        if (version.startsWith("1.")) {
    17381735            version = version.substring(2);
     
    17451742        // 17.0.4.1+1-LTS
    17461743        // $MAJOR.$MINOR.$SECURITY.$PATCH
    1747         int undePos = version.indexOf('_');
    1748         int dashPos = version.indexOf('-');
     1744        var undePos = version.indexOf('_');
     1745        var dashPos = version.indexOf('-');
    17491746        if (undePos > -1) {
    17501747            return Integer.parseInt(version.substring(undePos + 1,
    17511748                    dashPos > -1 ? dashPos : version.length()));
    17521749        }
    1753         int firstDotPos = version.indexOf('.');
    1754         int secondDotPos = version.indexOf('.', firstDotPos + 1);
     1750        var firstDotPos = version.indexOf('.');
     1751        var secondDotPos = version.indexOf('.', firstDotPos + 1);
    17551752        if (firstDotPos == secondDotPos) {
    17561753            return 0;
     
    17671764    public static int getJavaBuild() {
    17681765        // Switch to Runtime.version() once we move past Java 8
    1769         String version = Objects.requireNonNull(getSystemProperty("java.runtime.version"));
    1770         int bPos = version.indexOf('b');
    1771         int pPos = version.indexOf('+');
     1766        var version = Objects.requireNonNull(getSystemProperty("java.runtime.version"));
     1767        var bPos = version.indexOf('b');
     1768        var pPos = version.indexOf('+');
    17721769        try {
    17731770            return Integer.parseInt(version.substring(bPos > -1 ? bPos + 1 : pPos + 1));
     
    17861783        try {
    17871784            Object value;
    1788             Class<?> c = Class.forName("com.sun.deploy.config.BuiltInProperties");
     1785            var c = Class.forName("com.sun.deploy.config.BuiltInProperties");
    17891786            try {
    17901787                value = c.getDeclaredField("JRE_EXPIRATION_DATE").get(null);
     
    18101807    public static String getJavaLatestVersion() {
    18111808        try {
    1812             String[] versions = HttpClient.create(
     1809            var versions = HttpClient.create(
    18131810                    new URL(Config.getPref().get(
    18141811                            "java.baseline.version.url",
     
    18161813                    .connect().fetchContent().split("\n", -1);
    18171814            if (getJavaVersion() <= 11 && isRunningWebStart()) { // OpenWebStart currently only has Java 11
    1818                 for (String version : versions) {
     1815                for (var version : versions) {
    18191816                    if (version.startsWith("11")) {
    18201817                        return version;
     
    18221819                }
    18231820            } else if (getJavaVersion() <= 17) {
    1824                 for (String version : versions) {
     1821                for (var version : versions) {
    18251822                    if (version.startsWith("17")) { // Use current Java LTS
    18261823                        return version;
     
    19451942                    return url.openStream();
    19461943                } catch (FileNotFoundException | InvalidPathException e) {
    1947                     URL betterUrl = betterJarUrl(url);
     1944                    final var betterUrl = betterJarUrl(url);
    19481945                    if (betterUrl != null) {
    19491946                        try {
     
    19821979    public static URL betterJarUrl(URL jarUrl, URL defaultUrl) throws IOException {
    19831980        // Workaround to https://bugs.openjdk.java.net/browse/JDK-4523159
    1984         String urlPath = jarUrl.getPath().replace("%20", " ");
     1981        var urlPath = jarUrl.getPath().replace("%20", " ");
    19851982        if (urlPath.startsWith("file:/") && urlPath.split("!", -1).length > 2) {
    19861983            // Locate jar file
    1987             int index = urlPath.lastIndexOf("!/");
    1988             Path jarFile = Paths.get(urlPath.substring("file:/".length(), index));
    1989             Path filename = jarFile.getFileName();
    1990             FileTime jarTime = Files.readAttributes(jarFile, BasicFileAttributes.class).lastModifiedTime();
     1984            var index = urlPath.lastIndexOf("!/");
     1985            final var jarFile = Paths.get(urlPath.substring("file:/".length(), index));
     1986            var filename = jarFile.getFileName();
     1987            var jarTime = Files.readAttributes(jarFile, BasicFileAttributes.class).lastModifiedTime();
    19911988            // Copy it to temp directory (hopefully free of exclamation mark) if needed (missing or older jar)
    1992             Path jarCopy = Paths.get(getSystemProperty("java.io.tmpdir")).resolve(filename);
     1989            final var jarCopy = Paths.get(getSystemProperty("java.io.tmpdir")).resolve(filename);
    19931990            if (!jarCopy.toFile().exists() ||
    19941991                    Files.readAttributes(jarCopy, BasicFileAttributes.class).lastModifiedTime().compareTo(jarTime) < 0) {
     
    20292026            Logging.trace(e);
    20302027            try {
    2031                 URL betterUrl = betterJarUrl(cl.getResource(path));
     2028                final var betterUrl = betterJarUrl(cl.getResource(path));
    20322029                if (betterUrl != null) {
    20332030                    return betterUrl.openStream();
Note: See TracChangeset for help on using the changeset viewer.