Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 354479

Summary: [xbase][lib] IteratorExtensions
Product: [Modeling] TMF Reporter: Bernd Kolb <b.kolb>
Component: XtextAssignee: Project Inbox <tmf.xtext-inbox>
Status: CLOSED FIXED QA Contact:
Severity: enhancement    
Priority: P3 CC: christian.dietrich.opensource, jan, sebastian.zarnekow, sven.efftinge
Version: unspecifiedFlags: sebastian.zarnekow: juno+
Target Milestone: M4   
Hardware: PC   
OS: Mac OS X - Carbon (unsup.)   
Whiteboard:

Description Bernd Kolb CLA 2011-08-11 07:32:39 EDT
Build Identifier: 

currently it is not possible to call e.g. filter on an Iterator. However eAllContents returns a TreeIterator

Reproducible: Always
Comment 1 Jan Koehnlein CLA 2011-08-11 08:46:58 EDT
This is what the 
/org.eclipse.xtext.xtend2.lib/src/org/eclipse/xtext/xtend2/lib/EObjectExtensions.java
/org.eclipse.xtext.xtend2.lib/src/org/eclipse/xtext/xtend2/lib/ResourceExtensions.java
/org.eclipse.xtext.xtend2.lib/src/org/eclipse/xtext/xtend2/lib/ResourceSetExtensions.java

extensions are for. You have to explicitely import them as static extensions, as we don't want to force Xtend users to have a dependency on EMF.
Comment 2 Christian Dietrich CLA 2011-08-11 14:41:15 EDT
We introduce an IteratorIterable for this

public class IteratorIterable<T> implements Iterable<T> {

	private Iterator<T> iterator;

	@Override
	public Iterator<T> iterator() {
		return iterator;
	}

	public IteratorIterable(Iterator<T> iterator) {
		super();
		this.iterator = iterator;
	}
	
	public static <T> IteratorIterable<T> iterable(Iterator<T> i) {
		return new IteratorIterable<T>(i);
	}

}

resource.allContents.iterable.filter(typeof(Greeting))
Comment 3 Sebastian Zarnekow CLA 2011-08-11 14:56:46 EDT
We should consider to have something like IteratorExtensions.

Furthermore it may be interesting to allow iterators in for loops, e.g.

for(something: somethingElse.eAllContents) {
  ..
}
Comment 4 Sebastian Zarnekow CLA 2011-11-18 04:34:51 EST
similar to the things that are available in IterableExtensions or Iterators + Iterator.asIterable instead of for(e: iterator)
Comment 5 Sven Efftinge CLA 2011-11-21 05:27:50 EST
I've pushed IteratorExtensions and it includes one extension so far:

public static <T> Iterable<T> toIterable(final Iterator<T> iterator)
Comment 6 Karsten Thoms CLA 2017-09-19 17:00:02 EDT
Closing all bugs that were set to RESOLVED before Neon.0
Comment 7 Karsten Thoms CLA 2017-09-19 17:11:29 EDT
Closing all bugs that were set to RESOLVED before Neon.0