Index: trunk/build.xml
===================================================================
--- trunk/build.xml	(revision 13201)
+++ trunk/build.xml	(revision 13202)
@@ -844,5 +844,5 @@
     <target name="pmd" depends="init-properties">
         <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpath="${toString:pmd.classpath}"/>
-        <pmd shortFilenames="true" encoding="UTF-8">
+        <pmd shortFilenames="true" cacheLocation="tools/pmd/cache" encoding="UTF-8">
             <sourceLanguage name="java" version="${java.lang.version}" />
             <ruleset>${base.dir}/tools/pmd/josm-ruleset.xml</ruleset>
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java	(revision 13201)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java	(revision 13202)
@@ -152,11 +152,9 @@
         // if latest version from history is higher than a non existing primitive version,
         // that means this version has been redacted and the primitive cannot be used.
-        if (history.getLatest().getVersion() > primitive.getVersion())
-            return false;
+        return history.getLatest().getVersion() <= primitive.getVersion();
 
         // latest has a higher version than one of the primitives
         // in the history (probably because the history got out of sync
         // with uploaded data) -> show the primitive as latest
-        return true;
     }
 
Index: trunk/src/org/openstreetmap/josm/tools/HiDPISupport.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/HiDPISupport.java	(revision 13201)
+++ trunk/src/org/openstreetmap/josm/tools/HiDPISupport.java	(revision 13202)
@@ -187,5 +187,5 @@
      */
     public static Image processMRImages(List<Image> imgs, Function<List<Image>, Image> processor) {
-        CheckParameterUtil.ensureThat(imgs.size() >= 1, "at least on element expected");
+        CheckParameterUtil.ensureThat(!imgs.isEmpty(), "at least one element expected");
         if (!getBaseMultiResolutionImageClass().isPresent()) {
             return processor.apply(imgs);
Index: trunk/tools/pmd/designer.bat
===================================================================
--- trunk/tools/pmd/designer.bat	(revision 13201)
+++ trunk/tools/pmd/designer.bat	(revision 13202)
@@ -2,5 +2,5 @@
 set TOPDIR=%~dp0..
 set OPTS=
-set MAIN_CLASS=net.sourceforge.pmd.util.designer.Designer
+set MAIN_CLASS=net.sourceforge.pmd.util.fxdesigner.Designer
 
-java -classpath %TOPDIR%\pmd\* %OPTS% %MAIN_CLASS% %*
+java -classpath "%TOPDIR%\pmd\*" %OPTS% %MAIN_CLASS% %*
Index: trunk/tools/pmd/josm-ruleset.xml
===================================================================
--- trunk/tools/pmd/josm-ruleset.xml	(revision 13201)
+++ trunk/tools/pmd/josm-ruleset.xml	(revision 13202)
@@ -7,89 +7,130 @@
   <description>JOSM PMD ruleset</description>
  
-  <!-- <rule ref="rulesets/java/basic.xml"/>
-  <rule ref="rulesets/java/braces.xml"/>
-  <rule ref="rulesets/java/clone.xml"/>
-  <rule ref="rulesets/java/codesize.xml"/>
-  <rule ref="rulesets/java/comments.xml"/>
-  <rule ref="rulesets/java/design.xml"/>
-  <rule ref="rulesets/java/empty.xml"/>
-  <rule ref="rulesets/java/finalizers.xml"/>
-  <rule ref="rulesets/java/imports.xml"/>
-  <rule ref="rulesets/java/migrating.xml"/>-->
-  <rule ref="rulesets/java/naming.xml">
-  	<exclude name="AbstractNaming"/>
-  	<exclude name="AvoidFieldNameMatchingMethodName"/>
-  	<exclude name="AvoidFieldNameMatchingTypeName"/>
-  	<exclude name="BooleanGetMethodName"/>
-  	<exclude name="LongVariable"/>
-  	<exclude name="ShortClassName"/>
-  	<exclude name="ShortMethodName"/>
-  	<exclude name="ShortVariable"/>
-  	<exclude name="MethodNamingConventions"/>
-  	<exclude name="VariableNamingConventions"/>
+  <rule ref="category/java/bestpractices.xml">
+    <exclude name="AccessorClassGeneration"/>
+    <exclude name="AccessorMethodGeneration"/>
+    <exclude name="ArrayIsStoredDirectly"/>
+    <exclude name="AvoidPrintStackTrace"/>
+    <exclude name="AvoidReassigningParameters"/>
+    <exclude name="AvoidStringBufferField"/>
+    <exclude name="AvoidUsingHardCodedIP"/>
+    <exclude name="ConstantsInInterface"/>
+    <exclude name="ForLoopCanBeForeach"/>
+    <exclude name="GuardLogStatement"/>
+    <exclude name="JUnit4TestShouldUseAfterAnnotation"/>
+    <exclude name="JUnit4TestShouldUseTestAnnotation"/>
+    <exclude name="LooseCoupling"/>
+    <exclude name="MethodReturnsInternalArray"/>
+    <exclude name="OneDeclarationPerLine"/>
+    <exclude name="PositionLiteralsFirstInComparisons"/>
+    <exclude name="PreserveStackTrace"/>
+    <exclude name="ReplaceHashtableWithMap"/>
+    <exclude name="SwitchStmtsShouldHaveDefault"/>
+    <exclude name="SystemPrintln"/>
+    <exclude name="UnusedFormalParameter"/>
+    <exclude name="UseVarargs"/>
   </rule>
-  <rule ref="rulesets/java/naming.xml/ShortMethodName">
+  <rule ref="category/java/bestpractices.xml/UnusedFormalParameter">
+    <properties>
+        <property name="violationSuppressXPath" value="//Annotation[MarkerAnnotation/Name/@Image='Deprecated']/..[MethodDeclaration|ConstructorDeclaration]"/>
+    </properties>
+  </rule>
+  <rule ref="category/java/codestyle.xml">
+    <exclude name="AbstractNaming"/>
+    <exclude name="AtLeastOneConstructor"/>
+    <exclude name="AvoidFinalLocalVariable"/>
+    <exclude name="AvoidPrefixingMethodParameters"/>
+    <exclude name="BooleanGetMethodName"/>
+    <exclude name="CallSuperInConstructor"/>
+    <exclude name="CommentDefaultAccessModifier"/>
+    <exclude name="ConfusingTernary"/>
+    <exclude name="DefaultPackage"/>
+    <exclude name="EmptyMethodInAbstractClassShouldBeAbstract"/>
+    <exclude name="FieldDeclarationsShouldBeAtStartOfClass"/>
+    <exclude name="ForLoopsMustUseBraces"/>
+    <exclude name="IfElseStmtsMustUseBraces"/>
+    <exclude name="IfStmtsMustUseBraces"/>
+    <exclude name="LocalVariableCouldBeFinal"/>
+    <exclude name="LongVariable"/>
+    <exclude name="MethodArgumentCouldBeFinal"/>
+    <exclude name="MethodNamingConventions"/>
+    <exclude name="OnlyOneReturn"/>
+    <exclude name="PrematureDeclaration"/>
+    <exclude name="ShortClassName"/>
+    <exclude name="ShortMethodName"/>
+    <exclude name="ShortVariable"/>
+    <exclude name="TooManyStaticImports"/>
+    <exclude name="UnnecessaryConstructor"/>
+    <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']"/>
+          | //MethodDeclarator/../../Annotation/MarkerAnnotation/Name[@Image='Deprecated']
+          | //MethodDeclarator/../../../..[@Image='LambertConformalConic']"/>
     </properties>
   </rule>
-  <rule ref="rulesets/java/naming.xml/MethodNamingConventions">
+  <rule ref="category/java/codestyle.xml/MethodNamingConventions">
     <properties>
         <property name="violationSuppressXPath" value="//MethodDeclarator/../../../..[@Image='Functions' or @Image='PseudoClasses' or @Image='Role' or @Image='TaggingPreset']"/>
     </properties>
   </rule>
-  <rule ref="rulesets/java/naming.xml/VariableNamingConventions">
+  <rule ref="category/java/codestyle.xml/VariableNamingConventions">
     <properties>
         <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 
-        	                                                             @Image!='Integer' and
-        	                                                             @Image!='Long' and
-        	                                                             @Image!='Number' and
-        	                                                             @Image!='Short' and 
-        	                                                             @Image!='String' ]"/>
+          | //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 
+                                                                       @Image!='Integer' and
+                                                                       @Image!='Long' and
+                                                                       @Image!='Number' and
+                                                                       @Image!='Short' and 
+                                                                       @Image!='String' ]"/>
     </properties>
   </rule>
