Ignore:
Timestamp:
2018-11-20T17:01:47+01:00 (7 years ago)
Author:
GerdP
Message:

fix #17010 - Validator creates multiple errors/warnings for same problem

The fix reduces the noise.

  • Don't check roles again in RelationChecker when MultipolygonTest is enabled
  • remove special code that just searches for an outer way
  • correct checkMembersAndRoles, it did not find wrong roles for way members
File:
1 edited

Legend:

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

    r14436 r14437  
    1919import org.openstreetmap.josm.data.osm.Relation;
    2020import org.openstreetmap.josm.data.osm.RelationMember;
     21import org.openstreetmap.josm.data.validation.OsmValidator;
    2122import org.openstreetmap.josm.data.validation.Severity;
    2223import org.openstreetmap.josm.data.validation.Test;
    2324import org.openstreetmap.josm.data.validation.TestError;
     25import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    2426import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
    2527import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;
     
    6163     */
    6264    public static final String ROLE_VERIF_PROBLEM_MSG = tr("Role verification problem");
     65    private boolean ignoreMultiPolygons;
    6366
    6467    /**
     
    100103
    101104    @Override
     105    public void startTest(ProgressMonitor progressMonitor) {
     106        super.startTest(progressMonitor);
     107
     108        for (Test t : OsmValidator.getEnabledTests(false)) {
     109            if (t instanceof MultipolygonTest) {
     110                ignoreMultiPolygons = true;
     111                break;
     112            }
     113        }
     114    }
     115
     116    @Override
    102117    public void visit(Relation n) {
     118        Map<String, RoleInfo> map = buildRoleInfoMap(n);
     119        if (map.isEmpty()) {
     120            errors.add(TestError.builder(this, Severity.ERROR, RELATION_EMPTY)
     121                    .message(tr("Relation is empty"))
     122                    .primitives(n)
     123                    .build());
     124        }
     125        if (ignoreMultiPolygons && n.isMultipolygon()) {
     126            // see #17010: don't report same problem twice
     127            return;
     128        }
    103129        Map<Role, String> allroles = buildAllRoles(n);
    104130        if (allroles.isEmpty() && n.hasTag("type", "route")
     
    115141        }
    116142
    117         Map<String, RoleInfo> map = buildRoleInfoMap(n);
    118         if (map.isEmpty()) {
    119             errors.add(TestError.builder(this, Severity.ERROR, RELATION_EMPTY)
    120                     .message(tr("Relation is empty"))
    121                     .primitives(n)
    122                     .build());
    123         } else if (!allroles.isEmpty()) {
     143        if (!map.isEmpty() && !allroles.isEmpty()) {
    124144            checkRoles(n, allroles, map);
    125145        }
Note: See TracChangeset for help on using the changeset viewer.