groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Winnebeck, Jason" <>
Subject Groovy 3 OWNER_FIRST closure passed to method with resolve strategy DELEGATE_FIRST
Date Tue, 18 Aug 2020 04:21:42 GMT
I'm upgrading a project from Groovy 2.4.19 to 3.0.5 with 100s of classes almost all @CompileStatic
code on JDK 8. Upon upgrading I get compiler errors about static type checker knowing or not
knowing anymore of objects, which is par for the course for any Groovy upgrade. But most of
the errors I get are this:

Closure parameter with resolve strategy OWNER_FIRST passed to method with resolve strategy

The pattern that I am using is having a method that takes a Closure, and passes it to Object.with:

void run(@DelegatesTo(X) Closure closure) {
  println "I'm running!"

run { println prop }

So I know what OWNER_FIRST and DELEGATE_FIRST mean. And I see that the default in @DelegatesTo
(or no annotation presumably) is OWNER_FIRST, and with clones the closure and sets its resolve
strategy to DELEGATE_FIRST.

I can't find documentation on this message. Does the message being an error imply that the
resolve strategy on a closure is "baked in" in CompileStatic? Did that change since 2.4? What
is the best practice solution?

Other notes:

  1.  I build with IDEA and the default 700mb heap was not enough to build, I needed 5GB heap
to build without OutOfMemoryError is that expected?
  2.  I'm trying to upgrade from 2.4.19 because I encountered a bug in static compile, in
an expression x.value = someEnum, there is x.setValue(boolean) and x.setValue(String). 90%
of the time the static compiler picks the setValue(String) for all such call sites in a build,
10% of the time it picks setValue(boolean) for all such call sites. I didn't receive any compiler
errors on that expression as I'd expect it to be ambiguous (or at least pick same each time),
is that expected to fail compile in Groovy 3?


Jason Winnebeck

Sensitivity: Internal

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.

View raw message