Ignore:
Timestamp:
2018-05-21T20:42:27+02:00 (6 years ago)
Author:
Don-vip
Message:

support rendering of IPrimitive

Location:
trunk/src/org/openstreetmap/josm/gui/mappaint
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java

    r13636 r13810  
    1212import java.util.Optional;
    1313
     14import org.openstreetmap.josm.data.osm.IPrimitive;
    1415import org.openstreetmap.josm.data.osm.Node;
    15 import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1616import org.openstreetmap.josm.data.osm.Relation;
    1717import org.openstreetmap.josm.data.osm.Way;
     
    4545 * There are several steps to derive the list of elements for display:
    4646 * <ol>
    47  * <li>{@link #generateStyles(OsmPrimitive, double, boolean)} applies the
     47 * <li>{@link #generateStyles(IPrimitive, double, boolean)} applies the
    4848 * {@link StyleSource}s one after another to get a key-value map of MapCSS
    4949 * properties. Then a preliminary set of StyleElements is derived from the
    5050 * properties map.</li>
    51  * <li>{@link #getImpl(OsmPrimitive, double, NavigatableComponent)} handles the
     51 * <li>{@link #getImpl(IPrimitive, double, NavigatableComponent)} handles the
    5252 * different forms of multipolygon tagging.</li>
    53  * <li>{@link #getStyleCacheWithRange(OsmPrimitive, double, NavigatableComponent)}
     53 * <li>{@link #getStyleCacheWithRange(IPrimitive, double, NavigatableComponent)}
    5454 * adds a default StyleElement for primitives that would be invisible otherwise.
    5555 * (For example untagged nodes and ways.)</li>
     
    131131     * @param nc display component
    132132     * @return list of styles
    133      */
    134     public StyleElementList get(OsmPrimitive osm, double scale, NavigatableComponent nc) {
     133     * @since 13810 (signature)
     134     */
     135    public StyleElementList get(IPrimitive osm, double scale, NavigatableComponent nc) {
    135136        return getStyleCacheWithRange(osm, scale, nc).a;
    136137    }
     
    145146     * @param nc navigatable component
    146147     * @return pair containing style list and range
    147      */
    148     public Pair<StyleElementList, Range> getStyleCacheWithRange(OsmPrimitive osm, double scale, NavigatableComponent nc) {
     148     * @since 13810 (signature)
     149     */
     150    public Pair<StyleElementList, Range> getStyleCacheWithRange(IPrimitive osm, double scale, NavigatableComponent nc) {
    149151        if (!osm.isCachedStyleUpToDate() || scale <= 0) {
    150152            osm.setCachedStyle(StyleCache.EMPTY_STYLECACHE);
     
    232234     * @return pair containing style list and range
    233235     */
    234     private Pair<StyleElementList, Range> getImpl(OsmPrimitive osm, double scale, NavigatableComponent nc) {
     236    private Pair<StyleElementList, Range> getImpl(IPrimitive osm, double scale, NavigatableComponent nc) {
    235237        if (osm instanceof Node)
    236238            return generateStyles(osm, scale, false);
     
    242244
    243245            // FIXME: Maybe in the future outer way styles apply to outers ignoring the multipolygon?
    244             for (OsmPrimitive referrer : osm.getReferrers()) {
     246            for (IPrimitive referrer : osm.getReferrers()) {
    245247                Relation r = (Relation) referrer;
    246248                if (!drawMultipolygon || !r.isMultipolygon() || !r.isUsable()) {
     
    310312            if (!isDefaultLines()) return p;
    311313
    312             for (OsmPrimitive referrer : osm.getReferrers()) {
     314            for (IPrimitive referrer : osm.getReferrers()) {
    313315                Relation ref = (Relation) referrer;
    314316                if (!drawMultipolygon || !ref.isMultipolygon() || !ref.isUsable()) {
     
    362364     * outer ways of a multipolygon.
    363365     * @return the generated styles and the valid range as a pair
    364      */
    365     public Pair<StyleElementList, Range> generateStyles(OsmPrimitive osm, double scale, boolean pretendWayIsClosed) {
     366     * @since 13810 (signature)
     367     */
     368    public Pair<StyleElementList, Range> generateStyles(IPrimitive osm, double scale, boolean pretendWayIsClosed) {
    366369
    367370        List<StyleElement> sl = new ArrayList<>();
     
    522525     * outer ways of a multipolygon.
    523526     * @return first AreaElement found or {@code null}.
    524      */
    525     public static AreaElement getAreaElemStyle(OsmPrimitive p, boolean pretendWayIsClosed) {
     527     * @since 13810 (signature)
     528     */
     529    public static AreaElement getAreaElemStyle(IPrimitive p, boolean pretendWayIsClosed) {
    526530        MapCSSStyleSource.STYLE_SOURCE_LOCK.readLock().lock();
    527531        try {
     
    545549     * outer ways of a multipolygon.
    546550     * @return {@code true} if primitive has an AreaElement
    547      */
    548     public static boolean hasAreaElemStyle(OsmPrimitive p, boolean pretendWayIsClosed) {
     551     * @since 13810 (signature)
     552     */
     553    public static boolean hasAreaElemStyle(IPrimitive p, boolean pretendWayIsClosed) {
    549554        return getAreaElemStyle(p, pretendWayIsClosed) != null;
    550555    }
     
    558563     * @return {@code true} if primitive has area elements, but no line elements
    559564     * @since 12700
    560      */
    561     public static boolean hasOnlyAreaElements(OsmPrimitive p) {
     565     * @since 13810 (signature)
     566     */
     567    public static boolean hasOnlyAreaElements(IPrimitive p) {
    562568        MapCSSStyleSource.STYLE_SOURCE_LOCK.readLock().lock();
    563569        try {
  • trunk/src/org/openstreetmap/josm/gui/mappaint/Environment.java

    r12378 r13810  
    22package org.openstreetmap.josm.gui.mappaint;
    33
    4 import org.openstreetmap.josm.data.osm.OsmPrimitive;
     4import org.openstreetmap.josm.data.osm.IPrimitive;
    55import org.openstreetmap.josm.data.osm.Relation;
    66import org.openstreetmap.josm.gui.mappaint.mapcss.Condition.Context;
     
    1818     * The primitive that is currently evaluated
    1919     */
    20     public OsmPrimitive osm;
     20    public IPrimitive osm;
    2121
    2222    /**
     
    4343     * is evaluated in a {@link LinkSelector} (within a child selector)
    4444     */
    45     public OsmPrimitive parent;
     45    public IPrimitive parent;
    4646
    4747    /**
    4848     * The same for parent selector. Only one of the 2 fields (parent or child) is not null in any environment.
    4949     */
    50     public OsmPrimitive child;
     50    public IPrimitive child;
    5151
    5252    /**
     
    7171     * @param osm OSM primitive
    7272     * @since 8415
    73      */
    74     public Environment(OsmPrimitive osm) {
     73     * @since 13810 (signature)
     74     */
     75    public Environment(IPrimitive osm) {
    7576        this.osm = osm;
    7677    }
     
    8283     * @param layer layer
    8384     * @param source style source
    84      */
    85     public Environment(OsmPrimitive osm, MultiCascade mc, String layer, StyleSource source) {
     85     * @since 13810 (signature)
     86     */
     87    public Environment(IPrimitive osm, MultiCascade mc, String layer, StyleSource source) {
    8688        this.osm = osm;
    8789        this.mc = mc;
     
    114116     * @return A clone of this environment, with the specified primitive
    115117     * @see #osm
    116      */
    117     public Environment withPrimitive(OsmPrimitive osm) {
     118     * @since 13810 (signature)
     119     */
     120    public Environment withPrimitive(IPrimitive osm) {
    118121        Environment e = new Environment(this);
    119122        e.osm = osm;
     
    126129     * @return A clone of this environment, with the specified parent
    127130     * @see #parent
    128      */
    129     public Environment withParent(OsmPrimitive parent) {
     131     * @since 13810 (signature)
     132     */
     133    public Environment withParent(IPrimitive parent) {
    130134        Environment e = new Environment(this);
    131135        e.parent = parent;
     
    142146     * @see #index
    143147     * @since 6175
    144      */
    145     public Environment withParentAndIndexAndLinkContext(OsmPrimitive parent, int index, int count) {
     148     * @since 13810 (signature)
     149     */
     150    public Environment withParentAndIndexAndLinkContext(IPrimitive parent, int index, int count) {
    146151        Environment e = new Environment(this);
    147152        e.parent = parent;
     
    157162     * @return A clone of this environment, with the specified child
    158163     * @see #child
    159      */
    160     public Environment withChild(OsmPrimitive child) {
     164     * @since 13810 (signature)
     165     */
     166    public Environment withChild(IPrimitive child) {
    161167        Environment e = new Environment(this);
    162168        e.child = child;
     
    173179     * @see #index
    174180     * @since 6175
    175      */
    176     public Environment withChildAndIndexAndLinkContext(OsmPrimitive child, int index, int count) {
     181     * @since 13810 (signature)
     182     */
     183    public Environment withChildAndIndexAndLinkContext(IPrimitive child, int index, int count) {
    177184        Environment e = new Environment(this);
    178185        e.child = child;
  • trunk/src/org/openstreetmap/josm/gui/mappaint/StyleSource.java

    r13647 r13810  
    2020import javax.swing.ImageIcon;
    2121
    22 import org.openstreetmap.josm.data.osm.OsmPrimitive;
     22import org.openstreetmap.josm.data.osm.IPrimitive;
    2323import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
    2424import org.openstreetmap.josm.data.preferences.sources.SourceType;
     
    9494     * we pretend it is. This is useful for generating area styles from the (segmented)
    9595     * outer ways of a multipolygon.
    96      */
    97     public abstract void apply(MultiCascade mc, OsmPrimitive osm, double scale, boolean pretendWayIsClosed);
     96     * @since 13810 (signature)
     97     */
     98    public abstract void apply(MultiCascade mc, IPrimitive osm, double scale, boolean pretendWayIsClosed);
    9899
    99100    /**
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ConditionFactory.java

    r13046 r13810  
    1515import java.util.regex.PatternSyntaxException;
    1616
     17import org.openstreetmap.josm.data.osm.IPrimitive;
    1718import org.openstreetmap.josm.data.osm.Node;
    1819import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    681682         * @param e MapCSS environment
    682683         * @return {@code true} if the object has an area style
    683          * @see ElemStyles#hasAreaElemStyle(OsmPrimitive, boolean)
     684         * @see ElemStyles#hasAreaElemStyle(IPrimitive, boolean)
    684685         */
    685686        static boolean areaStyle(Environment e) { // NO_UCD (unused code)
     
    749750         */
    750751        static boolean inDownloadedArea(Environment e) { // NO_UCD (unused code)
    751             return IN_DOWNLOADED_AREA.test(e.osm);
     752            return e.osm instanceof OsmPrimitive && IN_DOWNLOADED_AREA.test((OsmPrimitive) e.osm);
    752753        }
    753754
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java

    r13640 r13810  
    460460                if (env.osm != null) {
    461461                    // we don't have a matched parent, so just search all referrers
    462                     for (OsmPrimitive parent : env.osm.getReferrers()) {
     462                    for (IPrimitive parent : env.osm.getReferrers()) {
    463463                        String value = parent.get(key);
    464464                        if (value != null) {
     
    485485                    final Collection<String> tags = new TreeSet<>(AlphanumComparator.getInstance());
    486486                    // we don't have a matched parent, so just search all referrers
    487                     for (OsmPrimitive parent : env.osm.getReferrers()) {
     487                    for (IPrimitive parent : env.osm.getReferrers()) {
    488488                        String value = parent.get(key);
    489489                        if (value != null) {
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java

    r13800 r13810  
    3030
    3131import org.openstreetmap.josm.data.Version;
     32import org.openstreetmap.josm.data.osm.IPrimitive;
    3233import org.openstreetmap.josm.data.osm.KeyValueVisitor;
    3334import org.openstreetmap.josm.data.osm.Node;
     
    357358         * @param osm the primitive to match
    358359         * @return An iterator over possible rules in the right order.
    359          */
    360         public Iterator<MapCSSRule> getRuleCandidates(OsmPrimitive osm) {
     360         * @since 13810 (signature)
     361         */
     362        public Iterator<MapCSSRule> getRuleCandidates(IPrimitive osm) {
    361363            final BitSet ruleCandidates = new BitSet(rules.size());
    362364            ruleCandidates.or(remaining);
     
    638640
    639641    @Override
    640     public void apply(MultiCascade mc, OsmPrimitive osm, double scale, boolean pretendWayIsClosed) {
     642    public void apply(MultiCascade mc, IPrimitive osm, double scale, boolean pretendWayIsClosed) {
    641643        MapCSSRuleIndex matchingRuleIndex;
    642644        if (osm instanceof Node) {
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java

    r12986 r13810  
    1414import java.util.regex.PatternSyntaxException;
    1515
     16import org.openstreetmap.josm.data.osm.INode;
     17import org.openstreetmap.josm.data.osm.IPrimitive;
     18import org.openstreetmap.josm.data.osm.IRelation;
     19import org.openstreetmap.josm.data.osm.IRelationMember;
     20import org.openstreetmap.josm.data.osm.IWay;
    1621import org.openstreetmap.josm.data.osm.Node;
    1722import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    1924import org.openstreetmap.josm.data.osm.OsmUtils;
    2025import org.openstreetmap.josm.data.osm.Relation;
    21 import org.openstreetmap.josm.data.osm.RelationMember;
    2226import org.openstreetmap.josm.data.osm.Way;
    23 import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
     27import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
    2428import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache;
    2529import org.openstreetmap.josm.gui.mappaint.Environment;
     
    145149         *
    146150         */
    147         private class MatchingReferrerFinder implements OsmPrimitiveVisitor {
     151        private class MatchingReferrerFinder implements PrimitiveVisitor {
    148152            private final Environment e;
    149153
     
    157161
    158162            @Override
    159             public void visit(Node n) {
     163            public void visit(INode n) {
    160164                // node should never be a referrer
    161165                throw new AssertionError();
    162166            }
    163167
    164             private <T extends OsmPrimitive> void doVisit(T parent, IntSupplier counter, IntFunction<OsmPrimitive> getter) {
     168            private <T extends IPrimitive> void doVisit(T parent, IntSupplier counter, IntFunction<IPrimitive> getter) {
    165169                // If e.parent is already set to the first matching referrer.
    166170                // We skip any following referrer injected into the visitor.
     
    187191
    188192            @Override
    189             public void visit(Way w) {
     193            public void visit(IWay<?> w) {
    190194                doVisit(w, w::getNodesCount, w::getNode);
    191195            }
    192196
    193197            @Override
    194             public void visit(Relation r) {
     198            public void visit(IRelation<?> r) {
    195199                doVisit(r, r::getMembersCount, i -> r.getMember(i).getMember());
    196200            }
    197201        }
    198202
    199         private abstract static class AbstractFinder implements OsmPrimitiveVisitor {
     203        private abstract static class AbstractFinder implements PrimitiveVisitor {
    200204            protected final Environment e;
    201205
     
    205209
    206210            @Override
    207             public void visit(Node n) {
    208             }
    209 
    210             @Override
    211             public void visit(Way w) {
    212             }
    213 
    214             @Override
    215             public void visit(Relation r) {
    216             }
    217 
    218             public void visit(Collection<? extends OsmPrimitive> primitives) {
    219                 for (OsmPrimitive p : primitives) {
     211            public void visit(INode n) {
     212            }
     213
     214            @Override
     215            public void visit(IWay<?> w) {
     216            }
     217
     218            @Override
     219            public void visit(IRelation<?> r) {
     220            }
     221
     222            public void visit(Collection<? extends IPrimitive> primitives) {
     223                for (IPrimitive p : primitives) {
    220224                    if (e.child != null) {
    221225                        // abort if first match has been found
     
    227231            }
    228232
    229             public boolean isPrimitiveUsable(OsmPrimitive p) {
     233            public boolean isPrimitiveUsable(IPrimitive p) {
    230234                return !e.osm.equals(p) && p.isUsable();
    231235            }
     
    235239
    236240            @Override
    237             public void visit(Way w) {
     241            public void visit(IWay<?> w) {
    238242                w.visitReferrers(innerVisitor);
    239243            }
     
    243247            }
    244248
    245             private final OsmPrimitiveVisitor innerVisitor = new AbstractFinder(e) {
     249            private final PrimitiveVisitor innerVisitor = new AbstractFinder(e) {
    246250                @Override
    247                 public void visit(Relation r) {
    248                     if (left.matches(e.withPrimitive(r))) {
    249                         final List<Node> openEnds = MultipolygonCache.getInstance().get(r).getOpenEnds();
     251                public void visit(IRelation<?> r) {
     252                    if (r instanceof Relation && left.matches(e.withPrimitive(r))) {
     253                        final List<Node> openEnds = MultipolygonCache.getInstance().get((Relation) r).getOpenEnds();
    250254                        final int openEndIndex = openEnds.indexOf(e.osm);
    251255                        if (openEndIndex >= 0) {
     
    265269            private CrossingFinder(Environment e) {
    266270                super(e);
    267                 CheckParameterUtil.ensureThat(e.osm instanceof Way, "Only ways are supported");
     271                CheckParameterUtil.ensureThat(e.osm instanceof IWay, "Only ways are supported");
    268272                layer = OsmUtils.getLayer(e.osm);
    269273            }
    270274
    271275            @Override
    272             public void visit(Way w) {
     276            public void visit(IWay<?> w) {
    273277                if (e.child == null && Objects.equals(layer, OsmUtils.getLayer(w))
    274278                    && left.matches(new Environment(w).withParent(e.osm))
    275                     && e.osm instanceof Way && Geometry.PolygonIntersection.CROSSING.equals(
     279                    && e.osm instanceof IWay && Geometry.PolygonIntersection.CROSSING.equals(
    276280                            Geometry.polygonIntersection(w.getNodes(), ((Way) e.osm).getNodes()))) {
    277281                    e.child = w;
     
    283287            protected ContainsFinder(Environment e) {
    284288                super(e);
    285                 CheckParameterUtil.ensureThat(!(e.osm instanceof Node), "Nodes not supported");
    286             }
    287 
    288             @Override
    289             public void visit(Node n) {
     289                CheckParameterUtil.ensureThat(!(e.osm instanceof INode), "Nodes not supported");
     290            }
     291
     292            @Override
     293            public void visit(INode n) {
    290294                if (e.child == null && left.matches(new Environment(n).withParent(e.osm))
    291                     && ((e.osm instanceof Way && Geometry.nodeInsidePolygon(n, ((Way) e.osm).getNodes()))
     295                    && ((e.osm instanceof IWay && Geometry.nodeInsidePolygon(n, ((Way) e.osm).getNodes()))
    292296                            || (e.osm instanceof Relation && (
    293297                                    (Relation) e.osm).isMultipolygon() && Geometry.isNodeInsideMultiPolygon(n, (Relation) e.osm, null)))) {
     
    297301
    298302            @Override
    299             public void visit(Way w) {
     303            public void visit(IWay<?> w) {
    300304                if (e.child == null && left.matches(new Environment(w).withParent(e.osm))
    301                     && ((e.osm instanceof Way && Geometry.PolygonIntersection.FIRST_INSIDE_SECOND.equals(
     305                    && ((e.osm instanceof IWay && Geometry.PolygonIntersection.FIRST_INSIDE_SECOND.equals(
    302306                            Geometry.polygonIntersection(w.getNodes(), ((Way) e.osm).getNodes())))
    303307                            || (e.osm instanceof Relation && (
     
    317321            if (ChildOrParentSelectorType.ELEMENT_OF.equals(type)) {
    318322
    319                 if (e.osm instanceof Node || e.osm.getDataSet() == null) {
     323                if (e.osm instanceof INode || e.osm.getDataSet() == null) {
    320324                    // nodes cannot contain elements
    321325                    return false;
     
    326330                    // if right selector also matches relations and if matched primitive is a way which is part of a multipolygon,
    327331                    // use the multipolygon for further analysis
    328                     if (!(e.osm instanceof Way)
     332                    if (!(e.osm instanceof IWay)
    329333                            || (right instanceof OptimizedGeneralSelector
    330334                            && !((OptimizedGeneralSelector) right).matchesBase(OsmPrimitiveType.RELATION))) {
     
    338342                    containsFinder = new ContainsFinder(new Environment(multipolygon)) {
    339343                        @Override
    340                         public boolean isPrimitiveUsable(OsmPrimitive p) {
     344                        public boolean isPrimitiveUsable(IPrimitive p) {
    341345                            return super.isPrimitiveUsable(p) && !members.contains(p);
    342346                        }
     
    362366                return e.child != null;
    363367
    364             } else if (ChildOrParentSelectorType.CROSSING.equals(type) && e.osm instanceof Way) {
     368            } else if (ChildOrParentSelectorType.CROSSING.equals(type) && e.osm instanceof IWay) {
    365369                e.parent = e.osm;
    366370                final CrossingFinder crossingFinder = new CrossingFinder(e);
     
    371375                return e.child != null;
    372376            } else if (ChildOrParentSelectorType.SIBLING.equals(type)) {
    373                 if (e.osm instanceof Node) {
    374                     for (Way w : Utils.filteredCollection(e.osm.getReferrers(true), Way.class)) {
    375                         final int i = w.getNodes().indexOf(e.osm);
    376                         if (i - 1 >= 0) {
    377                             final Node n = w.getNode(i - 1);
    378                             final Environment e2 = e.withPrimitive(n).withParent(w).withChild(e.osm);
    379                             if (left.matches(e2) && link.matches(e2.withLinkContext())) {
    380                                 e.child = n;
    381                                 e.index = i;
    382                                 e.count = w.getNodesCount();
    383                                 e.parent = w;
    384                                 return true;
     377                if (e.osm instanceof INode) {
     378                    for (IPrimitive ref : e.osm.getReferrers(true)) {
     379                        if (ref instanceof IWay) {
     380                            IWay<?> w = (IWay<?>) ref;
     381                            final int i = w.getNodes().indexOf(e.osm);
     382                            if (i - 1 >= 0) {
     383                                final INode n = w.getNode(i - 1);
     384                                final Environment e2 = e.withPrimitive(n).withParent(w).withChild(e.osm);
     385                                if (left.matches(e2) && link.matches(e2.withLinkContext())) {
     386                                    e.child = n;
     387                                    e.index = i;
     388                                    e.count = w.getNodesCount();
     389                                    e.parent = w;
     390                                    return true;
     391                                }
    385392                            }
    386393                        }
     
    390397                    && link.conds != null && !link.conds.isEmpty()
    391398                    && link.conds.get(0) instanceof OpenEndPseudoClassCondition) {
    392                 if (e.osm instanceof Node) {
     399                if (e.osm instanceof INode) {
    393400                    e.osm.visitReferrers(new MultipolygonOpenEndFinder(e));
    394401                    return e.parent != null;
     
    400407                    return true;
    401408            } else if (ChildOrParentSelectorType.PARENT.equals(type)) {
    402                 if (e.osm instanceof Way) {
    403                     List<Node> wayNodes = ((Way) e.osm).getNodes();
     409                if (e.osm instanceof IWay) {
     410                    List<? extends INode> wayNodes = ((IWay<?>) e.osm).getNodes();
    404411                    for (int i = 0; i < wayNodes.size(); i++) {
    405                         Node n = wayNodes.get(i);
     412                        INode n = wayNodes.get(i);
    406413                        if (left.matches(e.withPrimitive(n))
    407414                            && link.matches(e.withChildAndIndexAndLinkContext(n, i, wayNodes.size()))) {
     
    412419                        }
    413420                    }
    414                 } else if (e.osm instanceof Relation) {
    415                     List<RelationMember> members = ((Relation) e.osm).getMembers();
     421                } else if (e.osm instanceof IRelation) {
     422                    List<? extends IRelationMember<?>> members = ((IRelation<?>) e.osm).getMembers();
    416423                    for (int i = 0; i < members.size(); i++) {
    417                         OsmPrimitive member = members.get(i).getMember();
     424                        IPrimitive member = members.get(i).getMember();
    418425                        if (left.matches(e.withPrimitive(member))
    419426                            && link.matches(e.withChildAndIndexAndLinkContext(member, i, members.size()))) {
     
    624631        }
    625632
    626         public boolean matchesBase(OsmPrimitive p) {
     633        public boolean matchesBase(IPrimitive p) {
    627634            if (!matchesBase(p.getType())) {
    628635                return false;
    629636            } else {
    630                 if (p instanceof Relation) {
     637                if (p instanceof IRelation) {
    631638                    if ("area".equals(base)) {
    632                         return ((Relation) p).isMultipolygon();
     639                        return ((IRelation<?>) p).isMultipolygon();
    633640                    } else if ("canvas".equals(base)) {
    634641                        return p.get("#canvas") != null;
Note: See TracChangeset for help on using the changeset viewer.