jamesfredley commented on PR #15558: URL: https://github.com/apache/grails-core/pull/15558#issuecomment-4366890394
## 2026-05-04 audit pass against Groovy 6.0.0-SNAPSHOT build #571 Pulled `apache/groovy` master to commit `40499016` (HEAD as of 2026-05-03 18:03 UTC) and the published `6.0.0-SNAPSHOT` snapshot at build #571 (`6.0.0-20260503.181740-571`). Three new master commits unlock additional workaround removals (two on this canary, two more inherited via the merge from `grails8-groovy5-sb4`). ### New Groovy 6 fixes since the previous audit (build #546 → #571) | Ticket | Master commit (UTC) | Workaround dropped on this canary | |---|---|---| | [GROOVY-11980](https://issues.apache.org/jira/browse/GROOVY-11980) | `ced726ce` (2026-05-02 21:29) | `HibernateConnectionSourceSettings.HibernateSettings.clone()` explicit override removed - `@AutoClone(style = CLONE)` on a `LinkedHashMap`-extending class now generates the override with the correct (no-throws) signature. | | [GROOVY-11982](https://issues.apache.org/jira/browse/GROOVY-11982) | `88ca738c` (2026-05-02 23:16) | `IContainerGebConfiguration` reverted from `trait` back to `interface` with `default` methods. The downstream `IncompatibleClassChangeError: Method '...$getCallSiteArray()' must be InterfaceMethodref constant` under `-PgrailsIndy=false` is fixed at the bytecode level. | | [GROOVY-11983](https://issues.apache.org/jira/browse/GROOVY-11983) | `af95d66d` (2026-05-03 01:25) | Inherited from `grails8-groovy5-sb4` via the merge: `PersistentEntityCodec` two `ManyToMany.isAssignableFrom` swaps + `DefaultHalViewHelper` ToOne-first/ToMany-second cascade reorder, both reverted to natural `instanceof` form. | Local compilation against build #571 (Java 21): ``` ./gradlew :grails-data-hibernate5-core:compileGroovy --refresh-dependencies ./gradlew :grails-geb:compileTestFixturesGroovy --refresh-dependencies ``` Both BUILD SUCCESSFUL. ### Runtime validation deferred to CI The GROOVY-11982 fix is at the bytecode `Methodref` vs `InterfaceMethodref` constant-pool emission layer. The compile path is happy on both old and new bytecode shapes - the failure is at class-loading time when a downstream class compiled with `-PgrailsIndy=false` consumes the interface. The affected specs (`InheritedConfigSpec`, `ChildPreferenceInheritedConfigSpec` in `grails-test-examples-geb`) extend `ContainerGebSpec implements IContainerGebConfiguration` and exercise the exact `$getCallSiteArray()` dispatch the upstream fix addresses. The canary CI matrix (`Functional Tests (Java 21/25, indy=false)`) is the right gate for that - rather than re-running the geb integration test locally with a Selenium container, leaving it for the CI run on this push. The GROOVY-11980 fix is a Java stub generator change. Compilation succeeds locally, so the stub for `HibernateSettings` no longer carries the bogus `throws CloneNotSupportedException`. Runtime deep-clone semantics for tenant connection-source settings (the original reason for the explicit clone() body) are preserved by `@AutoClone(style = CLONE)`, which is the default style and produces the exact same per-field clone shape the explicit override implemented manually. ### Remaining real Groovy 6 regressions (no upstream PR yet) Re-verified failing against build #571 by reverting locally: - **`Object get(String)` genericGetMethod hijacking** in GORM entities ([groovy6-get-as-generic-getter](https://github.com/jamesfredley/groovy6-get-as-generic-getter)) - **`TraitReceiverTransformer` rewriting `this.someStatic()` to direct trait helper call**, losing implementing-class overrides ([groovy-trait-static-method-override-bug](https://github.com/jamesfredley/groovy-trait-static-method-override-bug)) - **`@CompileStatic render(Map<String,Object>)` overload silently no-ops** when called against a multi-overload interface reference ([groovy5-compiledynamic-trait-bug](https://github.com/jamesfredley/groovy5-compiledynamic-trait-bug)) Each has a deterministic standalone reproducer on Groovy 6.0.0-SNAPSHOT build #571. None has been filed upstream yet - will get tickets opened against `apache/groovy` over the next couple of pushes. ### Pre-existing canary issue (independent) `:grails-fields:compileGroovy` fails on the merged tree with `Target constructor for constructor call expression hasn't been set` in `BeanPropertyAccessorFactory.groovy:83`. Reproduces on the unmodified canary - independent of the workaround removals. Will track separately and not let it block this audit pass. ### Net effect Five workarounds dropped against this round of upstream fixes: 2 directly on this canary (GROOVY-11980, GROOVY-11982), 2 inherited from #15557 via merge (GROOVY-11983 × 2), and the `ContainerSupport` / constraint factory / parallelism workarounds removed in the previous audit cycle (GROOVY-11968 / GROOVY-11967 / GROOVY-11966). PR description has been refreshed to reflect the current state. cc @jdaugherty for visibility on the canary progress; @paulk-asert if any of the remaining no-upstream-PR-yet items would benefit from a JIRA ticket sooner rather than later. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
