Ticket #19312: 19312-allow.complex.dependency.patch

File 19312-allow.complex.dependency.patch, 1.9 KB (added by GerdP, 6 years ago)

implement preference key validator.relation.allow.complex.dependency to disable warnings from validator or relation editor

  • src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java

     
    2424import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    2525import org.openstreetmap.josm.data.osm.Relation;
    2626import org.openstreetmap.josm.data.osm.RelationMember;
     27import org.openstreetmap.josm.data.preferences.BooleanProperty;
    2728import org.openstreetmap.josm.data.validation.OsmValidator;
    2829import org.openstreetmap.josm.data.validation.Severity;
    2930import org.openstreetmap.josm.data.validation.Test;
     
    6970    public static final int RELATION_LOOP    = 1710;
    7071    // CHECKSTYLE.ON: SingleSpaceSeparator
    7172
     73    // see 19312 comment:17
     74    private static final BooleanProperty ALLOW_COMPLEX_LOOP = new BooleanProperty("validator.relation.allow.complex.dependency", false);
     75
    7276    /**
    7377     * Error message used to group errors related to role problems.
    7478     * @since 6731
     
    404408
    405409    @Override
    406410    public void endTest() {
     411        if (Boolean.TRUE.equals(ALLOW_COMPLEX_LOOP.get())) {
     412            loops.removeIf(loop -> loop.size() > 2);
     413        }
    407414        loops.forEach(loop -> errors.add(TestError.builder(this, Severity.ERROR, RELATION_LOOP)
    408415                .message(loop.size() == 2 ? tr("Relation contains itself as a member")
    409416                        : tr("Relations generate circular dependency of parent/child elements"))
     
    464471        LinkedList<Relation> path = new LinkedList<>();
    465472        path.add(parent);
    466473        test.checkLoop(child, path);
     474        if (Boolean.TRUE.equals(ALLOW_COMPLEX_LOOP.get())) {
     475            test.loops.removeIf(loop -> loop.size() > 2);
     476        }
    467477        if (test.loops.isEmpty())
    468478            return Collections.emptyList();
    469479        else