Ticket #17695: 17695-v2.patch

File 17695-v2.patch, 2.1 KB (added by GerdP, 5 years ago)
  • src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java

     
    6969import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource.MapCSSRuleIndex;
    7070import org.openstreetmap.josm.gui.mappaint.mapcss.Selector;
    7171import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.AbstractSelector;
     72import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.ChildOrParentSelector;
     73import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.ChildOrParentSelectorType;
    7274import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.GeneralSelector;
    7375import org.openstreetmap.josm.gui.mappaint.mapcss.Selector.OptimizedGeneralSelector;
    7476import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.MapCSSParser;
     
    854856        while (candidates.hasNext()) {
    855857            MapCSSRule r = candidates.next();
    856858            env.clearSelectorMatchingInformation();
     859            if (partialSelection && r.selector instanceof Selector.ChildOrParentSelector) {
     860                ChildOrParentSelector sel = (Selector.ChildOrParentSelector) r.selector;
     861                if (sel.type == ChildOrParentSelectorType.ELEMENT_OF && p.getDataSet() != null) {
     862                    List<OsmPrimitive> toCheck = new ArrayList<>();
     863                    toCheck.addAll(p.getDataSet().searchWays(p.getBBox()));
     864                    toCheck.addAll(p.getDataSet().searchRelations(p.getBBox()));
     865                    toCheck.removeIf(OsmPrimitive::isSelected);
     866                    Set<Set<TagCheck>> checksCol = Collections.singleton(Collections.singleton(indexData.getCheck(r)));
     867                    toCheck.forEach(p2 -> res.addAll(getErrorsForPrimitive(p2, includeOtherSeverity, checksCol)));
     868                }
     869            }
    857870            if (r.selector.matches(env)) { // as side effect env.parent will be set (if s is a child selector)
    858871                TagCheck check = indexData.getCheck(r);
    859872                if (check != null) {