Subject: [PATCH] josm_24635
---
Index: nodist/pom.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/nodist/pom.xml b/nodist/pom.xml
--- a/nodist/pom.xml	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/nodist/pom.xml	(date 1789325810082)
@@ -17,7 +17,7 @@
         <sonar.host.url>https://josm.openstreetmap.de/sonar/</sonar.host.url>
         <sonar.projectKey>JOSM</sonar.projectKey>
         <jmockit.version>1.49.a</jmockit.version>
-        <pmd.version>7.22.0</pmd.version>
+        <pmd.version>7.27.0</pmd.version>
         <jacoco.version>0.8.13</jacoco.version>
         <checkstyle.version>10.26.1</checkstyle.version>
         <spotbugs.version>4.9.8</spotbugs.version>
Index: src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
--- a/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(date 1789324742572)
@@ -1085,10 +1085,10 @@
                 osd.append(tr("\nDOP: {0}", entry.getExifGpsDop()));
             }
             if (entry.getExifGpsDatum() != null) {
-                osd.append(tr("\nDatum: {0}", entry.getExifGpsDatum().toString()));
+                osd.append(tr("\nDatum: {0}", entry.getExifGpsDatum()));
             }
             if (entry.getExifGpsProcMethod() != null) {
-                osd.append(tr("\nProc. method: {0}", entry.getExifGpsProcMethod().toString()));
+                osd.append(tr("\nProc. method: {0}", entry.getExifGpsProcMethod()));
             }
         }
         Optional.ofNullable(entry.getIptcCaption()).map(s -> tr("\nCaption: {0}", s)).ifPresent(osd::append);
Index: src/org/openstreetmap/josm/data/validation/tests/PowerLines.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java b/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java
--- a/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java	(date 1789324742299)
@@ -101,7 +101,7 @@
 
     @Override
     public void visit(Node n) {
-        if (!n.isConnectionNode() || n.referrers(Way.class).noneMatch(w -> isPowerLineOrCable(w)))
+        if (!n.isConnectionNode() || n.referrers(Way.class).noneMatch(PowerLines::isPowerLineOrCable))
             return;
 
         List<Way> unrelatedParents = n.referrers(Way.class).filter(w -> !isPowerLineOrCable(w) && !isRelatedToPower(w))
Index: src/org/openstreetmap/josm/data/gpx/GpxImageEntry.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/data/gpx/GpxImageEntry.java b/src/org/openstreetmap/josm/data/gpx/GpxImageEntry.java
--- a/src/org/openstreetmap/josm/data/gpx/GpxImageEntry.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/data/gpx/GpxImageEntry.java	(date 1789333203133)
@@ -9,7 +9,6 @@
 import java.net.URI;
 import java.nio.file.Files;
 import java.time.Instant;
-import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
@@ -351,12 +350,6 @@
         return null;
     }
 
