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: 1.2 $
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 }