groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Felix Dorner <felix.dor...@gmail.com>
Subject Re: Calling 'each' on org.eclipse.emf.common.util.TreeIterator
Date Tue, 16 Oct 2018 21:36:03 GMT
Ok so to summarize, the trap is that I call each {} on an object that is
both, an List/Iterable and an Iterator at the same time. The result is that
either of these two is called, and it happens to be random which one.
http://docs.groovy-lang.org/docs/groovy-2.5.1/html/api/org/codehaus/groovy/runtime/DefaultGroovyMethods.html#each-java.util.Iterator-groovy.lang.Closure-
http://docs.groovy-lang.org/docs/groovy-2.5.1/html/api/org/codehaus/groovy/runtime/DefaultGroovyMethods.html#each-java.lang.Iterable-groovy.lang.Closure-




On Tue, Oct 16, 2018 at 6:59 PM Felix Dorner <felix.dorner@gmail.com> wrote:

> I think I "know" what's going on.. I have a hard time trying to figure
> actually out which 'each' implementation is called, but if it is
> "DefaultGroovyMethods.each", this will not work: The default groovy methods
> each calls 'iterator' on the argument, which happens to be defined in the
> iterator that I am testing, because that iterator is also a list... (But
> the tree iterator contents are actually more than the contents of that
> list, because the list is a list of root elements, just imagine a dom tree,
> it's the same thing). I'll figure something out.
>
>
>
> On Tue, Oct 16, 2018 at 6:17 PM Felix Dorner <felix.dorner@gmail.com>
> wrote:
>
>> If I use hasNext/next in a while loop, I get at the content as expected,
>> but not if I use the collection extensions such as 'each'. I don't know
>> where the magic fails, but I want to find out.. The iterator that is being
>> used is created here:
>>
>>
>> http://git.eclipse.org/c/emf/org.eclipse.emf.git/tree/plugins/org.eclipse.emf.ecore/src/org/eclipse/emf/ecore/impl/BasicEObjectImpl.java#n832
>> and that is an anonymous subtype of
>>
>> http://git.eclipse.org/c/emf/org.eclipse.emf.git/tree/plugins/org.eclipse.emf.common/src/org/eclipse/emf/common/util/AbstractTreeIterator.java
>>
>>
>>
>>
>> On Tue, Oct 16, 2018 at 3:21 PM Paul King <paulk@asert.com.au> wrote:
>>
>>> I'd expect that to work the same as if you used a while loop with
>>> hasNext() and next(). If your data structure has further containers and
>>> next() doesn't normally walk through the containers, then I'd expect you to
>>> have more work to do. Is that not what you are seeing?
>>>
>>> Cheers, Paul.
>>>
>>> On Tue, Oct 16, 2018 at 8:23 PM Felix Dorner <felix.dorner@gmail.com>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> I can do:
>>>> def a = [1,2,3].iterator()
>>>> a.each {
>>>>    println it
>>>> }
>>>>
>>>> Cool, I can walk EMF EObject trees like this, I thought:
>>>>
>>>> Iterator i = anEObject.eAllContents() // this gives a TreeIterator, a
>>>> subinterface of Iterator
>>>> it.each {
>>>>   println it
>>>> }
>>>>
>>>> But that doesn't work :(. It only prints anEObject, not the whole
>>>> content tree. Anyone can explain why?
>>>>
>>>>
>>>> --
>>>> Linux. The choice of a GNU generation.
>>>>
>>>
>>
>> --
>> Linux. The choice of a GNU generation.
>>
>
>
> --
> Linux. The choice of a GNU generation.
>


-- 
Linux. The choice of a GNU generation.

Mime
View raw message