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]

Reply via email to