Ignore:
Timestamp:
2019-03-18T09:10:55+01:00 (5 years ago)
Author:
GerdP
Message:

fix #17468: Validator produces wrong warning for misspelled tag key

TODO: further improve words.cfg

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java

    r14869 r14897  
    297297            case "E:":
    298298                ignoreDataEquals.add(line);
     299                addToKeyDictionary(line);
    299300                break;
    300301            case "F:":
     
    305306                ignoreDataTag.add(tag);
    306307                oftenUsedTags.put(tag.getKey(), tag.getValue());
     308                addToKeyDictionary(tag.getKey());
    307309                break;
    308310            default:
     
    314316            Logging.error("Invalid line in {0} : {1}", source, e.getMessage());
    315317            Logging.trace(e);
     318        }
     319    }
     320
     321    private static void addToKeyDictionary(String key) {
     322        if (key != null) {
     323            String hk = harmonizeKey(key);
     324            if (!key.equals(hk)) {
     325                harmonizedKeys.put(hk, key);
     326            }
    316327        }
    317328    }
     
    356367    private static void addPresetValue(KeyedItem ky) {
    357368        if (ky.key != null && ky.getValues() != null) {
    358             String hk = harmonizeKey(ky.key);
    359             if (!ky.key.equals(hk)) {
    360                 harmonizedKeys.put(hk, ky.key);
    361             }
     369            addToKeyDictionary(ky.key);
    362370        }
    363371    }
     
    602610    private void spellCheckKey(MultiMap<OsmPrimitive, String> withErrors, OsmPrimitive p, String key) {
    603611        String prettifiedKey = harmonizeKey(key);
    604         String fixedKey = isKeyInPresets(prettifiedKey) ? prettifiedKey : harmonizedKeys.get(prettifiedKey);
     612        String fixedKey;
     613        if (ignoreDataEquals.contains(prettifiedKey)) {
     614            fixedKey = prettifiedKey;
     615        } else {
     616            fixedKey = isKeyInPresets(prettifiedKey) ? prettifiedKey : harmonizedKeys.get(prettifiedKey);
     617        }
     618        if (fixedKey == null) {
     619            for (Tag a : ignoreDataTag) {
     620                if (a.getKey().equals(prettifiedKey)) {
     621                    fixedKey = prettifiedKey;
     622                    break;
     623                }
     624            }
     625        }
     626
    605627        if (fixedKey != null && !"".equals(fixedKey) && !fixedKey.equals(key)) {
     628            final String proposedKey = fixedKey;
    606629            // misspelled preset key
    607630            final TestError.Builder error = TestError.builder(this, Severity.WARNING, MISSPELLED_KEY)
    608                     .message(tr("Misspelled property key"), marktr("Key ''{0}'' looks like ''{1}''."), key, fixedKey)
     631                    .message(tr("Misspelled property key"), marktr("Key ''{0}'' looks like ''{1}''."), key, proposedKey)
    609632                    .primitives(p);
    610633            if (p.hasKey(fixedKey)) {
    611634                errors.add(error.build());
    612635            } else {
    613                 errors.add(error.fix(() -> new ChangePropertyKeyCommand(p, key, fixedKey)).build());
     636                errors.add(error.fix(() -> new ChangePropertyKeyCommand(p, key, proposedKey)).build());
    614637            }
    615638            withErrors.put(p, "WPK");
Note: See TracChangeset for help on using the changeset viewer.