@@ -1077,7 +1077,7 @@ public void remove() {
10771077 private final class EdgeViewIterator implements Iterator <Edge > {
10781078 private final Iterator <Edge > edgeIterator ;
10791079
1080- private EdgeImpl pointer ;
1080+ private Edge pointer ;
10811081
10821082 public EdgeViewIterator (Iterator <Edge > edgeIterator ) {
10831083 this .edgeIterator = edgeIterator ;
@@ -1090,9 +1090,13 @@ public boolean hasNext() {
10901090 if (!edgeIterator .hasNext ()) {
10911091 return false ;
10921092 }
1093- pointer = ( EdgeImpl ) edgeIterator .next ();
1093+ pointer = edgeIterator .next ();
10941094 if (pointer != null ) {
1095- if (!view .containsEdge (pointer )) {
1095+ if (pointer instanceof EdgeImpl && !view .containsEdge ((EdgeImpl ) pointer )) {
1096+ pointer = null ;
1097+ }
1098+ if (pointer instanceof MappedEdgeDecorator && !view
1099+ .containsEdge (((MappedEdgeDecorator ) pointer ).edge )) {
10961100 pointer = null ;
10971101 }
10981102 }
@@ -1115,7 +1119,7 @@ public void remove() {
11151119 private final class UndirectedEdgeViewIterator implements Iterator <Edge > {
11161120 private final Iterator <Edge > itr ;
11171121
1118- private EdgeImpl pointer ;
1122+ private Edge pointer ;
11191123
11201124 public UndirectedEdgeViewIterator (Iterator <Edge > itr ) {
11211125 this .itr = itr ;
@@ -1124,11 +1128,20 @@ public UndirectedEdgeViewIterator(Iterator<Edge> itr) {
11241128 @ Override
11251129 public boolean hasNext () {
11261130 pointer = null ;
1127- while (pointer == null || ! view . containsEdge ( pointer ) || isUndirectedToIgnore ( pointer ) ) {
1131+ while (pointer == null ) {
11281132 if (!itr .hasNext ()) {
11291133 return false ;
11301134 }
1131- pointer = (EdgeImpl ) itr .next ();
1135+ pointer = itr .next ();
1136+ if (pointer != null ) {
1137+ if (pointer instanceof EdgeImpl && !view .containsEdge ((EdgeImpl ) pointer ) && isUndirectedToIgnore ((EdgeImpl ) pointer )) {
1138+ pointer = null ;
1139+ }
1140+ if (pointer instanceof MappedEdgeDecorator && !view
1141+ .containsEdge (((MappedEdgeDecorator ) pointer ).edge ) && isUndirectedToIgnore (((MappedEdgeDecorator ) pointer ).edge )) {
1142+ pointer = null ;
1143+ }
1144+ }
11321145 }
11331146 return true ;
11341147 }
@@ -1200,17 +1213,21 @@ private Edge decorateEdge(final Edge edge) {
12001213 return edge ;
12011214 }
12021215
1203- return new MappedEdgeDecorator (edge , mappedSource , mappedTarget );
1216+ if (edge instanceof EdgeImpl ) {
1217+ return new MappedEdgeDecorator ((EdgeImpl ) edge , mappedSource , mappedTarget );
1218+ } else {
1219+ return edge ;
1220+ }
12041221 }
12051222
12061223 protected class MappedEdgeDecorator implements Edge {
1207- private final Edge edge ;
1224+ private final EdgeImpl edge ;
12081225
12091226 private final Node source ;
12101227
12111228 private final Node target ;
12121229
1213- private MappedEdgeDecorator (final Edge edge , final Node source , final Node target ) {
1230+ private MappedEdgeDecorator (final EdgeImpl edge , final Node source , final Node target ) {
12141231 this .edge = edge ;
12151232 this .source = source ;
12161233 this .target = target ;
0 commit comments