Index: src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java b/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java
--- a/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java	(revision 18417)
+++ b/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java	(date 1645231276754)
@@ -29,7 +29,7 @@
     /** The constant value {@code "<different>"}. */
     protected static final String DIFFERENT = "<different>";
     /** Translation of {@code "<different>"}. */
-    protected static final String DIFFERENT_I18N = tr(DIFFERENT);
+    public static final String DIFFERENT_I18N = tr(DIFFERENT);
 
     /** True if the default value should also be set on primitives that already have tags.  */
     protected static final BooleanProperty PROP_FILL_DEFAULT = new BooleanProperty("taggingpreset.fill-default-for-tagged-primitives", false);
Index: src/org/openstreetmap/josm/gui/tagging/ac/MaxLengthDocumentFilter.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/tagging/ac/MaxLengthDocumentFilter.java b/src/org/openstreetmap/josm/gui/tagging/ac/MaxLengthDocumentFilter.java
--- a/src/org/openstreetmap/josm/gui/tagging/ac/MaxLengthDocumentFilter.java	(revision 18417)
+++ b/src/org/openstreetmap/josm/gui/tagging/ac/MaxLengthDocumentFilter.java	(date 1645548855775)
@@ -1,13 +1,13 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.tagging.ac;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
-
 import javax.swing.text.AttributeSet;
 import javax.swing.text.BadLocationException;
 import javax.swing.text.DocumentFilter;
 import javax.swing.text.StyleConstants;
 
+import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
+
 /**
  * A {@link DocumentFilter} to limit the text length in the editor.
  * @since 18221
@@ -15,12 +15,11 @@
 public class MaxLengthDocumentFilter extends DocumentFilter {
     /** the document will not accept text longer than this. -1 to disable */
     private int maxLength = -1;
-    private static final String DIFFERENT = tr("<different>");
 
     /**
      * Sets the maximum text length.
      *
-     * @param length the maximum no. of charactes allowed in this document. -1 to disable
+     * @param length the maximum no. of characters allowed in this document. -1 to disable
      */
     public void setMaxLength(int length) {
         maxLength = length;
@@ -44,7 +43,7 @@
 
     private boolean mustInsertOrReplace(FilterBypass fb, int length, String string, AttributeSet attr) {
         int newLen = fb.getDocument().getLength() - length + ((string == null) ? 0 : string.length());
-        return (maxLength == -1 || newLen <= maxLength || DIFFERENT.equals(string) ||
+        return (maxLength == -1 || newLen <= maxLength || KeyedItem.DIFFERENT_I18N.equals(string) ||
                 // allow longer text while composing characters or it will be hard to compose
                 // the last characters before the limit
                 ((attr != null) && attr.isDefined(StyleConstants.ComposedTextAttribute)));
Index: src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 18417)
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(date 1645552046165)
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.dialogs.properties;
 
+import static org.openstreetmap.josm.actions.search.SearchAction.searchStateless;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Component;
@@ -102,6 +103,7 @@
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetListener;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
+import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
 import org.openstreetmap.josm.gui.util.AbstractTag2LinkPopupListener;
 import org.openstreetmap.josm.gui.util.HighlightHelper;
 import org.openstreetmap.josm.gui.util.TableHelper;
@@ -328,8 +330,8 @@
         tagRowSorter.setComparator(0, AlphanumComparator.getInstance());
         tagRowSorter.setComparator(1, (o1, o2) -> {
             if (o1 instanceof Map && o2 instanceof Map) {
-                final String v1 = ((Map) o1).size() == 1 ? (String) ((Map) o1).keySet().iterator().next() : tr("<different>");
-                final String v2 = ((Map) o2).size() == 1 ? (String) ((Map) o2).keySet().iterator().next() : tr("<different>");
+                final String v1 = ((Map) o1).size() == 1 ? (String) ((Map) o1).keySet().iterator().next() : KeyedItem.DIFFERENT_I18N;
+                final String v2 = ((Map) o2).size() == 1 ? (String) ((Map) o2).keySet().iterator().next() : KeyedItem.DIFFERENT_I18N;
                 return AlphanumComparator.getInstance().compare(v1, v2);
             } else {
                 return AlphanumComparator.getInstance().compare(String.valueOf(o1), String.valueOf(o2));
@@ -676,7 +678,7 @@
             }
             tagData.addRow(new Object[]{e.getKey(), e.getValue()});
             tags.put(e.getKey(), e.getValue().size() == 1
-                    ? e.getValue().keySet().iterator().next() : tr("<different>"));
+                    ? e.getValue().keySet().iterator().next() : KeyedItem.DIFFERENT_I18N);
         }
 
         membershipData.setRowCount(0);
@@ -1084,7 +1086,7 @@
                     if (roleString == null) {
                         roleString = r.getRole();
                     } else if (!roleString.equals(r.getRole())) {
-                        roleString = tr("<different>");
+                        roleString = KeyedItem.DIFFERENT_I18N;
                         break;
                     }
                 }
@@ -1343,7 +1345,7 @@
             if (sel.isEmpty())
                 return;
             final SearchSetting ss = createSearchSetting(key, sel, sameType);
-            org.openstreetmap.josm.actions.search.SearchAction.searchStateless(ss);
+            searchStateless(ss);
         }
     }
 