-    private static Date getDefensiveDate(Instant date) {
-        if (date == null)
-            return null;
-        return Date.from(date);
-    }
-
     @Override
     public LatLon getExifCoor() {
         return exifCoor;
Index: src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java b/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
--- a/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(date 1789327685767)
@@ -286,6 +286,7 @@
      * @throws IOException if any I/O error occurs
      * @since 18365 (public, primarily for ValidatorCLI)
      */
+    @SuppressWarnings("PMD.UseTryWithResources") // zip.a is closed via Utils.close(), which swallows IOException
     public synchronized ParseResult addMapCSS(String url, Consumer<String> assertionConsumer) throws ParseException, IOException {
         CheckParameterUtil.ensureParameterNotNull(url, "url");
         ParseResult result;
Index: src/org/openstreetmap/josm/plugins/PluginClassLoader.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/plugins/PluginClassLoader.java b/src/org/openstreetmap/josm/plugins/PluginClassLoader.java
--- a/src/org/openstreetmap/josm/plugins/PluginClassLoader.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/plugins/PluginClassLoader.java	(date 1789332187475)
@@ -88,6 +88,7 @@
      * @param resolve {@code true} to resolve the class
      * @return the class, if found, otherwise {@code null}
      */
+    @SuppressWarnings("PMD.CloseResource") // dependency class loaders are shared and live for the application lifetime
     private Class<?> findClassInDependencies(String name, boolean resolve) {
         for (PluginClassLoader dep : dependencies) {
             try {
@@ -104,6 +105,7 @@
     }
 
     @Override
+    @SuppressWarnings("PMD.CloseResource") // dependency class loaders are shared and live for the application lifetime
     public URL findResource(String name) {
         URL resource = super.findResource(name);
         if (resource == null) {
Index: src/org/openstreetmap/josm/data/sources/ISourceType.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/data/sources/ISourceType.java b/src/org/openstreetmap/josm/data/sources/ISourceType.java
--- a/src/org/openstreetmap/josm/data/sources/ISourceType.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/data/sources/ISourceType.java	(date 1789324742273)
@@ -8,7 +8,6 @@
  * @param <T> The source type (e.g., Imagery or otherwise -- should be the name of the class)
  * @since 16545
  */
-@SuppressWarnings("PMD.ImplicitFunctionalInterface")
 public interface ISourceType<T extends Enum<T>> extends ICommonSource<T> {
     /**
      * Returns the unique string identifying this type.
Index: src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java
--- a/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java	(date 1789327685758)
@@ -370,6 +370,7 @@
      * @throws SAXException if any XML error occurs
      * @throws IOException if any I/O error occurs
      */
+    @SuppressWarnings("PMD.UseTryWithResources") // zip.a/zip.b are closed via Utils.close(), which swallows IOException
     static Collection<TaggingPreset> readAll(String source, boolean validate, HashSetWithLast<TaggingPreset> all)
             throws SAXException, IOException {
         Collection<TaggingPreset> tp;
Index: src/org/openstreetmap/josm/tools/date/DateUtils.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/tools/date/DateUtils.java b/src/org/openstreetmap/josm/tools/date/DateUtils.java
--- a/src/org/openstreetmap/josm/tools/date/DateUtils.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/tools/date/DateUtils.java	(date 1789334570330)
@@ -2,15 +2,16 @@
 package org.openstreetmap.josm.tools.date;
 
 import java.text.DateFormat;
-import java.text.ParsePosition;
 import java.text.SimpleDateFormat;
 import java.time.DateTimeException;
 import java.time.Instant;
+import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatterBuilder;
+import java.time.format.DateTimeParseException;
 import java.time.format.FormatStyle;
 import java.util.Date;
 import java.util.Locale;
@@ -56,6 +57,7 @@
      * @throws UncheckedParseException if the date does not match any of the supported date formats
      * @throws DateTimeException if the value of any field is out of range, or if the day-of-month is invalid for the month-year
      */
+    @SuppressWarnings("PMD.ReplaceJavaUtilDate") // public API kept as Date for existing/plugin callers
     public static Date fromString(String str) {
         return new Date(tsFromString(str));
     }
@@ -148,10 +150,14 @@
                 ).toInstant();
             } else {
                 // example date format "18-AUG-08 13:33:03"
-                SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yy HH:mm:ss");
-                Date d = f.parse(str, new ParsePosition(0));
-                if (d != null)
-                    return d.toInstant();
+                try {
+                    // Locale.ENGLISH for the month abbreviation (Locale.ROOT has no textual month names);
+                    // system default zone matches the previous SimpleDateFormat behavior
+                    return LocalDateTime.parse(str, DateTimeFormatter.ofPattern("dd-MMM-yy HH:mm:ss", Locale.ENGLISH))
+                            .atZone(ZoneId.systemDefault()).toInstant();
+                } catch (DateTimeParseException ignored) {
+                    // not this format, fall through to the slow path below
+                }
             }
 
             // slow path for fractional seconds different from millisecond precision
@@ -196,6 +202,7 @@
      * @param date The date to format
      * @return The formatted date
      */
+    @SuppressWarnings("PMD.ReplaceJavaUtilDate") // public API kept as Date for existing/plugin callers
     public static String fromDate(Date date) {
         final ZonedDateTime temporal = date.toInstant().atZone(ZoneOffset.UTC);
         return DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(temporal);
@@ -207,6 +214,7 @@
      * @return cloned date, or null
      * @since 11878
      */
+    @SuppressWarnings("PMD.ReplaceJavaUtilDate") // null-safe clone utility, inherently Date-typed
     public static Date cloneDate(Date d) {
         return d != null ? (Date) d.clone() : null;
     }
@@ -298,6 +306,7 @@
      * @return The formatted date
      * @since 7299
      */
+    @SuppressWarnings("PMD.ReplaceJavaUtilDate") // delegates to java.text.DateFormat, which requires a Date
     public static String formatDate(Date date, int dateStyle) {
         CheckParameterUtil.ensureParameterNotNull(date, "date");
         return getDateFormat(dateStyle).format(date);
@@ -337,6 +346,7 @@
      * @return The formatted time
      * @since 7299
      */
+    @SuppressWarnings("PMD.ReplaceJavaUtilDate") // delegates to java.text.DateFormat, which requires a Date
     public static String formatTime(Date time, int timeStyle) {
         CheckParameterUtil.ensureParameterNotNull(time, "time");
         return getTimeFormat(timeStyle).format(time);
@@ -390,6 +400,7 @@
      * @return The formatted date/time
      * @since 7299
      */
+    @SuppressWarnings("PMD.ReplaceJavaUtilDate") // delegates to java.text.DateFormat, which requires a Date
     public static String formatDateTime(Date datetime, int dateStyle, int timeStyle) {
         CheckParameterUtil.ensureParameterNotNull(datetime, "datetime");
         return getDateTimeFormat(dateStyle, timeStyle).format(datetime);
Index: src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java b/src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java
--- a/src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/data/validation/routines/InetAddressValidator.java	(date 1789332896907)
@@ -101,7 +101,7 @@
                 return false;
             }
 
-            int iIpSegment = 0;
+            int iIpSegment;
 
             try {
                 iIpSegment = Integer.parseInt(ipSegment);
@@ -180,7 +180,7 @@
                 if (octet.length() > IPV6_MAX_HEX_DIGITS_PER_GROUP) {
                     return false;
                 }
-                int octetInt = 0;
+                int octetInt;
                 try {
                     octetInt = Integer.parseInt(octet, BASE_16);
                 } catch (NumberFormatException e) {
Index: src/org/openstreetmap/josm/plugins/PluginHandler.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/plugins/PluginHandler.java b/src/org/openstreetmap/josm/plugins/PluginHandler.java
--- a/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/plugins/PluginHandler.java	(date 1789332189376)
@@ -830,6 +830,7 @@
      *
      * @param plugins the plugins to add
      */
+    @SuppressWarnings("PMD.CloseResource") // the joined class loader is shared and lives for the application lifetime
     private static void extendJoinedPluginResourceCL(Collection<PluginInformation> plugins) {
         // iterate all plugins and collect all libraries of all plugins:
         File pluginDir = Preferences.main().getPluginsDirectory();
@@ -935,7 +936,7 @@
      * Generate classloaders for a list of plugins
      * @param toLoad The plugins to generate the classloaders for
      */
-    @SuppressWarnings("squid:S2095") // NOSONAR the classloaders and put in a map which we want to keep.
+    @SuppressWarnings({"squid:S2095", "PMD.CloseResource"}) // NOSONAR the classloaders and put in a map which we want to keep.
     private static void generateClassloaders(List<PluginInformation> toLoad) {
         for (PluginInformation info : toLoad) {
             PluginClassLoader cl = AccessController.doPrivileged((PrivilegedAction<PluginClassLoader>)
@@ -951,7 +952,7 @@
      * Resolve dependencies for a list of plugins
      * @param toLoad The plugins to resolve dependencies for
      */
-    @SuppressWarnings("squid:S2095") // NOSONAR the classloaders are from a persistent map
+    @SuppressWarnings({"squid:S2095", "PMD.CloseResource"}) // NOSONAR the classloaders are from a persistent map
     private static void resolveDependencies(List<PluginInformation> toLoad) {
         for (PluginInformation info : toLoad) {
             PluginClassLoader cl = classLoaders.get(info.name);
Index: src/org/openstreetmap/josm/data/validation/routines/UrlValidator.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/data/validation/routines/UrlValidator.java b/src/org/openstreetmap/josm/data/validation/routines/UrlValidator.java
--- a/src/org/openstreetmap/josm/data/validation/routines/UrlValidator.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/data/validation/routines/UrlValidator.java	(date 1789326600894)
@@ -424,7 +424,7 @@
             }
         }
 
-        return Optional.ofNullable(authorityMatcher.group(PARSE_AUTHORITY_EXTRA)).orElse("").trim().isEmpty();
+        return Optional.ofNullable(authorityMatcher.group(PARSE_AUTHORITY_EXTRA)).orElse("").isBlank();
     }
 
     /**
Index: tools/pmd/josm-ruleset.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/tools/pmd/josm-ruleset.xml b/tools/pmd/josm-ruleset.xml
--- a/tools/pmd/josm-ruleset.xml	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/tools/pmd/josm-ruleset.xml	(date 1789333857199)
@@ -16,17 +16,13 @@
     <exclude name="AvoidStringBufferField"/>
     <exclude name="ConstantsInInterface"/>
     <exclude name="GuardLogStatement"/>
-    <exclude name="JUnit4TestShouldUseTestAnnotation" reason="False positive in src/org/openstreetmap/josm/data/validation/Test.java"/>
     <exclude name="LiteralsFirstInComparisons" reason="Introduced in 6.24, some positives in source code at this time. Replaces PositionLiteralsFirstInComparisons."/>
     <exclude name="LooseCoupling"/>
     <exclude name="MethodReturnsInternalArray"/>
     <exclude name="OneDeclarationPerLine"/>
     <exclude name="ReplaceHashtableWithMap"/>
-    <exclude name="SwitchStmtsShouldHaveDefault"/>
     <exclude name="SystemPrintln"/>
     <exclude name="UnusedAssignment" reason="Introduced in 6.26, some number of positives in source code at this time"/>
-    <exclude name="UnusedPrivateMethod" reason="Broken since PMD 6.33, see https://github.com/pmd/pmd/issues/3468"/>
-    <exclude name="UnusedPrivateField" reason="Broken in 7.2.x"/>
     <exclude name="UseVarargs"/>
   </rule>
   <rule ref="category/java/bestpractices.xml/ForLoopCanBeForeach">
@@ -136,7 +132,6 @@
     <exclude name="TooManyMethods"/>
     <exclude name="UseObjectForClearerAPI"/>
     <exclude name="UselessOverridingMethod"/>
-    <exclude name="UseUtilityClass"/>
   </rule>
   <rule ref="category/java/design.xml/SignatureDeclareThrowsException">
     <properties>
@@ -181,11 +176,7 @@
   <rule ref="category/java/performance.xml">
     <exclude name="AvoidInstantiatingObjectsInLoops"/>
     <exclude name="ConsecutiveLiteralAppends"/>
-    <exclude name="InefficientEmptyStringCheck"/>
     <exclude name="InsufficientStringBufferDeclaration" reason="PMD 6.40 has a bug where it doesn't properly count appended strings in if statements."/>
-    <exclude name="TooFewBranchesForASwitchStatement"/>
-    <exclude name="UseArrayListInsteadOfVector"/>
-    <exclude name="UselessStringValueOf"/>
     <exclude name="UseStringBufferForStringAppends"/>
   </rule>
 
Index: src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheTableCellRenderer.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheTableCellRenderer.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheTableCellRenderer.java
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheTableCellRenderer.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheTableCellRenderer.java	(date 1789326600866)
@@ -19,7 +19,7 @@
 
     protected void renderUploadComment(Changeset cs) {
         String comment = cs.getComment();
-        if (comment.trim().isEmpty()) {
+        if (comment.isBlank()) {
             setText(trc("changeset.upload-comment", "empty"));
             setFont(UIManager.getFont("Table.font").deriveFont(Font.ITALIC));
         } else {
Index: src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java b/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java
--- a/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java	(date 1789324742411)
@@ -17,7 +17,6 @@
 import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
 import java.util.EnumMap;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -164,8 +163,8 @@
             Map<OsmPrimitiveType, Integer> targetStatistics) {
         mode = Mode.RESOLVING_ONE_TAGCOLLECTION_ONLY;
         tagsForAllPrimitives = tagsForAllPrimitives == null ? new TagCollection() : tagsForAllPrimitives;
-        sourceStatistics = sourceStatistics == null ? new HashMap<>() : sourceStatistics;
-        targetStatistics = targetStatistics == null ? new HashMap<>() : targetStatistics;
+        sourceStatistics = sourceStatistics == null ? new EnumMap<>(OsmPrimitiveType.class) : sourceStatistics;
+        targetStatistics = targetStatistics == null ? new EnumMap<>(OsmPrimitiveType.class) : targetStatistics;
 
         // init the resolver
         //
Index: src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java b/src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java
--- a/src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/tools/template_engine/TemplateParser.java	(date 1789326600892)
@@ -80,7 +80,7 @@
 
     private void skipWhitespace() throws ParseError {
         Token token = tokenizer.lookAhead();
-        if (token.getType() == TokenType.TEXT && token.getText().trim().isEmpty()) {
+        if (token.getType() == TokenType.TEXT && token.getText().isBlank()) {
             tokenizer.nextToken();
         }
     }
Index: src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java
--- a/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java	(date 1789326600875)
@@ -190,9 +190,9 @@
     public Command buildTagApplyCommands(Collection<? extends OsmPrimitive> primitives) {
         if (!cbTagRelations.isSelected())
             return null;
-        if (tfKey.getText().trim().isEmpty())
+        if (tfKey.getText().isBlank())
             return null;
-        if (tfValue.getText().trim().isEmpty())
+        if (tfValue.getText().isBlank())
             return null;
         if (Utils.isEmpty(primitives))
             return null;
Index: src/org/openstreetmap/josm/gui/autofilter/AutoFilterManager.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/autofilter/AutoFilterManager.java b/src/org/openstreetmap/josm/gui/autofilter/AutoFilterManager.java
--- a/src/org/openstreetmap/josm/gui/autofilter/AutoFilterManager.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/autofilter/AutoFilterManager.java	(date 1789324742342)
@@ -144,7 +144,7 @@
             // Retrieve the values from current rule visible on screen
             NavigableSet<Integer> values = getNumericValues();
             // Make sure current auto filter buttons remain visible even if no data is found, to allow user to disable them
-            for (var currentAutoFilter : currentAutoFilters) {
+            for (AutoFilter currentAutoFilter : currentAutoFilters) {
                 if (currentAutoFilter.getFilter().value != null) {
                     values.add(currentAutoFilter.getFilter().value);
                 }
@@ -288,7 +288,7 @@
         int maxWidth = 16;
         final AutoFilterButton keyButton = AutoFilterButton.forOsmKey(enabledRule.getKey());
         addButton(keyButton, Integer.MIN_VALUE, i++);
-        var valueList = new ArrayList<>(values.descendingSet());
+        ArrayList<Integer> valueList = new ArrayList<>(values.descendingSet());
         if (enabledRule.getNoValueFilter()) {
             valueList.add(null);
         }
@@ -330,7 +330,7 @@
         }
         BBox bbox = MainApplication.getMap().mapView.getState().getViewArea().getLatLonBoundsBox().toBBox();
         NavigableSet<Integer> values = new TreeSet<>();
-        for (var primitiveList : List.of(ds.searchNodes(bbox), ds.searchWays(bbox), ds.searchRelations(bbox))) {
+        for (List<? extends OsmPrimitive> primitiveList : List.of(ds.searchNodes(bbox), ds.searchWays(bbox), ds.searchRelations(bbox))) {
             // add all values that are directly mentioned
             primitiveList.forEach(o -> enabledRule.getTagValuesForPrimitive(o, true).forEach(values::add));
             // only add integer values from value ranges, not fractional values
Index: src/org/openstreetmap/josm/gui/autofilter/AutoFilterRule.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/autofilter/AutoFilterRule.java b/src/org/openstreetmap/josm/gui/autofilter/AutoFilterRule.java
--- a/src/org/openstreetmap/josm/gui/autofilter/AutoFilterRule.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/autofilter/AutoFilterRule.java	(date 1789325543698)
@@ -48,7 +48,7 @@
 
     private IntFunction<String> valueFormatter = Integer::toString;
 
-    private boolean noValueFilter = false;
+    private boolean noValueFilter;
 
     /** The union of {@link #key} and the keys provided by {@link #setExtraKeys(List)}. */
     private List<String> allKeys;
Index: test/unit/org/openstreetmap/josm/gui/help/HelpContentReaderTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/test/unit/org/openstreetmap/josm/gui/help/HelpContentReaderTest.java b/test/unit/org/openstreetmap/josm/gui/help/HelpContentReaderTest.java
--- a/test/unit/org/openstreetmap/josm/gui/help/HelpContentReaderTest.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/test/unit/org/openstreetmap/josm/gui/help/HelpContentReaderTest.java	(date 1789326600872)
@@ -27,6 +27,6 @@
     @Test
     void testFetchHelpTopicContentNominal() throws HelpContentReaderException {
         String res = new HelpContentReader(HelpUtil.getWikiBaseUrl()).fetchHelpTopicContent(HelpBrowserTest.URL_1, false);
-        assertFalse(res.trim().isEmpty());
+        assertFalse(res.isBlank());
     }
 }
Index: src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java b/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
--- a/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(date 1789326600864)
@@ -1418,7 +1418,7 @@
                 ExtendedSourceEntry last = null;
 
                 while ((line = reader.readLine()) != null && !canceled) {
-                    if (line.trim().isEmpty()) {
+                    if (line.isBlank()) {
                         continue; // skip empty lines
                     }
                     if (line.startsWith("\t")) {
Index: src/org/openstreetmap/josm/gui/download/PlaceSelection.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/download/PlaceSelection.java b/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
--- a/src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(date 1789326600880)
@@ -192,7 +192,7 @@
         @Override
         public void actionPerformed(ActionEvent e) {
             String searchExpression = cbSearchExpression.getText();
-            if (!isEnabled() || searchExpression.trim().isEmpty() || serverComboBox.getSelectedItem() == null)
+            if (!isEnabled() || searchExpression.isBlank() || serverComboBox.getSelectedItem() == null)
                 return;
             cbSearchExpression.addCurrentItemToHistory();
             cbSearchExpression.getModel().prefs().save(HISTORY_KEY);
@@ -214,7 +214,7 @@
 
         protected final void updateState() {
             String searchExpression = cbSearchExpression.getText();
-            setEnabled(!searchExpression.trim().isEmpty());
+            setEnabled(!searchExpression.isBlank());
             isSearchMore = Objects.equals(lastSearchExpression, searchExpression) && !model.getData().isEmpty();
             if (isSearchMore) {
                 putValue(NAME, tr("Search more..."));
Index: src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java b/src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java
--- a/src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/preferences/SubPreferenceSetting.java	(date 1789324742745)
@@ -7,7 +7,6 @@
  * This preference setting's addGui method is called after the user clicked the parent tab
  * (returned by getTabPreferenceSetting).
  */
-@SuppressWarnings("PMD.ImplicitFunctionalInterface")
 public interface SubPreferenceSetting extends PreferenceSetting {
 
     /**
Index: src/org/openstreetmap/josm/gui/io/CredentialDialog.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/io/CredentialDialog.java b/src/org/openstreetmap/josm/gui/io/CredentialDialog.java
--- a/src/org/openstreetmap/josm/gui/io/CredentialDialog.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/io/CredentialDialog.java	(date 1789326600887)
@@ -399,9 +399,9 @@
         @Override
         public void keyPressed(KeyEvent e) {
             if (e.getKeyChar() == KeyEvent.VK_ENTER) {
-                if (currentTF.getText().trim().isEmpty()) {
+                if (currentTF.getText().isBlank()) {
                     currentTF.selectAll();
-                } else if (nextTF.getText().trim().isEmpty()) {
+                } else if (nextTF.getText().isBlank()) {
                     nextTF.requestFocusInWindow();
                     nextTF.selectAll();
                 } else {
Index: src/org/openstreetmap/josm/io/session/GeoImageSessionExporter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/io/session/GeoImageSessionExporter.java b/src/org/openstreetmap/josm/io/session/GeoImageSessionExporter.java
--- a/src/org/openstreetmap/josm/io/session/GeoImageSessionExporter.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/io/session/GeoImageSessionExporter.java	(date 1789324742795)
@@ -122,10 +122,10 @@
                 addAttr("exif-gps-dop", entry.getExifGpsDop().toString(), imgElem, support);
             }
             if (entry.getExifGpsDatum() != null) {
-                addAttr("exif-gps-datum", entry.getExifGpsDatum().toString(), imgElem, support);
+                addAttr("exif-gps-datum", entry.getExifGpsDatum(), imgElem, support);
             }
             if (entry.getExifGpsProcMethod() != null) {
-                addAttr("exif-gps-procmethod", entry.getExifGpsProcMethod().toString(), imgElem, support);
+                addAttr("exif-gps-procmethod", entry.getExifGpsProcMethod(), imgElem, support);
             }
             if (entry.hasNewGpsData()) {
                 addAttr("is-new-gps-data", Boolean.toString(entry.hasNewGpsData()), imgElem, support);
Index: src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java b/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java
--- a/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java	(date 1789324742859)
@@ -38,7 +38,7 @@
      *            {@link org.apache.commons.io.output.CloseShieldOutputStream} when calling this method to
      *            avoid potential future issues)
      */
-    @SuppressWarnings("squid:S2095") // All the closeables in this method will close the input OutputStream.
+    @SuppressWarnings({"squid:S2095", "PMD.CloseResource"}) // All the closeables in this method will close the input OutputStream.
     public static void exportData(DataSet data, OutputStream out) {
         // This writer will close out when it is closed
         Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
Index: src/org/openstreetmap/josm/gui/dialogs/changeset/query/TimeValidator.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/TimeValidator.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/TimeValidator.java
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/TimeValidator.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/TimeValidator.java	(date 1789326600884)
@@ -43,7 +43,7 @@
 
     @Override
     public boolean isValid() {
-        if (getComponent().getText().trim().isEmpty())
+        if (getComponent().getText().isBlank())
             return true;
         return getTime() != null;
     }
@@ -91,7 +91,7 @@
      * @return the time
      */
     public LocalTime getTime() {
-        if (getComponent().getText().trim().isEmpty())
+        if (getComponent().getText().isBlank())
             return LocalTime.MIDNIGHT;
 
         for (final FormatStyle format: FormatStyle.values()) {
Index: src/org/openstreetmap/josm/gui/dialogs/changeset/query/UrlBasedQueryPanel.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UrlBasedQueryPanel.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UrlBasedQueryPanel.java
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UrlBasedQueryPanel.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/query/UrlBasedQueryPanel.java	(date 1789326600878)
@@ -203,7 +203,7 @@
 
         protected void validate() {
             String value = tfUrl.getText();
-            if (value.trim().isEmpty()) {
+            if (value.isBlank()) {
                 feedbackNone();
                 return;
             }
Index: src/org/openstreetmap/josm/data/projection/proj/ClassProjFactory.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/data/projection/proj/ClassProjFactory.java b/src/org/openstreetmap/josm/data/projection/proj/ClassProjFactory.java
--- a/src/org/openstreetmap/josm/data/projection/proj/ClassProjFactory.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/data/projection/proj/ClassProjFactory.java	(date 1789332792352)
@@ -20,7 +20,7 @@
 
     @Override
     public Proj createInstance() {
-        Proj proj = null;
+        Proj proj;
         try {
             proj = projClass.getConstructor().newInstance();
         } catch (ReflectiveOperationException e) {
Index: src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(date 1789324742476)
@@ -338,7 +338,6 @@
     /**
      * Extracted interface of {@link EditTagDialog}.
      */
-    @SuppressWarnings("PMD.ImplicitFunctionalInterface")
     protected interface IEditTagDialog extends IExtendedDialog {
         /**
          * Edit tags of multiple selected objects according to selected ComboBox values
Index: test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java b/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java
--- a/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java	(date 1789326600850)
@@ -122,7 +122,7 @@
             Pattern projPattern = Pattern.compile("<(.+?)>(.*)<>");
             RefEntry curEntry = null;
             while ((line = in.readLine()) != null) {
-                if (line.startsWith("#") || line.trim().isEmpty()) {
+                if (line.startsWith("#") || line.isBlank()) {
                     continue;
                 }
                 if (line.startsWith("<")) {
Index: src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java b/src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java
--- a/src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java	(date 1789324742813)
@@ -79,7 +79,7 @@
 
     @Override
     // The new closable resources in this method will close the input OutputStream
-    @SuppressWarnings("squid:S2095")
+    @SuppressWarnings({"squid:S2095", "PMD.CloseResource"})
     protected void addDataFile(OutputStream out) {
         Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
         GpxWriter w = new GpxWriter(new PrintWriter(writer));
Index: src/org/openstreetmap/josm/gui/widgets/DefaultTextComponentValidator.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/widgets/DefaultTextComponentValidator.java b/src/org/openstreetmap/josm/gui/widgets/DefaultTextComponentValidator.java
--- a/src/org/openstreetmap/josm/gui/widgets/DefaultTextComponentValidator.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/widgets/DefaultTextComponentValidator.java	(date 1789326600860)
@@ -26,7 +26,7 @@
 
     @Override
     public boolean isValid() {
-        return !getComponent().getText().trim().isEmpty();
+        return !getComponent().getText().isBlank();
     }
 
     @Override
Index: src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
--- a/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java	(date 1789332534970)
@@ -202,7 +202,7 @@
 
         // remember update interval
         //
-        int days = 0;
+        int days;
         try {
             days = Integer.parseInt(tfUpdateInterval.getText().trim());
             if (days <= 0) {
Index: src/org/openstreetmap/josm/actions/DownloadReferrersAction.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java b/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java
--- a/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java	(date 1789324742213)
@@ -69,7 +69,7 @@
     protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
         updateEnabledStateOnModifiableSelection(selection);
         if (isEnabled() && !Utils.isEmpty(selection)
-                && DownloadPolicy.BLOCKED.equals(selection.iterator().next().getDataSet().getDownloadPolicy())) {
+                && selection.iterator().next().getDataSet().getDownloadPolicy() == DownloadPolicy.BLOCKED) {
             setEnabled(false);
         }
     }
Index: src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java b/src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java
--- a/src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java	(date 1789324742837)
@@ -95,7 +95,7 @@
     }
 
     // The new closable resources in this method will close the input OutputStream
-    @SuppressWarnings("squid:S2095")
+    @SuppressWarnings({"squid:S2095", "PMD.CloseResource"})
     protected void addDataFile(OutputStream out) {
         Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
         MarkerWriter w = new MarkerWriter(new PrintWriter(writer));
Index: src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java b/src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java
--- a/src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/widgets/BoundingBoxSelectionPanel.java	(date 1789333070871)
@@ -145,7 +145,7 @@
 
         @Override
         public void validate() {
-            double value = 0;
+            double value;
             try {
                 value = JosmDecimalFormatSymbolsProvider.parseDouble(getComponent().getText());
             } catch (NumberFormatException ex) {
@@ -183,7 +183,7 @@
 
         @Override
         public void validate() {
-            double value = 0;
+            double value;
             try {
                 value = JosmDecimalFormatSymbolsProvider.parseDouble(getComponent().getText());
             } catch (NumberFormatException ex) {
Index: src/org/openstreetmap/josm/data/vector/VectorPrimitive.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/data/vector/VectorPrimitive.java b/src/org/openstreetmap/josm/data/vector/VectorPrimitive.java
--- a/src/org/openstreetmap/josm/data/vector/VectorPrimitive.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/data/vector/VectorPrimitive.java	(date 1789324742327)
@@ -98,6 +98,7 @@
         this.mappaintCacheIdx = dataSet.getMappaintCacheIndex();
     }
 
+    @Override
     public void clearCachedStyle() {
         this.mappaintStyle.clear();
     }
Index: src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java b/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
--- a/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java	(date 1789324742778)
@@ -336,7 +336,7 @@
                 handler.setSender(sender);
                 handler.handle();
                 sendHeader(out, "200 OK", handler.getContentType(), false);
-                out.write("Content-length: " + handler.getContent().getBytes().length
+                out.write("Content-length: " + handler.getContent().getBytes(RESPONSE_CHARSET).length
                         + "\r\n");
                 out.write("\r\n");
                 out.write(handler.getContent());
Index: src/org/openstreetmap/josm/tools/TextAnalyzer.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/tools/TextAnalyzer.java b/src/org/openstreetmap/josm/tools/TextAnalyzer.java
--- a/src/org/openstreetmap/josm/tools/TextAnalyzer.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/tools/TextAnalyzer.java	(date 1789326600858)
@@ -78,7 +78,7 @@
             } else if (c == '\\') {
                 esc = true;
             } else if (c == '\"' && !quotesStarted) { // opening "
-                if (!s.toString().trim().isEmpty()) { // we had   ||some text"||
+                if (!s.toString().isBlank()) { // we had   ||some text"||
                     s.append(c); // just add ", not open
                 } else {
                     s.delete(0, s.length()); // forget that empty characters and start reading "....
Index: src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
--- a/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java	(date 1789326600889)
@@ -232,14 +232,14 @@
 
         @Override
         public boolean isValid() {
-            if (getComponent().getText().trim().isEmpty())
+            if (getComponent().getText().isBlank())
                 return false;
             return Utils.isValidUrl(getComponent().getText().trim());
         }
 
         @Override
         public void validate() {
-            if (getComponent().getText().trim().isEmpty()) {
+            if (getComponent().getText().isBlank()) {
                 feedbackInvalid(tr("OSM API URL must not be empty. Please enter the OSM API URL."));
                 return;
             }
Index: src/org/openstreetmap/josm/io/OsmApi.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/io/OsmApi.java b/src/org/openstreetmap/josm/io/OsmApi.java
--- a/src/org/openstreetmap/josm/io/OsmApi.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/io/OsmApi.java	(date 1789326600897)
@@ -958,7 +958,7 @@
         String encodedMessage = Utils.encodeUrl(closeMessage);
         StringBuilder urlBuilder = noteStringBuilder(note)
             .append("/close");
-        if (!encodedMessage.trim().isEmpty()) {
+        if (!encodedMessage.isBlank()) {
             urlBuilder.append("?text=")
                     .append(encodedMessage);
         }
@@ -979,7 +979,7 @@
         String encodedMessage = Utils.encodeUrl(reactivateMessage);
         StringBuilder urlBuilder = noteStringBuilder(note)
             .append("/reopen");
-        if (!encodedMessage.trim().isEmpty()) {
+        if (!encodedMessage.isBlank()) {
             urlBuilder.append("?text=")
                     .append(encodedMessage);
         }
Index: src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java b/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
--- a/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(date 1789325079165)
@@ -111,7 +111,7 @@
          */
         public String getDisplay() {
             if (info.getSource() != null) {
-                if (info.getCategory() == NamedColorProperty.COLOR_CATEGORY_MAPPAINT)
+                if (info.getCategory().equals(NamedColorProperty.COLOR_CATEGORY_MAPPAINT))
                     return tr("Paint style {0}: {1}", tr(I18n.escape(info.getSource())), tr(info.getName()));
                 else
                     return tr(I18n.escape(info.getSource())) + " - " + tr(I18n.escape(info.getName()));
Index: src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java b/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java
--- a/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java	(date 1789326006020)
@@ -80,7 +80,6 @@
     /**
      * Create a new {@link TileSourceDisplaySettings}
      */
-    @SuppressWarnings("PMD.UnnecessaryVarargsArrayCreation") // See https://github.com/pmd/pmd/issues/5069
     public TileSourceDisplaySettings() {
         this(new String[] {PREFERENCE_PREFIX});
     }
Index: src/org/openstreetmap/josm/io/DefaultProxySelector.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/io/DefaultProxySelector.java b/src/org/openstreetmap/josm/io/DefaultProxySelector.java
--- a/src/org/openstreetmap/josm/io/DefaultProxySelector.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/io/DefaultProxySelector.java	(date 1789332459532)
@@ -111,7 +111,7 @@
 
     protected int parseProxyPortValue(String property, String value) {
         if (value == null) return 0;
-        int port = 0;
+        int port;
         try {
             port = Integer.parseInt(value);
         } catch (NumberFormatException e) {
Index: src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java b/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
--- a/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(date 1789324742883)
@@ -16,6 +16,7 @@
 import org.openstreetmap.josm.data.gpx.IGpxTrack;
 import org.openstreetmap.josm.data.notes.Note;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -233,7 +234,7 @@
                 ds.getNodes().stream().filter(n -> bounds.stream().anyMatch(b -> b.contains(n)))
                         .forEach(i -> i.setReferrersDownloaded(true));
                 ds.getWays().forEach(i -> i.setReferrersDownloaded(true));
-                ds.getRelations().stream().filter(r -> r.getMembers().stream().noneMatch(rm -> rm.isRelation()))
+                ds.getRelations().stream().filter(r -> r.getMembers().stream().noneMatch(RelationMember::isRelation))
                         .forEach(i -> i.setReferrersDownloaded(true));
             }
             return ds;
Index: src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java b/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
--- a/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(date 1789326600855)
@@ -1023,7 +1023,7 @@
                     .build());
             withErrors.put(p, "LV");
         }
-        if (value.trim().isEmpty() && !withErrors.contains(p, "EV")) {
+        if (value.isBlank() && !withErrors.contains(p, "EV")) {
             errors.add(TestError.builder(this, Severity.WARNING, EMPTY_VALUES)
                     .message(tr("Tags with empty values"), s, key)
                     .primitives(p)
Index: src/org/openstreetmap/josm/actions/JumpToAction.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/actions/JumpToAction.java b/src/org/openstreetmap/josm/actions/JumpToAction.java
--- a/src/org/openstreetmap/josm/actions/JumpToAction.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/actions/JumpToAction.java	(date 1789326600842)
@@ -173,7 +173,7 @@
             final int option = new JumpToPositionDialog(buttons, panel).showDialog().getValue();
 
             if (option != 1) return;
-            if (place.hasFocus() && !place.getText().trim().isEmpty()) {
+            if (place.hasFocus() && !place.getText().isBlank()) {
                 try {
                     List<NameFinder.SearchResult> searchResults = NameFinder.queryNominatim(place.getText());
                     if (!searchResults.isEmpty()) {
Index: src/org/openstreetmap/josm/tools/TextTagParser.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/tools/TextTagParser.java b/src/org/openstreetmap/josm/tools/TextTagParser.java
--- a/src/org/openstreetmap/josm/tools/TextTagParser.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/tools/TextTagParser.java	(date 1789326600869)
@@ -58,7 +58,7 @@
         String k;
         String v;
         for (String line: lines) {
-            if (line.trim().isEmpty()) continue; // skip empty lines
+            if (line.isBlank()) continue; // skip empty lines
             Matcher m = p.matcher(line);
             if (m.matches()) {
                  k = Utils.removeWhiteSpaces(m.group(1));
Index: src/org/openstreetmap/josm/data/imagery/vectortile/mapbox/Layer.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/data/imagery/vectortile/mapbox/Layer.java b/src/org/openstreetmap/josm/data/imagery/vectortile/mapbox/Layer.java
--- a/src/org/openstreetmap/josm/data/imagery/vectortile/mapbox/Layer.java	(revision 0dcb67f0fa4ea1eb7c86bf2f013bbed72789e246)
+++ b/src/org/openstreetmap/josm/data/imagery/vectortile/mapbox/Layer.java	(date 1789332191317)
@@ -98,6 +98,7 @@
      * @param records The records to convert to a layer
      * @throws IOException - if an IO error occurs
      */
+    @SuppressWarnings("PMD.CloseResource") // records are closed in the cleanup loop below; close() only releases the byte array
     public Layer(Collection<ProtobufRecord> records) throws IOException {
         // Do the unique required fields first
         Map<Integer, List<ProtobufRecord>> sorted = new HashMap<>(records.size());
