Ticket #14287: 14287.patch

File 14287.patch, 5.0 KB (added by GerdP, 2 years ago)
  • src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java

     
    747747                final List<OsmPrimitive> primitives;
    748748                if (env.child instanceof OsmPrimitive) {
    749749                    primitives = Arrays.asList(p, (OsmPrimitive) env.child);
     750                } else if (env.children != null) {
     751                    primitives = new ArrayList<>();
     752                    primitives.add(p);
     753                    env.children.forEach(c -> primitives.add((OsmPrimitive) c));
    750754                } else {
    751755                    primitives = Collections.singletonList(p);
    752756                }
  • src/org/openstreetmap/josm/gui/mappaint/Environment.java

     
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.gui.mappaint;
    33
     4import java.util.LinkedHashSet;
     5import java.util.Set;
     6
    47import org.openstreetmap.josm.data.osm.IPrimitive;
    58import org.openstreetmap.josm.data.osm.Relation;
    69import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.Context;
     
    6063    public Integer count;
    6164
    6265    /**
     66     * Set of matched children filled by ContainsFinder and CrossingFinder, null if nothing matched
     67     */
     68    public Set<IPrimitive> children;
     69
     70    /**
    6371     * Creates a new uninitialized environment.
    6472     */
    6573    public Environment() {
     
    108116        this.index = other.index;
    109117        this.count = other.count;
    110118        this.context = other.getContext();
     119        this.children = other.children == null ? null : new LinkedHashSet<>(other.children);
    111120    }
    112121
    113122    /**
  • src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java

     
    66import java.text.MessageFormat;
    77import java.util.Collection;
    88import java.util.Collections;
     9import java.util.LinkedHashSet;
    910import java.util.List;
    1011import java.util.NoSuchElementException;
    1112import java.util.Objects;
     
    302303                    && left.matches(new Environment(w).withParent(e.osm))
    303304                    && e.osm instanceof IWay && Geometry.PolygonIntersection.CROSSING.equals(
    304305                            Geometry.polygonIntersection(w.getNodes(), ((IWay<?>) e.osm).getNodes()))) {
    305                     e.child = w;
     306                    if (e.children == null) {
     307                        e.children = new LinkedHashSet<>();
     308                    }
     309                    e.children.add(w);
    306310                }
    307311            }
    308312        }
     
    319323                    && ((e.osm instanceof IWay && Geometry.nodeInsidePolygon(n, ((IWay<?>) e.osm).getNodes()))
    320324                            || (e.osm instanceof Relation && (
    321325                                    (Relation) e.osm).isMultipolygon() && Geometry.isNodeInsideMultiPolygon(n, (Relation) e.osm, null)))) {
    322                     e.child = n;
     326                    addChild(e, n);
    323327                }
    324328            }
    325329
     
    331335                            || (e.osm instanceof Relation && (
    332336                                    (Relation) e.osm).isMultipolygon()
    333337                                    && Geometry.isPolygonInsideMultiPolygon(w.getNodes(), (Relation) e.osm, null)))) {
    334                     e.child = w;
     338                    addChild(e, w);
    335339                }
    336340            }
     341            private void addChild(Environment e, IPrimitive p) {
     342                if (e.children == null) {
     343                    e.children = new LinkedHashSet<>();
     344                }
     345                e.children.add(p);
     346            }
    337347        }
    338348
    339349        @Override
     
    387397                    containsFinder.visit(e.osm.getDataSet().allPrimitives());
    388398                }
    389399
    390                 return e.child != null;
     400                return e.children != null;
    391401
    392402            } else if (ChildOrParentSelectorType.CROSSING == type && e.osm instanceof IWay) {
    393403                e.parent = e.osm;
     
    396406                        && ((OptimizedGeneralSelector) right).matchesBase(OsmPrimitiveType.WAY)) {
    397407                    crossingFinder.visit(e.osm.getDataSet().searchWays(e.osm.getBBox()));
    398408                }
    399                 return e.child != null;
     409                return e.children != null;
    400410            } else if (ChildOrParentSelectorType.SIBLING == type) {
    401411                if (e.osm instanceof INode) {
    402412                    for (IPrimitive ref : e.osm.getReferrers(true)) {