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 }