Skip to content

Commit b929d02

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

File tree

1 file changed

+26
-9
lines changed

1 file changed

+26
-9
lines changed

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

Lines changed: 26 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,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

Comments
 (0)