-  <rule ref="rulesets/java/naming.xml/LongVariable">
+  <rule ref="category/java/codestyle.xml/LongVariable">
     <properties>
         <property name="minimum" value="44"/>
     </properties>
   </rule>
-  <rule ref="rulesets/java/optimizations.xml">
-  	<exclude name="LocalVariableCouldBeFinal"/>
-  	<exclude name="MethodArgumentCouldBeFinal"/>
-  	<exclude name="AvoidInstantiatingObjectsInLoops"/>
-  	<exclude name="PrematureDeclaration"/>
-  	<exclude name="SimplifyStartsWith"/>
-  	<exclude name="UseStringBufferForStringAppends"/>
-  	<exclude name="UseArrayListInsteadOfVector"/>
+  <rule ref="category/java/design.xml">
+    <exclude name="AvoidCatchingGenericException"/>
+    <exclude name="AvoidDeeplyNestedIfStmts"/>
+    <exclude name="AvoidRethrowingException"/>
+    <exclude name="CollapsibleIfStatements"/>
+    <exclude name="CouplingBetweenObjects"/>
+    <exclude name="CyclomaticComplexity"/>
+    <exclude name="DataClass"/>
+    <exclude name="ExceptionAsFlowControl"/>
+    <exclude name="ExcessiveClassLength"/>
+    <exclude name="ExcessiveImports"/>
+    <exclude name="ExcessiveMethodLength"/>
+    <exclude name="ExcessiveParameterList"/>
+    <exclude name="ExcessivePublicCount"/>
+    <exclude name="GodClass"/>
+    <exclude name="ImmutableField"/>
+    <exclude name="LawOfDemeter"/>
+    <exclude name="LoosePackageCoupling"/>
+    <exclude name="NcssCount"/>
+    <exclude name="NPathComplexity"/>
+    <exclude name="SignatureDeclareThrowsException"/>
+    <exclude name="SimplifiedTernary"/>
+    <exclude name="SimplifyConditional"/>
+    <exclude name="SingularField"/>
+    <exclude name="SwitchDensity"/>
+    <exclude name="TooManyFields"/>
+    <exclude name="TooManyMethods"/>
+    <exclude name="UseObjectForClearerAPI"/>
+    <exclude name="UselessOverridingMethod"/>
+    <exclude name="UseUtilityClass"/>
   </rule>
