Ticket #23571: 23571-beta.patch

File 23571-beta.patch, 2.7 KB (added by GerdP, 17 months ago)

freeform keys are only interesting if the presets contain a value list

  • src/org/openstreetmap/josm/data/validation/tests/TagChecker.java

     
    7070import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
    7171import org.openstreetmap.josm.gui.tagging.presets.items.PresetListEntry;
    7272import org.openstreetmap.josm.gui.tagging.presets.items.RegionSpecific;
     73import org.openstreetmap.josm.gui.tagging.presets.items.Text;
    7374import org.openstreetmap.josm.gui.widgets.EditableList;
    7475import org.openstreetmap.josm.io.CachedFile;
    7576import org.openstreetmap.josm.spi.preferences.Config;
     
    111112    private static final List<Tag> ignoreDataTag = new ArrayList<>();
    112113    /** tag keys that have only numerical values in the presets */
    113114    private static final Set<String> ignoreForLevenshtein = new HashSet<>();
     115    /** tag keys that have freeform text in the presets */
     116    private static final Set<String> freeformKeys = new HashSet<>();
    114117
    115118    /** tag keys that are allowed to be the same on a multipolygon and an outer way */
    116119    private static final Set<String> ignoreForOuterMPSameTagCheck = new HashSet<>();
     
    259262            if (allNumerical) {
    260263                ignoreForLevenshtein.add(key);
    261264            }
     265            // see #23571
     266            if (!values.isEmpty()) {
     267                boolean isfreeformKey = TaggingPresets.getTaggingPresets().stream()
     268                        .anyMatch(preset -> preset.data.stream()
     269                                .filter(KeyedItem.class::isInstance)
     270                                .map(KeyedItem.class::cast)
     271                                .anyMatch(item -> key.equals(item.key) && item instanceof Text));
     272                if (isfreeformKey) {
     273                    freeformKeys.add(key);
     274                }
     275            }
    262276        }
    263277    }
    264278
     
    280294        oftenUsedTags.clear();
    281295        presetIndex.clear();
    282296        ignoreForOuterMPSameTagCheck.clear();
     297        freeformKeys.clear();
    283298
    284299        StringBuilder errorSources = new StringBuilder();
    285300        for (String source : Config.getPref().getList(PREF_SOURCES, DEFAULT_SOURCES)) {
     
    11751190                    .primitives(p)
    11761191                    .build());
    11771192            withErrors.put(p, "WPV");
    1178         } else if (includeOtherSeverity) {
     1193        } else if (includeOtherSeverity && !freeformKeys.contains(key)) {
    11791194            // unknown preset value
    11801195            errors.add(TestError.builder(this, Severity.OTHER, INVALID_VALUE)
    11811196                    .message(tr("Presets do not contain property value"),