Index: /trunk/src/org/openstreetmap/josm/gui/util/Tag2Link.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/util/Tag2Link.java	(revision 15700)
+++ /trunk/src/org/openstreetmap/josm/gui/util/Tag2Link.java	(revision 15701)
@@ -9,4 +9,5 @@
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -15,7 +16,7 @@
 import javax.json.Json;
 import javax.json.JsonArray;
+import javax.json.JsonReader;
 import javax.json.JsonValue;
 
-import com.drew.lang.Charsets;
 import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.io.CachedFile;
@@ -44,5 +45,5 @@
      * Maps OSM keys to formatter URLs from Wikidata and OSM Sophox where {@code "$1"} has to be replaced by a value.
      */
-    protected static MultiMap<String, String> wikidataRules = new MultiMap<>();
+    static MultiMap<String, String> wikidataRules = new MultiMap<>();
 
     private Tag2Link() {
@@ -50,6 +51,14 @@
     }
 
+    /**
+     * Represents an operation that accepts a link.
+     */
     @FunctionalInterface
     interface LinkConsumer {
+        /**
+         * Performs the operation on the given arguments.
+         * @param name the name/label of the link
+         * @param url the URL of the link
+         */
         void acceptLink(String name, String url);
     }
@@ -78,11 +87,14 @@
     private static void fetchRulesViaSPARQL(final String query, final String server) throws IOException {
         final int initialSize = wikidataRules.size();
-        final String sparql = new String(new CachedFile(query).getByteContent(), Charsets.UTF_8);
-        final CachedFile sparqlFile = new CachedFile(server + "?query=" + Utils.encodeUrl(sparql))
-                .setHttpAccept("application/json");
+        final String sparql;
+        try (CachedFile cachedFile = new CachedFile(query)) {
+            sparql = new String(cachedFile.getByteContent(), StandardCharsets.UTF_8);
+        }
 
         final JsonArray rules;
-        try (BufferedReader reader = sparqlFile.getContentReader()) {
-            rules = Json.createReader(reader).read().asJsonObject().getJsonObject("results").getJsonArray("bindings");
+        try (CachedFile cachedFile = new CachedFile(server + "?query=" + Utils.encodeUrl(sparql));
+             BufferedReader reader = cachedFile.setHttpAccept("application/json").getContentReader();
+             JsonReader jsonReader = Json.createReader(reader)) {
+            rules = jsonReader.read().asJsonObject().getJsonObject("results").getJsonArray("bindings");
         }
 
@@ -106,6 +118,4 @@
 
     static void getLinksForTag(String key, String value, LinkConsumer linkConsumer) {
-        Matcher keyMatcher;
-        Matcher valueMatcher;
 
         // Search
@@ -130,6 +140,7 @@
 
         // Wikimedia
-        if ((keyMatcher = Pattern.compile("wikipedia(:(?<lang>\\p{Lower}{2,}))?").matcher(key)).matches()
-                && (valueMatcher = Pattern.compile("((?<lang>\\p{Lower}{2,}):)?(?<article>.*)").matcher(value)).matches()) {
+        final Matcher keyMatcher = Pattern.compile("wikipedia(:(?<lang>\\p{Lower}{2,}))?").matcher(key);
+        final Matcher valueMatcher = Pattern.compile("((?<lang>\\p{Lower}{2,}):)?(?<article>.*)").matcher(value);
+        if (keyMatcher.matches() && valueMatcher.matches()) {
             final String lang = Utils.firstNotEmptyString("en", keyMatcher.group("lang"), valueMatcher.group("lang"));
             linkConsumer.acceptLink(tr("View Wikipedia article"), "https://" + lang + ".wikipedia.org/wiki/" + valueMatcher.group("article"));
