@@ -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,12 @@ 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 .containsEdge (((MappedEdgeDecorator )pointer ).edge )) {
10961099 pointer = null ;
10971100 }
10981101 }
@@ -1115,7 +1118,7 @@ public void remove() {
11151118 private final class UndirectedEdgeViewIterator implements Iterator <Edge > {
11161119 private final Iterator <Edge > itr ;
11171120
1118- private EdgeImpl pointer ;
1121+ private Edge pointer ;
11191122
11201123 public UndirectedEdgeViewIterator (Iterator <Edge > itr ) {
11211124 this .itr = itr ;
@@ -1124,11 +1127,19 @@ public UndirectedEdgeViewIterator(Iterator<Edge> itr) {
11241127 @ Override
11251128 public boolean hasNext () {
11261129 pointer = null ;
1127- while (pointer == null || ! view . containsEdge ( pointer ) || isUndirectedToIgnore ( pointer ) ) {
1130+ while (pointer == null ) {
11281131 if (!itr .hasNext ()) {
11291132 return false ;
11301133 }
1131- pointer = (EdgeImpl ) itr .next ();
1134+ pointer = itr .next ();
1135+ if (pointer != null ) {
1136+ if (pointer instanceof EdgeImpl && !view .containsEdge ((EdgeImpl )pointer ) && isUndirectedToIgnore ((EdgeImpl )pointer )) {
1137+ pointer = null ;
1138+ }
1139+ if (pointer instanceof MappedEdgeDecorator && !view .containsEdge (((MappedEdgeDecorator )pointer ).edge ) && isUndirectedToIgnore (((MappedEdgeDecorator )pointer ).edge )) {
1140+ pointer = null ;
1141+ }
1142+ }
11321143 }
11331144 return true ;
11341145 }
@@ -1200,17 +1211,21 @@ private Edge decorateEdge(final Edge edge) {
12001211 return edge ;
12011212 }
12021213
1203- return new MappedEdgeDecorator (edge , mappedSource , mappedTarget );
1214+ if (edge instanceof EdgeImpl ) {
1215+ return new MappedEdgeDecorator ((EdgeImpl )edge , mappedSource , mappedTarget );
1216+ } else {
1217+ return edge ;
1218+ }
12041219 }
12051220
12061221 protected class MappedEdgeDecorator implements Edge {
1207- private final Edge edge ;
1222+ private final EdgeImpl edge ;
12081223
12091224 private final Node source ;
12101225
12111226 private final Node target ;
12121227
1213- private MappedEdgeDecorator (final Edge edge , final Node source , final Node target ) {
1228+ private MappedEdgeDecorator (final EdgeImpl edge , final Node source , final Node target ) {
12141229 this .edge = edge ;
12151230 this .source = source ;
12161231 this .target = target ;
0 commit comments