Index: trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java =================================================================== --- trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java (revision 7054) +++ trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java (revision 7055) @@ -232,4 +232,6 @@ final Tag tag = c instanceof Condition.KeyCondition ? ((Condition.KeyCondition) c).asTag() + : c instanceof Condition.SimpleKeyValueCondition + ? ((Condition.SimpleKeyValueCondition) c).asTag() : c instanceof Condition.KeyValueCondition ? ((Condition.KeyValueCondition) c).asTag() Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java =================================================================== --- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java (revision 7054) +++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java (revision 7055) @@ -29,7 +29,9 @@ switch (context) { case PRIMITIVE: - return KeyValueRegexpCondition.SUPPORTED_OPS.contains(op) && !considerValAsKey - ? new KeyValueRegexpCondition(k, v, op, false) - : new KeyValueCondition(k, v, op, considerValAsKey); + if (KeyValueRegexpCondition.SUPPORTED_OPS.contains(op) && !considerValAsKey) + return new KeyValueRegexpCondition(k, v, op, false); + if (!considerValAsKey && op.equals(Op.EQ)) + return new SimpleKeyValueCondition(k, v); + return new KeyValueCondition(k, v, op, considerValAsKey); case LINK: if (considerValAsKey) @@ -150,4 +152,28 @@ /** + * Most common case of a KeyValueCondition. + * + * Extra class for performance reasons. + */ + public static class SimpleKeyValueCondition extends Condition { + public final String k; + public final String v; + + public SimpleKeyValueCondition(String k, String v) { + this.k = k; + this.v = v; + } + + @Override + public boolean applies(Environment e) { + return v.equals(e.osm.get(k)); + } + + public Tag asTag() { + return new Tag(k, v); + } + } + + /** *
Represents a key/value condition which is either applied to a primitive.
* Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java =================================================================== --- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java (revision 7054) +++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java (revision 7055) @@ -525,4 +525,5 @@ return subpart; } + @Override public Range getRange() {