diff --git a/ivy.xml b/ivy.xml
index d6fa0b3232..69388fcfc5 100644
--- a/ivy.xml
+++ b/ivy.xml
@@ -24,13 +24,13 @@
         <dependency conf="api->default" org="javax.json" name="javax.json-api" rev="1.1.4"/>
         <dependency conf="api->default" org="org.glassfish" name="javax.json" rev="1.1.4"/>
         <dependency conf="api->default" org="org.apache.commons" name="commons-jcs3-core" rev="3.0"/>
-        <dependency conf="api->default" org="org.apache.commons" name="commons-compress" rev="1.20"/>
+        <dependency conf="api->default" org="org.apache.commons" name="commons-compress" rev="1.21"/>
         <dependency conf="api->default" org="com.google.code.findbugs" name="jsr305" rev="3.0.2"/>
         <dependency conf="api->default" org="org.tukaani" name="xz" rev="1.9"/>
         <dependency conf="api->default" org="com.adobe.xmp" name="xmpcore" rev="6.1.11"/>
         <dependency conf="api->default" org="com.drewnoakes" name="metadata-extractor" rev="2.16.0" transitive="false"/>
         <dependency conf="api->default" org="com.formdev" name="svgSalamander" rev="1.1.2.4"/>
-        <dependency conf="api->default" org="ch.poole" name="OpeningHoursParser" rev="0.24.0"/>
+        <dependency conf="api->default" org="ch.poole" name="OpeningHoursParser" rev="0.26.0"/>
         <dependency conf="api->default" org="oauth.signpost" name="signpost-core" rev="2.1.1"/>
         <dependency conf="api->default" org="org.webjars.npm" name="tag2link" rev="2021.3.21"/>
         <!-- sources->sources -->
@@ -38,13 +38,13 @@
         <dependency conf="sources->sources" org="javax.json" name="javax.json-api" rev="1.1.4"/>
         <dependency conf="sources->sources" org="org.glassfish" name="javax.json" rev="1.1.4"/>
         <dependency conf="sources->sources" org="org.apache.commons" name="commons-jcs3-core" rev="3.0"/>
-        <dependency conf="sources->sources" org="org.apache.commons" name="commons-compress" rev="1.20"/>
+        <dependency conf="sources->sources" org="org.apache.commons" name="commons-compress" rev="1.21"/>
         <dependency conf="sources->sources" org="com.google.code.findbugs" name="jsr305" rev="3.0.2"/>
         <dependency conf="sources->sources" org="org.tukaani" name="xz" rev="1.9"/>
         <dependency conf="sources->sources" org="com.adobe.xmp" name="xmpcore" rev="6.1.11"/>
         <dependency conf="sources->sources" org="com.drewnoakes" name="metadata-extractor" rev="2.16.0" transitive="false"/>
         <dependency conf="sources->sources" org="com.formdev" name="svgSalamander" rev="1.1.2.4"/>
