From bba77e5591bd8d61b13341e9d92c25a2f8544274 Mon Sep 17 00:00:00 2001 From: Moritz Eysholdt Date: Tue, 14 Jul 2015 16:32:31 +0200 Subject: [PATCH] [472592][idea] Implement DocumentationProvider Signed-off-by: Moritz Eysholdt --- .../src/org/eclipse/xtext/EcoreUtil2.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/EcoreUtil2.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/EcoreUtil2.java index f28e74cf8..fabf7efff 100644 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/EcoreUtil2.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/EcoreUtil2.java @@ -55,6 +55,7 @@ import org.eclipse.xtext.resource.DerivedStateAwareResource; import org.eclipse.xtext.util.CancelIndicator; import org.eclipse.xtext.util.Strings; +import com.google.common.collect.AbstractIterator; import com.google.common.collect.MapMaker; /** @@ -776,4 +777,31 @@ public class EcoreUtil2 extends EcoreUtil { } }).iterator(); } + + + /** + * Returns an Iterable that iterates over all containers of this EObject, from leaf to root. The obj + * itself is not included. + * + * @since 2.9 + */ + public static Iterable getAllContainers(final EObject obj) { + return new Iterable() { + @Override + public Iterator iterator() { + return new AbstractIterator() { + + private EObject current = obj; + + @Override + protected EObject computeNext() { + current = current.eContainer(); + if (current == null) + return endOfData(); + return current; + } + }; + } + }; + } }