Skip to content

Commit d1deaaa

Browse files
committed
fixed issue with cast-cast exceptions with edge iterators
1 parent 63c09be commit d1deaaa

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

store/src/main/java/org/gephi/graph/impl/HierarchicalGraphDecorator.java

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)