From b47e141000bd61428d6f25dcedc751ef43ede3c9 Mon Sep 17 00:00:00 2001
From: Jiri Hubacek <jiri.hubacek@gmail.com>
Date: Sun, 23 Sep 2018 13:20:17 +0200
Subject: [PATCH 2/2] Remove right selector iteration when ELEMENT_OF

---
 .../josm/gui/mappaint/mapcss/Selector.java         | 49 +---------------------
 1 file changed, 1 insertion(+), 48 deletions(-)

diff --git src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
index 3edcc7d95..8f6c9a7f3 100644
--- src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
+++ src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
@@ -339,54 +339,7 @@ public interface Selector {
             if (!right.matches(e))
                 return false;
 
-            if (ChildOrParentSelectorType.ELEMENT_OF == type) {
-/*
-                if (e.osm instanceof INode || e.osm.getDataSet() == null) {
-                    // nodes cannot contain elements
-                    return false;
-                }
-
-                ContainsFinder containsFinder;
-                try {
-                    // if right selector also matches relations and if matched primitive is a way which is part of a multipolygon,
-                    // use the multipolygon for further analysis
-                    if (!(e.osm instanceof IWay)
-                            || (right instanceof OptimizedGeneralSelector
-                            && !((OptimizedGeneralSelector) right).matchesBase(OsmPrimitiveType.RELATION))) {
-                        throw new NoSuchElementException();
-                    }
-                    final Collection<Relation> multipolygons = Utils.filteredCollection(SubclassFilteredCollection.filter(
-                            e.osm.getReferrers(), p -> p.hasTag("type", "multipolygon")), Relation.class);
-                    final Relation multipolygon = multipolygons.iterator().next();
-                    if (multipolygon == null) throw new NoSuchElementException();
-                    final Set<OsmPrimitive> members = multipolygon.getMemberPrimitives();
-                    containsFinder = new ContainsFinder(new Environment(multipolygon)) {
-                        @Override
-                        public boolean isPrimitiveUsable(IPrimitive p) {
-                            return super.isPrimitiveUsable(p) && !members.contains(p);
-                        }
-                    };
-                } catch (NoSuchElementException ignore) {
-                    Logging.trace(ignore);
-                    containsFinder = new ContainsFinder(e);
-                }
-                e.parent = e.osm;
-
-                if (left instanceof OptimizedGeneralSelector) {
-                    if (((OptimizedGeneralSelector) left).matchesBase(OsmPrimitiveType.NODE)) {
-                        containsFinder.visit(e.osm.getDataSet().searchNodes(e.osm.getBBox()));
-                    }
-                    if (((OptimizedGeneralSelector) left).matchesBase(OsmPrimitiveType.WAY)) {
-                        containsFinder.visit(e.osm.getDataSet().searchWays(e.osm.getBBox()));
-                    }
-                } else {
-                    // use slow test
-                    containsFinder.visit(e.osm.getDataSet().allPrimitives());
-                }
-
-                return e.child != null;
-*/
-            } else if (ChildOrParentSelectorType.CROSSING == type && e.osm instanceof IWay) {
+            if (ChildOrParentSelectorType.CROSSING == type && e.osm instanceof IWay) {
                 e.parent = e.osm;
                 final CrossingFinder crossingFinder = new CrossingFinder(e);
                 if (right instanceof OptimizedGeneralSelector
-- 
2.11.0

