Ticket #23571: 23571-alpha.patch

File 23571-alpha.patch, 2.6 KB (added by GerdP, 2 years ago)

initial approach with cached results

  • 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            boolean isfreeformKey = TaggingPresets.getTaggingPresets().stream()
     267                    .anyMatch(preset -> preset.data.stream()
     268                            .filter(KeyedItem.class::isInstance)
     269                            .map(KeyedItem.class::cast)
     270                            .anyMatch(item -> key.equals(item.key) && item instanceof Text));
     271            if (isfreeformKey) {
     272                freeformKeys.add(key);
     273            }
    262274        }
    263275    }
    264276
     
    280292        oftenUsedTags.clear();
    281293        presetIndex.clear();
    282294        ignoreForOuterMPSameTagCheck.clear();
     295        freeformKeys.clear();
    283296
    284297        StringBuilder errorSources = new StringBuilder();
    285298        for (String source : Config.getPref().getList(PREF_SOURCES, DEFAULT_SOURCES)) {
     
    11751188                    .primitives(p)
    11761189                    .build());
    11771190            withErrors.put(p, "WPV");
    1178         } else if (includeOtherSeverity) {
     1191        } else if (includeOtherSeverity && !freeformKeys.contains(key)) {
    11791192            // unknown preset value
    11801193            errors.add(TestError.builder(this, Severity.OTHER, INVALID_VALUE)
    11811194                    .message(tr("Presets do not contain property value"),