-  <rule ref="rulesets/java/strictexception.xml">
-  	<exclude name="ExceptionAsFlowControl"/>
-  	<exclude name="AvoidCatchingGenericException"/>
-  	<exclude name="AvoidCatchingNPE"/>
-  	<exclude name="AvoidRethrowingException"/>
-  </rule>
-  <rule ref="rulesets/java/strings.xml">
-  	<exclude name="AvoidDuplicateLiterals"/>
-  	<exclude name="ConsecutiveLiteralAppends"/>
-  	<exclude name="AvoidStringBufferField"/>
-  	<exclude name="StringToString"/>
-  	<exclude name="UselessStringValueOf"/>
-  	<exclude name="InefficientEmptyStringCheck"/>
-  </rule>
-  <rule ref="rulesets/java/typeresolution.xml">
-  	<exclude name="LooseCoupling"/>
-  	<exclude name="SignatureDeclareThrowsException"/>
-  </rule>
-  <rule ref="rulesets/java/typeresolution.xml/SignatureDeclareThrowsException">
+  <rule ref="category/java/design.xml/SignatureDeclareThrowsException">
     <properties>
         <property name="violationSuppressXPath" value="//MethodDeclaration/../Annotation/MarkerAnnotation/Name[@Image='Override']"/>
@@ -97,15 +138,48 @@
     </properties>
   </rule>