@@ -1366,7 +1368,7 @@
             } else if (p instanceof Relation) {
                 t = "type:relation ";
             }
-            String token = new StringBuilder(t).append(val).toString();
+            String token = t + val;
             if (consideredTokens.add(token)) {
                 s.append(sep).append('(').append(t).append(SearchCompiler.buildSearchStringForTag(key, val)).append(')');
                 sep = " OR ";
Index: src/org/openstreetmap/josm/gui/dialogs/properties/RelationRoleEditor.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/gui/dialogs/properties/RelationRoleEditor.java b/src/org/openstreetmap/josm/gui/dialogs/properties/RelationRoleEditor.java
--- a/src/org/openstreetmap/josm/gui/dialogs/properties/RelationRoleEditor.java	(revision 18417)
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/RelationRoleEditor.java	(date 1645231582208)
@@ -14,6 +14,7 @@
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
 import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -41,7 +42,7 @@
                 formatter.formatAsHtmlUnorderedList(Utils.transform(members, RelationMember::getMember), 5),
                 formatter.formatAsHtmlUnorderedList(relation)),
                 oldRole);
-        if (newRole == null || oldRole.equals(newRole) || tr("<different>").equals(newRole)) {
+        if (newRole == null || oldRole.equals(newRole) || KeyedItem.DIFFERENT_I18N.equals(newRole)) {
             return;
         }
         final List<RelationMember> newMembers = relation.getMembers();
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 18417)
+++ b/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(date 1645231582204)
@@ -88,6 +88,7 @@
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompEvent;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompListener;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
+import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
 import org.openstreetmap.josm.gui.widgets.JosmListCellRenderer;
@@ -537,7 +538,7 @@
 
             List<AutoCompletionItem> valueList = autocomplete.getTagValues(getAutocompletionKeys(key), usedValuesAwareComparator);
 
-            final String selection = m.size() != 1 ? tr("<different>") : m.entrySet().iterator().next().getKey();
+            final String selection = m.size() != 1 ? KeyedItem.DIFFERENT_I18N : m.entrySet().iterator().next().getKey();
 
             values = new AutoCompComboBox<>();
             values.getModel().setComparator(Comparator.naturalOrder());
@@ -585,7 +586,7 @@
                 newkey = key;
                 value = null; // delete the key instead
             }
-            if (key.equals(newkey) && tr("<different>").equals(value))
+            if (key.equals(newkey) && KeyedItem.DIFFERENT_I18N.equals(value))
                 return;
             if (key.equals(newkey) || value == null) {
                 UndoRedoHandler.getInstance().add(new ChangePropertyCommand(sel, newkey, value));
@@ -605,7 +606,7 @@
                 }
                 Collection<Command> commands = new ArrayList<>();
                 commands.add(new ChangePropertyCommand(sel, key, null));
-                if (value.equals(tr("<different>"))) {
+                if (value.equals(KeyedItem.DIFFERENT_I18N)) {
                     String newKey = newkey;
                     sel.stream()
                             .filter(osm -> osm.hasKey(key))

