Skip to content

Commit 2eab8b4

Browse files
committed
Iterate connections instead of duplicating thems
1 parent 33a595f commit 2eab8b4

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

visualizer/IdealGraphVisualizer/Graph/src/main/java/org/graalvm/visualizer/graph/Diagram.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,18 @@
3737
import java.util.Collections;
3838
import java.util.HashMap;
3939
import java.util.HashSet;
40+
import java.util.Iterator;
4041
import java.util.LinkedHashMap;
4142
import java.util.List;
4243
import java.util.Map;
44+
import java.util.NoSuchElementException;
4345
import java.util.Optional;
4446
import java.util.Set;
4547
import java.util.concurrent.Callable;
4648
import java.util.concurrent.locks.Lock;
4749
import java.util.concurrent.locks.ReadWriteLock;
4850
import java.util.concurrent.locks.ReentrantReadWriteLock;
51+
import java.util.function.Consumer;
4952
import java.util.stream.Stream;
5053

5154
import static jdk.graal.compiler.graphio.parsing.model.KnownPropertyNames.PROPNAME_NAME;
@@ -399,6 +402,57 @@ public InputGraph getGraph() {
399402
return graph;
400403
}
401404

405+
406+
public Iterable<Connection> iterateConnections() {
407+
return new Iterable<>() {
408+
@Override
409+
public Iterator<Connection> iterator() {
410+
return new Iterator<>() {
411+
412+
final Iterator<Figure> figureMapIterator = figureMap.values().iterator();
413+
Iterator<InputSlot> inputSlotIterator = Collections.emptyIterator();
414+
Iterator<Connection> connectionIterator = Collections.emptyIterator();
415+
416+
@Override
417+
public boolean hasNext() {
418+
while (true) {
419+
if (connectionIterator.hasNext()) {
420+
return true;
421+
}
422+
if (inputSlotIterator.hasNext()) {
423+
connectionIterator = inputSlotIterator.next().getConnections().iterator();
424+
continue;
425+
}
426+
if (figureMapIterator.hasNext()) {
427+
inputSlotIterator = figureMapIterator.next().getInputSlots().iterator();
428+
continue;
429+
}
430+
return false;
431+
}
432+
}
433+
434+
@Override
435+
public Connection next() {
436+
if (!hasNext()) {
437+
throw new NoSuchElementException();
438+
}
439+
return connectionIterator.next();
440+
}
441+
442+
@Override
443+
public void remove() {
444+
throw new UnsupportedOperationException();
445+
}
446+
447+
@Override
448+
public void forEachRemaining(Consumer<? super Connection> action) {
449+
throw new UnsupportedOperationException();
450+
}
451+
};
452+
}
453+
};
454+
}
455+
402456
public Set<Connection> getConnections() {
403457

404458
Set<Connection> connections = new HashSet<>();

visualizer/IdealGraphVisualizer/View/src/main/java/org/graalvm/visualizer/view/impl/DiagramCacheTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ protected void execute() {
314314
figures.add(f);
315315
}
316316
}
317-
for (Connection c : outputDiagram.getConnections()) {
317+
for (Connection c : outputDiagram.iterateConnections()) {
318318
Figure f1 = c.getOutputSlot().getFigure();
319319
Figure f2 = c.getInputSlot().getFigure();
320320
if (f1.isVisible() && f2.isVisible()) {

0 commit comments

Comments
 (0)