From 61b9660b49c3e3d888b9ee7a74e122ffea876cdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 9 Jan 2021 15:00:20 +0100 Subject: [PATCH] GraphTargetVisitorInterface for visiting model --- .../decompiler/graph/GraphTargetItem.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java index b3e590f6d..ec0cce224 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java @@ -501,6 +501,19 @@ public abstract class GraphTargetItem implements Serializable, Cloneable { public List getAllSubItems() { List ret = new ArrayList<>(); visit(new AbstractGraphTargetVisitor() { + @Override + public void visit(GraphTargetItem item) { + if (item != null) { + ret.add(item); + } + } + }); + return ret; + } + + public Set getAllSubItemsRecursively() { + Set ret = new HashSet<>(); + visitRecursively(new AbstractGraphTargetVisitor() { @Override public void visit(GraphTargetItem item) { ret.add(item); @@ -509,6 +522,20 @@ public abstract class GraphTargetItem implements Serializable, Cloneable { return ret; } + public final void visitRecursively(GraphTargetVisitorInterface visitor) { + Set visitedItems = new HashSet<>(); + visit(new AbstractGraphTargetVisitor() { + @Override + public void visit(GraphTargetItem item) { + if (item != null && !visitedItems.contains(item)) { + visitedItems.add(item); + visitor.visit(item); + item.visit(this); + } + } + }); + } + public void visit(GraphTargetVisitorInterface visitor) { if (value != null) { visitor.visit(value);