[ https://issues.apache.org/jira/browse/GROOVY-3412?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King updated GROOVY-3412: ------------------------------ Fix Version/s: (was: 3.x) > Method Caching within MethodMissing is not working > -------------------------------------------------- > > Key: GROOVY-3412 > URL: https://issues.apache.org/jira/browse/GROOVY-3412 > Project: Groovy > Issue Type: Bug > Components: groovy-jdk > Affects Versions: 1.6, 2.4.3 > Environment: Ubuntu Linux, JDK 1.6, Eclipse 3.4 > Reporter: James Parkin > Priority: Major > > The following code attempts to cache a method call within the methodMissing > method, however in groovy 1.6, when the method is called for a second time > the cached version is not being used. This code works fine in 1.5.7. > {code} > class PersonAgain > { > def work() { "working..." } > def plays = ['Tennis', 'VolleyBall', 'BasketBall'] > def methodMissing(String name, args) > { > System.out.println "methodMissing called for $name" > def methodInList = plays.find {it == name.split('play')[1] } > if(methodInList) > { > def impl = { Object[] vargs -> > return "playing ${name.split('play')[1]}..." > } > > PersonAgain.metaClass."$name" = impl > return impl(args) > } > else > { > throw new MissingMethodException(name, > PersonAgain.class, args) > } > } > static { PersonAgain.metaClass } > } > jack = new PersonAgain() > println jack.playTennis() > println jack.playTennis() > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)