-  <rule ref="rulesets/java/unnecessary.xml">
-  	<exclude name="UselessParentheses"/>
-  	<exclude name="UselessOverridingMethod"/>
+  <rule ref="category/java/errorprone.xml">
+    <exclude name="AssignmentInOperand"/>
+    <exclude name="AssignmentToNonFinalStatic"/>
+    <exclude name="AvoidBranchingStatementAsLastInLoop"/>
+    <exclude name="AvoidCatchingNPE"/>
+    <exclude name="AvoidDuplicateLiterals"/>
+    <exclude name="AvoidFieldNameMatchingMethodName"/>
+    <exclude name="AvoidFieldNameMatchingTypeName"/>
+    <exclude name="AvoidInstanceofChecksInCatchClause"/>
+    <exclude name="AvoidLiteralsInIfCondition"/>
+    <exclude name="BeanMembersShouldSerialize"/>
+    <exclude name="CompareObjectsWithEquals"/>
+    <exclude name="ConstructorCallsOverridableMethod"/>
+    <exclude name="DataflowAnomalyAnalysis"/>
+    <exclude name="DoNotCallGarbageCollectionExplicitly"/>
+    <exclude name="DoNotCallSystemExit"/>
+    <exclude name="DontImportSun"/>
+    <exclude name="EmptyIfStmt"/>
+    <exclude name="EmptyWhileStmt"/>
+    <exclude name="MissingBreakInSwitch"/>
+    <exclude name="MissingSerialVersionUID"/>
+    <exclude name="MissingStaticMethodInNonInstantiatableClass"/>
+    <exclude name="NonStaticInitializer"/>
+    <exclude name="NullAssignment"/>
+    <exclude name="ReturnEmptyArrayRatherThanNull"/>
+    <exclude name="SimpleDateFormatNeedsLocale"/>
+    <exclude name="SingleMethodSingleton"/>
+    <exclude name="SingletonClassReturningNewInstance"/>
+    <exclude name="TestClassWithoutTestCases"/>
+    <exclude name="UseProperClassLoader"/>
   </rule>
-  <rule ref="rulesets/java/unusedcode.xml">
-  	<exclude name="UnusedFormalParameter"/>
-  </rule>
-  <rule ref="rulesets/java/unusedcode.xml/UnusedFormalParameter">
-    <properties>
-        <property name="violationSuppressXPath" value="//Annotation[MarkerAnnotation/Name/@Image='Deprecated']/..[MethodDeclaration|ConstructorDeclaration]"/>
-    </properties>
+  <rule ref="category/java/performance.xml">
+    <exclude name="AvoidFileStream"/>
+    <exclude name="AvoidInstantiatingObjectsInLoops"/>
+    <exclude name="AvoidUsingShortType"/>
+    <exclude name="ConsecutiveLiteralAppends"/>
+    <exclude name="InefficientEmptyStringCheck"/>
+    <exclude name="OptimizableToArrayCall"/>
+    <exclude name="SimplifyStartsWith"/>
+    <exclude name="StringToString"/>
+    <exclude name="TooFewBranchesForASwitchStatement"/>
+    <exclude name="UseArrayListInsteadOfVector"/>
+    <exclude name="UselessStringValueOf"/>
+    <exclude name="UseStringBufferForStringAppends"/>
   </rule>
 
