Index: trunk/src/org/openstreetmap/josm/actions/JosmAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 15588)
@@ -279,5 +279,7 @@
             SelectionEventManager.getInstance().removeSelectionListener(selectionChangeAdapter);
         }
-        MainApplication.getToolbar().unregister(this);
+        if (MainApplication.getToolbar() != null) {
+            MainApplication.getToolbar().unregister(this);
+        }
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 15588)
@@ -778,5 +778,5 @@
             return Stream.empty();
         }
-        final Stream<OsmPrimitive> stream = referrers instanceof OsmPrimitive
+        final Stream<OsmPrimitive> stream = referrers instanceof OsmPrimitive // NOPMD
                 ? Stream.of((OsmPrimitive) referrers)
                 : Arrays.stream((OsmPrimitive[]) referrers);
Index: trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 15588)
@@ -108,5 +108,5 @@
      */
     @SuppressWarnings("unchecked")
-    private static final Class<Test>[] CORE_TEST_CLASSES = new Class[] {
+    private static final Class<Test>[] CORE_TEST_CLASSES = new Class[] {// NOPMD
         /* FIXME - unique error numbers for tests aren't properly unique - ignoring will not work as expected */
         DuplicateNode.class, // ID    1 ..   99
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 15588)
@@ -391,7 +391,7 @@
             final MapCSSStyleSource source = new MapCSSStyleSource("");
             final MapCSSParser preprocessor = new MapCSSParser(css, MapCSSParser.LexicalState.PREPROCESSOR);
-            final StringReader mapcss = new StringReader(preprocessor.pp_root(source));
-            final MapCSSParser parser = new MapCSSParser(mapcss, MapCSSParser.LexicalState.DEFAULT);
-            parser.sheet(source);
+            try (StringReader mapcss = new StringReader(preprocessor.pp_root(source))) {
+                new MapCSSParser(mapcss, MapCSSParser.LexicalState.DEFAULT).sheet(source);
+            }
             // Ignore "meta" rule(s) from external rules of JOSM wiki
             source.removeMetaRules();
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 15588)
@@ -634,14 +634,6 @@
             p.add(new JScrollPane(txtSource), GBC.std().fill());
 
