001    package org.codehaus.groovy.runtime;
002    
003    import groovy.lang.Closure;
004    import groovy.lang.MetaClass;
005    
006    import java.util.ArrayList;
007    import java.util.List;
008    
009    /**
010     * A closure which stores calls in a List so that method calls 
011     * can be iterated over in a 'yield' style way
012     * 
013     * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
014     * @version $Revision: 1205 $
015     */
016    public class IteratorClosureAdapter extends Closure {
017    
018        private List list = new ArrayList();
019        private MetaClass metaClass = InvokerHelper.getMetaClass(this);
020        
021        public IteratorClosureAdapter(Object delegate) {
022            super(delegate);
023        }
024    
025        public MetaClass getMetaClass() {
026            return metaClass;
027        }
028    
029        public void setMetaClass(MetaClass metaClass) {
030            this.metaClass = metaClass;
031        }
032        
033        public List asList() {
034            return list;
035        }
036    
037        protected Object doCall(Object argument) {
038            list.add(argument);
039            return null;
040        }
041    }