From f2a4c7667cc628cc6c46024c00732182bc34f397 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 7 Dec 2023 12:05:57 +0100 Subject: [PATCH] [jOOQ/jOOQ#12985] Add comment explaining rationale for explicit Closure We still need explicit groovy Closure support in our DSL API for gradle because of an interesting decision in ClosureBackedAction to prefer Closure.OWNER_ONLY over Closure.DELEGATE_FIRST. Apparenty, OWNER_ONLY is faster, but DELEGATE_FIRST is really what we want, irrespective of speed --- .../main/java/org/jooq/codegen/gradle/MetaExtensions.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/MetaExtensions.java b/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/MetaExtensions.java index 3ce0f3234d..5a4309e942 100644 --- a/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/MetaExtensions.java +++ b/jOOQ-codegen-gradle/src/main/java/org/jooq/codegen/gradle/MetaExtensions.java @@ -48,6 +48,11 @@ import org.jooq.meta.jaxb.*; public class MetaExtensions { static void call(Closure closure, Object delegate) { + // Explicit Closure support seems to still be needed in Gradle 8.5 + // For GeneratedClosure types (which is what the gradle/groovy implementation does), + // it seems that the ClosureBackedAction is instantiated with Closure.OWNER_ONLY, + // which is a weird and undesirable flag value for most DSLs. + // See: https://github.com/jOOQ/jOOQ/issues/12985#issuecomment-1845084003 closure = (Closure) closure.clone(); closure.setResolveStrategy(Closure.DELEGATE_FIRST); closure.setDelegate(delegate);