-            try {
-                InputStream is = s.getSourceInputStream();
-                try (BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
-                    String line;
-                    while ((line = reader.readLine()) != null) {
-                        txtSource.append(line + '\n');
-                    }
-                } finally {
-                    s.closeSourceInputStream(is);
-                }
+            try (BufferedReader reader = new BufferedReader(new InputStreamReader(s.getSourceInputStream(), StandardCharsets.UTF_8))) {
+                reader.lines().forEach(line -> txtSource.append(line + '\n'));
             } catch (IOException ex) {
                 Logging.error(ex);
Index: trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java	(revision 15588)
@@ -689,6 +689,7 @@
                 String fragmentWithReplacedVars = evalVars(outputWriter.toString());
 
-                CharArrayReader reader = new CharArrayReader(fragmentWithReplacedVars.toCharArray());
-                tmpPref.fromXML(reader);
+                try (CharArrayReader reader = new CharArrayReader(fragmentWithReplacedVars.toCharArray())) {
+                    tmpPref.fromXML(reader);
+                }
             } catch (TransformerException | XMLStreamException | IOException ex) {
                 PreferencesUtils.log(ex, "Error: can not read XML fragment:");
Index: trunk/src/org/openstreetmap/josm/gui/io/importexport/GeoJSONImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/importexport/GeoJSONImporter.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/gui/io/importexport/GeoJSONImporter.java	(revision 15588)
@@ -71,5 +71,5 @@
     public DataSet parseDataSet(final String source) throws IOException, IllegalDataException {
         try (CachedFile cf = new CachedFile(source)) {
-            InputStream fileInputStream = Compression.getUncompressedFileInputStream(cf.getFile());
+            InputStream fileInputStream = Compression.getUncompressedFileInputStream(cf.getFile()); // NOPMD
             return GeoJSONReader.parseDataSet(fileInputStream, NullProgressMonitor.INSTANCE);
         }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 15588)
@@ -433,10 +433,9 @@
                     // evaluate @media { ... } blocks
                     MapCSSParser preprocessor = new MapCSSParser(reader, MapCSSParser.LexicalState.PREPROCESSOR);
-                    String mapcss = preprocessor.pp_root(this);
 
                     // do the actual mapcss parsing
-                    Reader in2 = new StringReader(mapcss);
-                    MapCSSParser parser = new MapCSSParser(in2, MapCSSParser.LexicalState.DEFAULT);
-                    parser.sheet(this);
+                    try (Reader in2 = new StringReader(preprocessor.pp_root(this))) {
+                        new MapCSSParser(in2, MapCSSParser.LexicalState.DEFAULT).sheet(this);
+                    }
 
                     loadMeta();
Index: trunk/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 15588)
@@ -218,8 +218,6 @@
         CheckParameterUtil.ensureThat(daysClosed >= -1, "Requested note limit is less than -1.");
         String url = "notes?limit=" + noteLimit + "&closed=" + daysClosed + "&bbox=" + lon1 + ',' + lat1 + ',' + lon2 + ',' + lat2;
-        try {
-            InputStream is = getInputStream(url, progressMonitor.createSubTaskMonitor(1, false));
-            NoteReader reader = new NoteReader(is);
-            final List<Note> notes = reader.parse();
+        try (InputStream is = getInputStream(url, progressMonitor.createSubTaskMonitor(1, false))) {
+            final List<Note> notes = new NoteReader(is).parse();
             if (notes.size() == noteLimit) {
                 throw new MoreNotesException(notes, noteLimit);
Index: trunk/src/org/openstreetmap/josm/io/CachedFile.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/CachedFile.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/io/CachedFile.java	(revision 15588)
@@ -347,5 +347,5 @@
         Pair<String, InputStream> res = null;
         try {
-            ZipFile zipFile = new ZipFile(file, StandardCharsets.UTF_8);
+            ZipFile zipFile = new ZipFile(file, StandardCharsets.UTF_8); // NOPMD
             ZipEntry resentry = null;
             Enumeration<? extends ZipEntry> entries = zipFile.entries();
@@ -358,5 +358,5 @@
             }
             if (resentry != null) {
-                InputStream is = zipFile.getInputStream(resentry);
+                InputStream is = zipFile.getInputStream(resentry); // NOPMD
                 res = Pair.create(resentry.getName(), is);
             } else {
Index: trunk/src/org/openstreetmap/josm/io/Compression.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/Compression.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/io/Compression.java	(revision 15588)
@@ -177,5 +177,5 @@
     public static InputStream getUncompressedFileInputStream(File file) throws IOException {
         try {
-            InputStream in = Files.newInputStream(file.toPath());
+            InputStream in = Files.newInputStream(file.toPath()); // NOPMD
             try {
                 return byExtension(file.getName()).getUncompressedInputStream(in);
@@ -221,5 +221,5 @@
      */
     public static OutputStream getCompressedFileOutputStream(File file) throws IOException {
-        OutputStream out = Files.newOutputStream(file.toPath());
+        OutputStream out = Files.newOutputStream(file.toPath()); // NOPMD
         try {
             return byExtension(file.getName()).getCompressedOutputStream(out);
Index: trunk/src/org/openstreetmap/josm/io/GpxReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/GpxReader.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/io/GpxReader.java	(revision 15588)
@@ -621,6 +621,6 @@
      */
     public GpxReader(InputStream source) throws IOException {
-        Reader utf8stream = UTFInputStreamReader.create(source);
-        Reader filtered = new InvalidXmlCharacterFilter(utf8stream);
+        Reader utf8stream = UTFInputStreamReader.create(source); // NOPMD
+        Reader filtered = new InvalidXmlCharacterFilter(utf8stream); // NOPMD
         this.inputSource = new InputSource(filtered);
     }
Index: trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java	(revision 15588)
@@ -144,5 +144,5 @@
     protected final <T> T doParse(Parser<T> parser, final ProgressMonitor progressMonitor) throws OsmTransferException {
         progressMonitor.beginTask(tr("Contacting Server...", 10));
-        try {
+        try { // NOPMD
             return parser.parse();
         } catch (OsmTransferException e) {
@@ -211,5 +211,5 @@
                 return null;
             progressMonitor.subTask(tr("Downloading OSM data..."));
-            InputStream uncompressedInputStream = compression.getUncompressedInputStream(in);
+            InputStream uncompressedInputStream = compression.getUncompressedInputStream(in); // NOPMD
             ProgressMonitor subTaskMonitor = progressMonitor.createSubTaskMonitor(1, false);
             if ("application/json".equals(contentType)) {
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java	(revision 15588)
@@ -102,5 +102,5 @@
             try {
                 @SuppressWarnings("resource")
-                Socket request = server.accept();
+                Socket request = server.accept(); // NOPMD
                 RequestProcessor.processRequest(request);
             } catch (SocketException e) {
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java	(revision 15588)
@@ -6,5 +6,4 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
@@ -20,4 +19,5 @@
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.StringTokenizer;
@@ -86,5 +86,5 @@
         super("RemoteControl request processor");
         this.setDaemon(true);
-        this.request = request;
+        this.request = Objects.requireNonNull(request);
     }
 
@@ -94,6 +94,5 @@
      */
     public static void processRequest(Socket request) {
-        RequestProcessor processor = new RequestProcessor(request);
-        processor.start();
+        new RequestProcessor(request).start();
     }
 
@@ -167,9 +166,8 @@
     @Override
     public void run() {
-        Writer out = null;
-        try {
-            OutputStream raw = new BufferedOutputStream(request.getOutputStream());
-            out = new OutputStreamWriter(raw, RESPONSE_CHARSET);
-            BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream(), "ASCII"));
+        Writer out = null; // NOPMD
+        try { // NOPMD
+            out = new OutputStreamWriter(new BufferedOutputStream(request.getOutputStream()), RESPONSE_CHARSET);
+            BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream(), "ASCII")); // NOPMD
 
             String get = in.readLine();
@@ -274,5 +272,4 @@
                 }
             }
-
         } catch (IOException ioe) {
             Logging.debug(Logging.getErrorMessage(ioe));
@@ -423,7 +420,8 @@
             }
 
-            PrintWriter r = new PrintWriter(w);
-            printJsonInfo(cmd, r, handler);
-            return w.toString();
+            try (PrintWriter r = new PrintWriter(w)) {
+                printJsonInfo(cmd, r, handler);
+                return w.toString();
+            }
         } catch (IOException e) {
             Logging.error(e);
Index: trunk/src/org/openstreetmap/josm/plugins/PluginListParser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginListParser.java	(revision 15587)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginListParser.java	(revision 15588)
@@ -59,7 +59,5 @@
     public List<PluginInformation> parse(InputStream in) throws PluginListParseException {
         List<PluginInformation> ret = new LinkedList<>();
-        BufferedReader r = null;
-        try {
-            r = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
+        try (BufferedReader r = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
             String name = null;
             String url = null;
@@ -85,5 +83,4 @@
                 url = x[1];
                 manifest = new StringBuilder();
-
             }
             addPluginInformation(ret, name, url, manifest.toString());
