Changeset 18960 in josm for trunk/src/org/openstreetmap/josm/data/validation/ValidationTask.java
- Timestamp:
- 2024-01-30T09:04:11+01:00 (18 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/validation/ValidationTask.java
r18850 r18960 7 7 import java.util.ArrayList; 8 8 import java.util.Collection; 9 import java.util.Collections; 10 import java.util.HashSet; 9 11 import java.util.List; 12 import java.util.Set; 10 13 import java.util.function.BiConsumer; 11 14 import java.util.function.Consumer; … … 14 17 15 18 import org.openstreetmap.josm.data.osm.OsmPrimitive; 19 import org.openstreetmap.josm.data.osm.Way; 16 20 import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper; 21 import org.openstreetmap.josm.data.validation.util.AggregatePrimitivesVisitor; 17 22 import org.openstreetmap.josm.gui.MainApplication; 18 23 import org.openstreetmap.josm.gui.MapFrame; … … 31 36 private final Consumer<List<TestError>> onFinish; 32 37 private Collection<Test> tests; 33 private final Collection<OsmPrimitive> validatedPrimitives;38 private final Collection<OsmPrimitive> initialPrimitives; 34 39 private final Collection<OsmPrimitive> formerValidatedPrimitives; 35 40 private final boolean beforeUpload; … … 72 77 false /*don't ignore exceptions */); 73 78 this.onFinish = onFinish; 74 this. validatedPrimitives = validatedPrimitives;79 this.initialPrimitives = validatedPrimitives; 75 80 this.formerValidatedPrimitives = formerValidatedPrimitives; 76 81 this.tests = tests; … … 78 83 } 79 84 85 /** 86 * Find objects parent objects of given objects which should be checked for geometry problems 87 * or mismatches between child tags and parent tags. 88 * @param primitives the given objects 89 * @return the collection of relevant parent objects 90 */ 91 private static Set<OsmPrimitive> getRelevantParents(Collection<OsmPrimitive> primitives) { 92 Set<OsmPrimitive> addedWays = new HashSet<>(); 93 Set<OsmPrimitive> addedRelations = new HashSet<>(); 94 for (OsmPrimitive p : primitives) { 95 for (OsmPrimitive parent : p.getReferrers()) { 96 if (parent.isDeleted()) 97 continue; 98 if (parent instanceof Way) 99 addedWays.add(parent); 100 else 101 addedRelations.add(parent); 102 } 103 } 104 105 // allow to find invalid multipolygon relations caused by moved nodes 106 OsmPrimitive.getParentRelations(addedWays).stream().filter(r -> r.isMultipolygon() && !r.isDeleted()) 107 .forEach(addedRelations::add); 108 HashSet<OsmPrimitive> extendedSet = new HashSet<>(); 109 extendedSet.addAll(addedWays); 110 extendedSet.addAll(addedRelations); 111 return extendedSet; 112 113 } 80 114 protected ValidationTask(ProgressMonitor progressMonitor, 81 115 Collection<Test> tests, … … 123 157 if (Utils.isEmpty(tests)) 124 158 return; 159 int testCounter = 0; 160 final boolean isPartial = this.beforeUpload || formerValidatedPrimitives != null; 161 Set<OsmPrimitive> filter = null; 162 Collection<OsmPrimitive> validatedPrimitives = initialPrimitives; 163 if (isPartial) { 164 Set<OsmPrimitive> other = Collections.emptySet(); 165 if (Boolean.TRUE.equals(ValidatorPrefHelper.PREF_ADD_PARENTS.get())) { 166 other = getRelevantParents(initialPrimitives); 167 } 168 HashSet<OsmPrimitive> extendedSet = new HashSet<>(); 169 AggregatePrimitivesVisitor v = new AggregatePrimitivesVisitor(); 170 extendedSet.addAll(v.visit(initialPrimitives)); 171 extendedSet.addAll(other); 172 validatedPrimitives = extendedSet; 173 filter = new HashSet<>(initialPrimitives); 174 filter.addAll(other); 175 } 125 176 getProgressMonitor().setTicksCount(tests.size() * validatedPrimitives.size()); 126 int testCounter = 0; 177 127 178 for (Test test : tests) { 128 179 if (canceled) … … 132 183 test.setBeforeUpload(this.beforeUpload); 133 184 // Pre-upload checks only run on a partial selection. 134 test.setPartialSelection( this.beforeUpload || formerValidatedPrimitives != null);185 test.setPartialSelection(isPartial); 135 186 test.startTest(getProgressMonitor().createSubTaskMonitor(validatedPrimitives.size(), false)); 136 187 test.visit(validatedPrimitives); 137 188 test.endTest(); 189 if (isPartial && Boolean.TRUE.equals(ValidatorPrefHelper.PREF_REMOVE_IRRELEVANT.get())) { 190 // #23397: remove errors for objects which were not in the initial list of primitives 191 test.removeIrrelevantErrors(filter); 192 } 193 138 194 errors.addAll(test.getErrors()); 139 195 if (this.testConsumer != null) {
Note:
See TracChangeset
for help on using the changeset viewer.