Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java	(revision 17800)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java	(revision 17801)
@@ -26,4 +26,5 @@
 import org.openstreetmap.josm.data.osm.IRelationMember;
 import org.openstreetmap.josm.data.osm.IWay;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.OsmUtils;
@@ -208,5 +209,5 @@
             }
 
-            private <T extends IPrimitive> void doVisit(T parent, IntSupplier counter, IntFunction<IPrimitive> getter) {
+            private void doVisit(IPrimitive parent) {
                 // If e.parent is already set to the first matching referrer.
                 // We skip any following referrer injected into the visitor.
@@ -215,5 +216,7 @@
                 if (!left.matches(e.withPrimitive(parent)))
                     return;
-                int count = counter.getAsInt();
+                int count = parent instanceof IWay<?>
+                        ? ((IWay<?>) parent).getNodesCount()
+                        : ((IRelation<?>) parent).getMembersCount();
                 if (link.getConditions().isEmpty()) {
                     // index is not needed, we can avoid the sequential search below
@@ -225,5 +228,8 @@
                 int step = firstAndLastOnly() ? count - 1 : 1;
                 for (int i = 0; i < count; i += step) {
-                    if (getter.apply(i).equals(e.osm)
+                    IPrimitive o = parent instanceof IWay<?>
+                            ? ((IWay<?>) parent).getNode(i)
+                            : ((IRelation<?>) parent).getMember(i).getMember();
+                    if (Objects.equals(o, e.osm)
                             && link.matches(e.withParentAndIndexAndLinkContext(parent, i, count))) {
                         e.parent = parent;
@@ -241,10 +247,10 @@
             @Override
             public void visit(IWay<?> w) {
-                doVisit(w, w::getNodesCount, w::getNode);
+                doVisit(w);
             }
 
             @Override
             public void visit(IRelation<?> r) {
-                doVisit(r, r::getMembersCount, i -> r.getMember(i).getMember());
+                doVisit(r);
             }
         }
