Ticket #18455: 18455-performance.patch
File 18455-performance.patch, 3.1 KB (added by , 5 years ago) |
---|
-
src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
16 16 import java.util.EnumSet; 17 17 import java.util.HashMap; 18 18 import java.util.HashSet; 19 import java.util.LinkedHashMap; 20 import java.util.LinkedHashSet; 19 21 import java.util.List; 20 22 import java.util.Locale; 21 23 import java.util.Map; … … 78 80 private static volatile HashSet<String> additionalPresetsValueData; 79 81 /** often used tags which are not in presets */ 80 82 private static volatile MultiMap<String, String> oftenUsedTags = new MultiMap<>(); 83 private static final Map<TaggingPreset, List<TaggingPresetItem>> presetIndex = new LinkedHashMap<>(); 81 84 82 85 private static final Pattern UNWANTED_NON_PRINTING_CONTROL_CHARACTERS = Pattern.compile( 83 86 "[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F\\u200e-\\u200f\\u202a-\\u202e]"); … … 243 246 harmonizedKeys.clear(); 244 247 ignoreForLevenshtein.clear(); 245 248 oftenUsedTags.clear(); 249 presetIndex.clear(); 246 250 247 251 StringBuilder errorSources = new StringBuilder(); 248 252 for (String source : Config.getPref().getList(PREF_SOURCES, DEFAULT_SOURCES)) { … … 364 368 if (!presets.isEmpty()) { 365 369 initAdditionalPresetsValueData(); 366 370 for (TaggingPreset p : presets) { 371 List<TaggingPresetItem> minData = new ArrayList<>(); 367 372 for (TaggingPresetItem i : p.data) { 368 373 if (i instanceof KeyedItem) { 374 if (!"none".equals(((KeyedItem) i).match)) 375 minData.add(i); 369 376 addPresetValue((KeyedItem) i); 370 377 } else if (i instanceof CheckGroup) { 371 378 for (Check c : ((CheckGroup) i).checks) { … … 373 380 } 374 381 } 375 382 } 383 if (!minData.isEmpty()) { 384 presetIndex .put(p, minData); 385 } 376 386 } 377 387 } 378 388 } … … 621 631 TagMap tags = p.getKeys(); 622 632 TaggingPresetType presetType = TaggingPresetType.forPrimitive(p); 623 633 EnumSet<TaggingPresetType> presetTypes = EnumSet.of(presetType); 624 Collection<TaggingPreset> matchingPresets = TaggingPresets.getMatchingPresets(null, tags, false); 634 635 Collection<TaggingPreset> matchingPresets = new LinkedHashSet<>(); 636 for (Entry<TaggingPreset, List<TaggingPresetItem>> e : presetIndex.entrySet()) { 637 if (TaggingPresetItem.matches(e.getValue(), tags)) { 638 matchingPresets.add(e.getKey()); 639 } 640 } 625 641 Collection<TaggingPreset> matchingPresetsOK = matchingPresets.stream().filter( 626 642 tp -> tp.typeMatches(presetTypes)).collect(Collectors.toList()); 627 643 Collection<TaggingPreset> matchingPresetsKO = matchingPresets.stream().filter(