Ticket #17765: 17765.patch

File 17765.patch, 5.3 KB (added by GerdP, 5 years ago)
  • src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java

     
    2929import org.openstreetmap.josm.data.osm.WaySegment;
    3030import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon;
    3131import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon.PolyData;
    32 import org.openstreetmap.josm.data.validation.OsmValidator;
    3332import org.openstreetmap.josm.data.validation.Severity;
    3433import org.openstreetmap.josm.data.validation.Test;
    3534import org.openstreetmap.josm.data.validation.TestError;
     
    3635import org.openstreetmap.josm.gui.mappaint.ElemStyles;
    3736import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
    3837import org.openstreetmap.josm.gui.mappaint.styleelement.AreaElement;
    39 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    4038import org.openstreetmap.josm.tools.Geometry;
    4139import org.openstreetmap.josm.tools.Geometry.PolygonIntersection;
    4240import org.openstreetmap.josm.tools.Logging;
     
    6159    public static final int OUTER_STYLE_MISMATCH = 1607;
    6260    /** With the currently used mappaint style the style for inner way equals the multipolygon style */
    6361    public static final int INNER_STYLE_MISMATCH = 1608;
    64     /** Area style way is not closed */
    65     public static final int NOT_CLOSED = 1609;
     62    // no longer used: Area style way is not closed NOT_CLOSED = 1609
    6663    /** No area style for multipolygon */
    6764    public static final int NO_STYLE = 1610;
    6865    /** Multipolygon relation should be tagged with area tags and not the outer way(s) */
     
    8178    private static final int FOUND_INSIDE = 1;
    8279    private static final int FOUND_OUTSIDE = 2;
    8380
    84     private final Set<String> keysCheckedByAnotherTest = new HashSet<>();
    85 
    8681    /**
    8782     * Constructs a new {@code MultipolygonTest}.
    8883     */
     
    9287    }
    9388
    9489    @Override
    95     public void startTest(ProgressMonitor progressMonitor) {
    96         super.startTest(progressMonitor);
    97         keysCheckedByAnotherTest.clear();
    98         for (Test t : OsmValidator.getEnabledTests(false)) {
    99             if (t instanceof UnclosedWays) {
    100                 keysCheckedByAnotherTest.addAll(((UnclosedWays) t).getCheckedKeys());
    101                 break;
    102             }
    103         }
    104     }
    105 
    106     @Override
    107     public void endTest() {
    108         keysCheckedByAnotherTest.clear();
    109         super.endTest();
    110     }
    111 
    112     @Override
    113     public void visit(Way w) {
    114         if (!w.isArea() && ElemStyles.hasOnlyAreaElements(w)) {
    115             List<Node> nodes = w.getNodes();
    116             if (nodes.isEmpty()) return; // fix zero nodes bug
    117             for (String key : keysCheckedByAnotherTest) {
    118                 if (w.hasKey(key)) {
    119                     return;
    120                 }
    121             }
    122             errors.add(TestError.builder(this, Severity.WARNING, NOT_CLOSED)
    123                     .message(tr("Area style way is not closed"))
    124                     .primitives(w)
    125                     .highlight(Arrays.asList(nodes.get(0), nodes.get(nodes.size() - 1)))
    126                     .build());
    127         }
    128     }
    129 
    130     @Override
    13190    public void visit(Relation r) {
    13291        if (r.isMultipolygon() && r.getMembersCount() > 0) {
    13392            List<TestError> tmpErrors = new ArrayList<>(30);
  • src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java

     
    77import java.util.Arrays;
    88import java.util.Collections;
    99import java.util.HashSet;
     10import java.util.List;
    1011import java.util.Set;
    1112
     13import org.openstreetmap.josm.data.osm.Node;
    1214import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1315import org.openstreetmap.josm.data.osm.OsmUtils;
    1416import org.openstreetmap.josm.data.osm.Relation;
     
    1618import org.openstreetmap.josm.data.validation.Severity;
    1719import org.openstreetmap.josm.data.validation.Test;
    1820import org.openstreetmap.josm.data.validation.TestError;
     21import org.openstreetmap.josm.gui.mappaint.ElemStyles;
    1922
    2023/**
    2124 * Check area type ways for errors
     
    155158        new UnclosedWaysCheck(1110, "area:highway", marktr("area:highway type {0}")),
    156159        new UnclosedWaysBooleanCheck(1120, "building", marktr("building")),
    157160        new UnclosedWaysBooleanCheck(1130, "area",     marktr("area")),
     161        // 1131: Area style way is not closed
    158162        // CHECKSTYLE.ON: SingleSpaceSeparator
    159163    };
    160164
     
    189193                return;
    190194            }
    191195        }
     196        // code 1131: other area style ways
     197        if (ElemStyles.hasOnlyAreaElements(w)) {
     198            List<Node> nodes = w.getNodes();
     199            if (nodes.isEmpty()) return; // fix zero nodes bug
     200            errors.add(TestError.builder(this, Severity.WARNING, 1131)
     201                    .message(tr("Unclosed way"), marktr("Area style way is not closed"), new Object())
     202                    .primitives(w)
     203                    .highlight(Arrays.asList(w.firstNode(), w.lastNode()))
     204                    .build());
     205        }
    192206    }
    193207}