Ticket #20680: 20680.patch

File 20680.patch, 2.1 KB (added by GerdP, 4 years ago)
  • src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java

     
    1515import java.util.stream.Collectors;
    1616
    1717import org.openstreetmap.josm.data.coor.EastNorth;
     18import org.openstreetmap.josm.data.osm.DataSet;
     19import org.openstreetmap.josm.data.osm.OsmDataManager;
    1820import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1921import org.openstreetmap.josm.data.osm.OsmUtils;
    2022import org.openstreetmap.josm.data.osm.Relation;
     
    8082    private final Map<Point2D, List<WaySegment>> cellSegments = new HashMap<>(1000);
    8183    /** The already detected ways in error */
    8284    private final Map<List<Way>, List<WaySegment>> seenWays = new HashMap<>(50);
     85    protected boolean isSurroundingTest;
    8386
    8487    protected final int code;
    8588
     
    298301    @Override
    299302    public void startTest(ProgressMonitor monitor) {
    300303        super.startTest(monitor);
     304        isSurroundingTest = false;
    301305        cellSegments.clear();
    302306        seenWays.clear();
    303307    }
     
    304308
    305309    @Override
    306310    public void endTest() {
     311        // see #20680: if only a selection was tested, test it also against the other suitable ways
     312        if (partialSelection && !cellSegments.isEmpty() && !(this instanceof SelfCrossing)) {
     313            isSurroundingTest = true; // don't add more ways to the spatial index
     314            DataSet ds = OsmDataManager.getInstance().getActiveDataSet();
     315            for (Way w : ds.getWays()) {
     316                if (isPrimitiveUsable(w))
     317                    visit(w);
     318            }
     319        }
    307320        super.endTest();
    308321        cellSegments.clear();
    309322        seenWays.clear();
     
    390403                        highlight.add(es2);
    391404                    }
    392405                }
    393                 segments.add(es1);
     406                if (!isSurroundingTest)
     407                    segments.add(es1);
    394408            }
    395409        }
    396410    }