-        <dependency conf="sources->sources" org="ch.poole" name="OpeningHoursParser" rev="0.24.0"/>
+        <dependency conf="sources->sources" org="ch.poole" name="OpeningHoursParser" rev="0.26.0"/>
         <dependency conf="sources->sources" org="oauth.signpost" name="signpost-core" rev="2.1.1"/>
         <dependency conf="sources->default" org="org.webjars.npm" name="tag2link" rev="2021.3.21"/><!-- sources->default sic! (tag2link-sources.jar is empty, see #19335) -->
         <!-- commonslang->default -->
@@ -55,19 +55,19 @@
         </dependency>
         <dependency conf="jmockit->default" org="org.jmockit" name="jmockit" rev="1.49.a"/>
         <!-- test->default -->
-        <dependency conf="test->default" org="com.github.spotbugs" name="spotbugs-annotations" rev="4.3.0"/>
+        <dependency conf="test->default" org="com.github.spotbugs" name="spotbugs-annotations" rev="4.5.0"/>
         <dependency conf="test->default" org="com.ginsberg" name="junit5-system-exit" rev="1.1.1"/>
-        <dependency conf="test->default" org="com.github.tomakehurst" name="wiremock" rev="2.27.2"/>
-        <dependency conf="test->default" org="io.github.classgraph" name="classgraph" rev="4.8.110"/>
-        <dependency conf="test->default" org="org.junit.platform" name="junit-platform-launcher" rev="1.7.2"/>
-        <dependency conf="test->default" org="org.junit.vintage" name="junit-vintage-engine" rev="5.7.2"/>
-        <dependency conf="test->default" org="org.junit.jupiter" name="junit-jupiter-params" rev="5.7.2"/>
-        <dependency conf="test->default" org="org.junit.jupiter" name="junit-jupiter-api" rev="5.7.2"/>
-        <dependency conf="test->default" org="org.junit.jupiter" name="junit-jupiter-engine" rev="5.7.2"/>
-        <dependency conf="test->default" org="org.junit.jupiter" name="junit-jupiter-migrationsupport" rev="5.7.2"/>
+        <dependency conf="test->default" org="com.github.tomakehurst" name="wiremock-jre8" rev="2.31.0"/>
+        <dependency conf="test->default" org="io.github.classgraph" name="classgraph" rev="4.8.135"/>
+        <dependency conf="test->default" org="org.junit.platform" name="junit-platform-launcher" rev="1.8.1"/>
+        <dependency conf="test->default" org="org.junit.vintage" name="junit-vintage-engine" rev="5.8.1"/>
+        <dependency conf="test->default" org="org.junit.jupiter" name="junit-jupiter-params" rev="5.8.1"/>
+        <dependency conf="test->default" org="org.junit.jupiter" name="junit-jupiter-api" rev="5.8.1"/>
+        <dependency conf="test->default" org="org.junit.jupiter" name="junit-jupiter-engine" rev="5.8.1"/>
+        <dependency conf="test->default" org="org.junit.jupiter" name="junit-jupiter-migrationsupport" rev="5.8.1"/>
         <dependency conf="test->default" org="net.trajano.commons" name="commons-testing" rev="2.1.0"/>
-        <dependency conf="test->default" org="nl.jqno.equalsverifier" name="equalsverifier" rev="3.6.1"/>
+        <dependency conf="test->default" org="nl.jqno.equalsverifier" name="equalsverifier" rev="3.7.2"/>
         <dependency conf="test->default" org="org.apache.commons" name="commons-lang3" rev="3.12.0"/>
-        <dependency conf="test->default" org="org.awaitility" name="awaitility" rev="4.1.0"/>
+        <dependency conf="test->default" org="org.awaitility" name="awaitility" rev="4.1.1"/>
     </dependencies>
 </ivy-module>
diff --git a/src/org/openstreetmap/josm/actions/OpenFileAction.java b/src/org/openstreetmap/josm/actions/OpenFileAction.java
index 70a2936342..b288284581 100644
--- a/src/org/openstreetmap/josm/actions/OpenFileAction.java
+++ b/src/org/openstreetmap/josm/actions/OpenFileAction.java
@@ -247,7 +247,7 @@ public class OpenFileAction extends DiskAccessAction {
         }
 
         protected void alertFilesWithUnknownImporter(Collection<File> files) {
-            final StringBuilder msg = new StringBuilder(128).append("<html>").append(
+            final StringBuilder msg = new StringBuilder(115 + 30 * files.size()).append("<html>").append(
                     trn("Cannot open {0} file because file does not exist or no suitable file importer is available.",
                         "Cannot open {0} files because files do not exist or no suitable file importer is available.",
                         files.size(),
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
index cd6419d304..3339dd2805 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
@@ -263,13 +263,13 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
                     rv.append(' ').append(tr("Segment collapsed due to its direction reversing."));
             }
         } else {
-            if (mode == Mode.translate)
+            if (mode == Mode.translate) {
                 rv = new StringBuilder(tr("Move a segment along its normal, then release the mouse button."));
-            else if (mode == Mode.translate_node)
+            } else if (mode == Mode.translate_node) {
                 rv = new StringBuilder(tr("Move the node along one of the segments, then release the mouse button."));
-            else if (mode == Mode.extrude || mode == Mode.create_new)
+            } else if (mode == Mode.extrude || mode == Mode.create_new) {
                 rv = new StringBuilder(tr("Draw a rectangle of the desired size, then release the mouse button."));
-            else {
+            } else {
                 Logging.warn("Extrude: unknown mode " + mode);
                 rv = new StringBuilder();
             }
diff --git a/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java b/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
index b81786b62f..300b63c5a9 100644
--- a/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
+++ b/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
@@ -565,12 +565,15 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
             sb.append(way.get("ref"));
         }
         if (sb.length() == 0) {
-            sb.append(
-                    way.hasKey("highway") ? tr("highway") :
-                    way.hasKey("railway") ? tr("railway") :
-                    way.hasKey("waterway") ? tr("waterway") :
-                    way.hasKey("landuse") ? tr("landuse") : ""
-                    );
+            if (way.hasKey("highway")) {
+                sb.append(tr("highway"));
+            } else if (way.hasKey("railway")) {
+                sb.append("railway");
+            } else if (way.hasKey("waterway")) {
+                sb.append(tr("waterway"));
+            } else if (way.hasKey("landuse")) {
+                sb.append(tr("landuse"));
+            }
         }
 
         int nodesNo = way.isClosed() ? (way.getNumNodes() -1) : way.getNumNodes();
@@ -580,7 +583,11 @@ public class DefaultNameFormatter implements NameFormatter, HistoryNameFormatter
         }
         /* note: length == 0 should no longer happen, but leave the bracket code
            nevertheless, who knows what future brings */
-        sb.append((sb.length() > 0) ? (" ("+nodes+')') : nodes);
+        if (sb.length() > 0) {
+            sb.append(" (").append(nodes).append(')');
+        } else {
+            sb.append(nodes);
+        }
         decorateNameWithId(sb, way);
         return sb.toString();
     }
diff --git a/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java b/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java
index 8569f52144..1d00a63aad 100644
--- a/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java
+++ b/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java
@@ -182,7 +182,7 @@ public abstract class AbstractMapRenderer implements Rendering {
     }
 
     /**
-     * Reads all the settings from preferences. Calls the @{link #getColors}
+     * Reads all the settings from preferences. Calls the {@link #getColors}
      * function.
      *
      * @param virtual <code>true</code> if virtual nodes are used
diff --git a/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java b/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
index 6ddb1fb98e..fce0b91810 100644
--- a/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
+++ b/src/org/openstreetmap/josm/data/validation/routines/DomainValidator.java
@@ -1969,6 +1969,8 @@ public final class DomainValidator extends AbstractValidator {
      * @param input the string to convert, not null
      * @return converted input, or original input if conversion fails
      */
+    /* Ignore UnicodeEscape errors (ErrorProne doesn't like the switch statement, and using literals would be confusing) */
+    @SuppressWarnings("UnicodeEscape")
     // Needed by UrlValidator
     public static String unicodeToASCII(String input) {
         if (isOnlyASCII(input)) { // skip possibly expensive processing
@@ -1990,7 +1992,7 @@ public final class DomainValidator extends AbstractValidator {
             //            (halfwidth ideographic full stop).
             char lastChar = input.charAt(length-1); // fetch original last char
             switch(lastChar) {
-                case '\u002E': // "." full stop
+                case '.':      // "." full stop, AKA U+002E
                 case '\u3002': // ideographic full stop
                 case '\uFF0E': // fullwidth full stop
                 case '\uFF61': // halfwidth ideographic full stop
diff --git a/src/org/openstreetmap/josm/data/validation/tests/Addresses.java b/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
index 0c3473bc43..11170dee89 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
@@ -363,7 +363,7 @@ public class Addresses extends Test {
     static double getDistance(OsmPrimitive a, OsmPrimitive b) {
         LatLon centerA = a.getBBox().getCenter();
         LatLon centerB = b.getBBox().getCenter();
-        return (centerA.greatCircleDistance(centerB));
+        return centerA.greatCircleDistance(centerB);
     }
 
     protected void checkDistance(OsmPrimitive house, Collection<Way> street) {
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
index cb1818bb31..5fd62166f4 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
@@ -574,7 +574,7 @@ implements DataSelectionListener, ActiveLayerChangeListener, DataSetListenerAdap
     }
 
     /**
-     * Update selection status, call @{link #selectionChanged} function.
+     * Update selection status, call {@link #selectionChanged} function.
      */
     private void updateSelection() {
         // Parameter is ignored in this class
diff --git a/src/org/openstreetmap/josm/io/ozi/OziWptReader.java b/src/org/openstreetmap/josm/io/ozi/OziWptReader.java
index 223ee85e57..0510b69329 100644
--- a/src/org/openstreetmap/josm/io/ozi/OziWptReader.java
+++ b/src/org/openstreetmap/josm/io/ozi/OziWptReader.java
@@ -73,7 +73,7 @@ public class OziWptReader implements IGpxReader {
                         Logging.trace(line);
                     } else {
                         try {
-                            String[] fields = line.split(",");
+                            String[] fields = line.split(",", -1);
                             WayPoint currentwp = new WayPoint(new LatLon(
                                     Double.parseDouble(fields[IDX_LAT]),
                                     Double.parseDouble(fields[IDX_LON])));
diff --git a/src/org/openstreetmap/josm/tools/HttpClient.java b/src/org/openstreetmap/josm/tools/HttpClient.java
index 9e9a7d89a5..18eb5964ec 100644
--- a/src/org/openstreetmap/josm/tools/HttpClient.java
+++ b/src/org/openstreetmap/josm/tools/HttpClient.java
@@ -378,15 +378,16 @@ public abstract class HttpClient {
          * @see HttpURLConnection#getInputStream()
          * @see HttpURLConnection#getErrorStream()
          */
-        @SuppressWarnings("resource")
+        @SuppressWarnings({"resource",
+                /* All 4 `InputStream in` reassignments would close the original when the returned stream is closed */
+                "PMD.CloseResource"})
         public final InputStream getContent() throws IOException {
-            InputStream in = getInputStream();
-            in = new ProgressInputStream(in, getContentLength(), monitor);
-            in = "gzip".equalsIgnoreCase(getContentEncoding())
-                    ? new GZIPInputStream(in)
-                    : "deflate".equalsIgnoreCase(getContentEncoding())
-                    ? new InflaterInputStream(in)
-                    : in;
+            InputStream in = new ProgressInputStream(getInputStream(), getContentLength(), monitor);
+            if ("gzip".equalsIgnoreCase(getContentEncoding())) {
+                in = new GZIPInputStream(in);
+            } else if ("deflate".equalsIgnoreCase(getContentEncoding())) {
+                in = new InflaterInputStream(in);
+            }
             Compression compression = Compression.NONE;
             if (uncompress) {
                 final String contentType = getContentType();
diff --git a/tools/checkstyle/src/org/openstreetmap/josm/TopLevelJavadocCheck.java b/tools/checkstyle/src/org/openstreetmap/josm/TopLevelJavadocCheck.java
index 26e59ee9ac..2c406dfabf 100644
--- a/tools/checkstyle/src/org/openstreetmap/josm/TopLevelJavadocCheck.java
+++ b/tools/checkstyle/src/org/openstreetmap/josm/TopLevelJavadocCheck.java
@@ -86,7 +86,7 @@ public class TopLevelJavadocCheck extends AbstractCheck {
     @Override
     public void visitToken(DetailAST ast) {
         DetailAST parent = ast.getParent();
-        if (parent == null || parent.getType() == TokenTypes.EOF) {
+        if (parent == null || parent.getType() == TokenTypes.COMPILATION_UNIT) {
             foundTopLevelClass = true;
             if (!hasJavadoc(ast)) {
                 this.log(ast.getLineNo(), "incomplete or missing Javadoc for top level class or interface");
diff --git a/tools/ivy.xml b/tools/ivy.xml
index 6a8202bb42..3fceb51515 100644
--- a/tools/ivy.xml
+++ b/tools/ivy.xml
@@ -17,21 +17,21 @@
         <!-- javacc->default -->
         <dependency org="net.java.dev.javacc" name="javacc" rev="7.0.10" conf="javacc->default"/>
         <!-- checkstyle->default -->
-        <dependency org="com.puppycrawl.tools" name="checkstyle" rev="8.44" conf="checkstyle->default"/>
+        <dependency org="com.puppycrawl.tools" name="checkstyle" rev="9.1" conf="checkstyle->default"/>
         <!-- proguard->default -->
         <dependency org="com.guardsquare" name="proguard-ant" rev="7.2.0-beta2" conf="proguard->default"/>
         <!-- pmd->default -->
-        <dependency org="net.sourceforge.pmd" name="pmd-core" rev="6.20.0" conf="pmd->default"/>
-        <dependency org="net.sourceforge.pmd" name="pmd-java" rev="6.20.0" conf="pmd->default"/>
+        <dependency org="net.sourceforge.pmd" name="pmd-core" rev="6.40.0" conf="pmd->default"/>
+        <dependency org="net.sourceforge.pmd" name="pmd-java" rev="6.40.0" conf="pmd->default"/>
         <dependency org="net.sourceforge.saxon" name="saxon" rev="9.1.0.8" conf="pmd->default">
             <artifact name="saxon" type="jar"/>
             <artifact name="saxon" type="jar" maven:classifier="dom"/>
         </dependency>
         <!-- spotbugs->default -->
-        <dependency org="com.github.spotbugs" name="spotbugs" rev="4.2.3" conf="spotbugs->default"/>
-        <dependency org="com.github.spotbugs" name="spotbugs-ant" rev="4.2.3" conf="spotbugs->default"/>
+        <dependency org="com.github.spotbugs" name="spotbugs" rev="4.5.0" conf="spotbugs->default"/>
+        <dependency org="com.github.spotbugs" name="spotbugs-ant" rev="4.5.0" conf="spotbugs->default"/>
         <!-- errorprone->default -->
-        <dependency org="com.google.errorprone" name="error_prone_core" rev="2.8.1" conf="errorprone->default"/>
+        <dependency org="com.google.errorprone" name="error_prone_core" rev="2.10.0" conf="errorprone->default"/>
         <!-- errorprone->default -->
         <dependency org="com.google.errorprone" name="javac" rev="9+181-r4173-1" conf="errorprone_javac->default"/>
         <!-- semanticdb->default -->
diff --git a/tools/pmd/josm-ruleset.xml b/tools/pmd/josm-ruleset.xml
index 34676b4a8c..a2eb22d967 100644
--- a/tools/pmd/josm-ruleset.xml
+++ b/tools/pmd/josm-ruleset.xml
@@ -3,9 +3,9 @@
     xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
- 
+
   <description>JOSM PMD ruleset</description>
- 
+
   <rule ref="category/java/bestpractices.xml">
     <exclude name="AccessorClassGeneration"/>
     <exclude name="AccessorMethodGeneration"/>
@@ -21,6 +21,7 @@
     <exclude name="GuardLogStatement"/>
     <exclude name="JUnit4TestShouldUseAfterAnnotation"/>
     <exclude name="JUnit4TestShouldUseTestAnnotation"/>
+    <exclude name="LiteralsFirstInComparisons" reason="Introduced in 6.24, some positives in source code at this time"/>
     <exclude name="LooseCoupling"/>
     <exclude name="MethodReturnsInternalArray"/>
     <exclude name="OneDeclarationPerLine"/>
@@ -29,7 +30,9 @@
     <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="UnusedFormalParameter"/>
+    <exclude name="UnusedPrivateMethod" reason="Broken since PMD 6.33, see https://github.com/pmd/pmd/issues/3468"/>
     <exclude name="UseVarargs"/>
   </rule>
   <rule ref="category/java/bestpractices.xml/PreserveStackTrace">
@@ -39,7 +42,7 @@
   </rule>
   <rule ref="category/java/bestpractices.xml/UnusedFormalParameter">
     <properties>
-        <property name="violationSuppressXPath" value="//Annotation[MarkerAnnotation/Name/@Image='Deprecated']/..[MethodDeclaration|ConstructorDeclaration]"/>
+        <property name="violationSuppressXPath" value="//Annotation[MarkerAnnotation/Name/@SimpleName='Deprecated']/..[MethodDeclaration|ConstructorDeclaration]"/>
     </properties>
   </rule>
   <rule ref="category/java/codestyle.xml">
@@ -72,22 +75,23 @@
     <exclude name="ShortMethodName"/>
     <exclude name="ShortVariable"/>
     <exclude name="TooManyStaticImports"/>
+    <exclude name="UnnecessaryCast" reason="Introduced in 6.24, some positives in source code at this time"/>
     <exclude name="UnnecessaryConstructor"/>
-    <exclude name="UselessParentheses"/>
     <exclude name="UseUnderscoresInNumericLiterals"/>
+    <exclude name="UselessParentheses"/>
     <exclude name="VariableNamingConventions"/>
     <exclude name="WhileLoopsMustUseBraces"/>
   </rule>
   <rule ref="category/java/codestyle.xml/ShortMethodName">
     <properties>
-        <property name="violationSuppressXPath" value="//MethodDeclarator[@Image='at' or @Image='ht' or @Image='of' or @Image='ok' or @Image='tr']
-          | //MethodDeclarator/../../Annotation/MarkerAnnotation/Name[@Image='Deprecated']
-          | //MethodDeclarator/../../../..[@Image='LambertConformalConic']"/>
+        <property name="violationSuppressXPath" value="//MethodDeclaration[@Name='at' or @Name='ht' or @Name='of' or @Name='ok' or @Name='tr']
+          | //MethodDeclaration/../../Annotation/MarkerAnnotation/Name[@Image='Deprecated']
+          | //MethodDeclaration/../../../..[@Image='LambertConformalConic']"/>
     </properties>
   </rule>
   <rule ref="category/java/codestyle.xml/MethodNamingConventions">
     <properties>
-        <property name="violationSuppressXPath" value="//MethodDeclarator/../../../..[@Image='Functions' or @Image='PseudoClasses' or @Image='Role' or @Image='TaggingPreset']"/>
+        <property name="violationSuppressXPath" value="//MethodDeclaration/../../..[@SimpleName='Functions' or @SimpleName='PseudoClasses' or @SimpleName='Role' or @SimpleName='TaggingPreset']"/>
     </properties>
   </rule>
   <rule ref="category/java/codestyle.xml/FieldNamingConventions">
@@ -95,17 +99,17 @@
         <property name="enumConstantPattern" value="[A-Za-z][A-Za-z_0-9]*"/>
         <property name="violationSuppressXPath" value="//FieldDeclaration[@Public='true']
           | //FieldDeclaration/../Annotation/MarkerAnnotation/Name[@Image='pref']
-          | //FieldDeclaration/Type/ReferenceType/ClassOrInterfaceType[@Image!='Boolean' and 
-                                                                       @Image!='Byte' and 
-                                                                       @Image!='Character' and 
-                                                                       @Image!='Class' and 
-                                                                       @Image!='Double' and 
-                                                                       @Image!='Enum' and 
-                                                                       @Image!='Float' and 
+          | //FieldDeclaration/Type/ReferenceType/ClassOrInterfaceType[@Image!='Boolean' and
+                                                                       @Image!='Byte' and
+                                                                       @Image!='Character' and
+                                                                       @Image!='Class' and
+                                                                       @Image!='Double' and
+                                                                       @Image!='Enum' and
+                                                                       @Image!='Float' and
                                                                        @Image!='Integer' and
                                                                        @Image!='Long' and
                                                                        @Image!='Number' and
-                                                                       @Image!='Short' and 
+                                                                       @Image!='Short' and
                                                                        @Image!='String' ]"/>
     </properties>
   </rule>
@@ -118,6 +122,7 @@
     <exclude name="AvoidCatchingGenericException"/>
     <exclude name="AvoidDeeplyNestedIfStmts"/>
     <exclude name="AvoidRethrowingException"/>
+    <exclude name="CognitiveComplexity" reason="Introduced in 6.35, some number of positives in source code at this time"/>
     <exclude name="CollapsibleIfStatements"/>
     <exclude name="CouplingBetweenObjects"/>
     <exclude name="CyclomaticComplexity"/>
@@ -132,6 +137,7 @@
     <exclude name="ImmutableField"/>
     <exclude name="LawOfDemeter"/>
     <exclude name="LoosePackageCoupling"/>
+    <exclude name="MutableStaticState" reason="Introduced in 6.35, some number of positives in source code at this time"/>
     <exclude name="NcssCount"/>
     <exclude name="NPathComplexity"/>
     <exclude name="SignatureDeclareThrowsException"/>
@@ -167,28 +173,35 @@
     <exclude name="CompareObjectsWithEquals"/>
     <exclude name="ConstructorCallsOverridableMethod"/>
     <exclude name="DataflowAnomalyAnalysis"/>
-    <exclude name="DoNotCallSystemExit"/>
+    <exclude name="DoNotTerminateVM"/>
     <exclude name="DontImportSun"/>
     <exclude name="EmptyIfStmt"/>
     <exclude name="EmptyWhileStmt"/>
-    <exclude name="MissingBreakInSwitch"/>
+    <exclude name="ImplicitSwitchFallThrough"/>
     <exclude name="MissingSerialVersionUID"/>
     <exclude name="MissingStaticMethodInNonInstantiatableClass"/>
     <exclude name="NonStaticInitializer"/>
     <exclude name="NullAssignment"/>
     <exclude name="ReturnEmptyArrayRatherThanNull"/>
+    <exclude name="ReturnEmptyCollectionRatherThanNull" reason="Introduced in 6.37, there are positives in source code at this time"/>
     <exclude name="SimpleDateFormatNeedsLocale"/>
     <exclude name="SingleMethodSingleton"/>
     <exclude name="SingletonClassReturningNewInstance"/>
     <exclude name="TestClassWithoutTestCases"/>
     <exclude name="UseProperClassLoader"/>
   </rule>
+  <rule ref="category/java/errorprone.xml/AvoidAccessibilityAlteration">
+    <properties>
+      <property name="violationSuppressXPath" value="//MethodDeclaration/../../..[@SimpleName='ReflectionUtils']"/>
+    </properties>
+  </rule>
   <rule ref="category/java/performance.xml">
     <exclude name="AvoidInstantiatingObjectsInLoops"/>
     <exclude name="AvoidUsingShortType"/>
     <exclude name="ConsecutiveLiteralAppends"/>
     <exclude name="InefficientEmptyStringCheck"/>
     <exclude name="SimplifyStartsWith"/>
+    <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"/>
