groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Winnebeck, Jason" <Jason.Winneb...@windstream.com>
Subject MethodClosure issues
Date Thu, 23 Aug 2018 14:59:32 GMT
I have an odd issue with method closures. I'm on Groovy 2.4.12 in dynamic mode and I'm trying
to transform data to a map for a webservice. I don't know if I'm using wrong syntax or if
it's a Groovy bug.

This line of code results in MissingMethodException:
response.pa.opportunityQuotes       = pa.opportunityQuotes.collect(this.&mapOpportunityQuote)

pa.opportunityQuotes returns List<Quote> and mapOpportunityQuote is an instance method
taking a Quote and returning a Map. The method containing above line is in AbstractPAService
but at runtime "this" is a Service class extends AbstractPAService. The MissingMethodException
says there's no Service.mapOpportunityQuote method, which is technically true as the method
is on AbstractPAService. Whether mapOpportunityQuote is protected or private does not matter.

This line of code does work, which makes me think I hit a Groovy bug and not something in
my code:


response.pa.opportunityQuotes       = pa.opportunityQuotes.collect { ((AbstractPAService)
owner).mapOpportunityQuote(it) }

The usage of owner and downcasting it to AbstractPAService should be redundant.

I want the MethodClosure created by this.&mapOpportunityQuote to resolve the method on
AbstractPAService class, not on Service class that extends it. Although, I'm confused why
making mapOpportunityQuote protected did not workaround the issue.

Jason Winnebeck
Software Engineer III Contractor - IT Software Development | Windstream
600 Willowbrook Office Park, Rochester, NY 14450
Jason.Winnebeck@windstream.com<mailto:Jason.Winnebeck@windstream.com> | windstreambusiness.com
o: 585.794-4585

This email message and any attachments are for the sole use of the intended recipient(s).
Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the
intended recipient, please contact the sender by reply email and destroy all copies of the
original message and any attachments.

Mime
View raw message