jamesfredley commented on PR #15558:
URL: https://github.com/apache/grails-core/pull/15558#issuecomment-4328974479

   ## Audit pass against Groovy 6.0.0-SNAPSHOT build #518 (2026-04-27)
   
   Pulled the latest snapshot from Apache snapshots (build #518, timestamp 
2026-04-27 14:33:02 UTC; tracks apache/groovy master HEAD at 2026-04-27 15:50 
UTC modulo CI lag) and re-verified every Groovy 6 workaround on this branch. 
Inherited the Groovy 5 audit results from #15557 via merge.
   
   ### Workarounds with confirmed upstream fix in flight
   
   | Workaround | Upstream PR / JIRA |
   |---|---|
   | GSP compile parallelism guard (`GroovyPageCompiler`, 
`AbstractGroovyTemplateCompiler`) | 
[apache/groovy#2492](https://github.com/apache/groovy/pull/2492) (GROOVY-11966) 
|
   | `DefaultConstraintFactory` / `MappingContextAwareConstraintFactory` 
two-constructor split | 
[apache/groovy#2493](https://github.com/apache/groovy/pull/2493) (GROOVY-11967) 
|
   | `ContainerSupport` `@CompileDynamic` (trait static fields under 
indy=false) | 
**[apache/groovy#2495](https://github.com/apache/groovy/pull/2495) 
(GROOVY-11968)** - newly opened by @paulk-asert today, explicit GROOVY-11907 
follow-up |
   
   All three are OPEN as of build #518; bug confirmed still present. When each 
merges + a fresh snapshot publishes, the corresponding workaround can be 
reverted.
   
   ### Standalone reproducers published for the four real Groovy 6 regressions 
still needing upstream filing
   
   | # | Reproducer repo | What it isolates |
   |---|---|---|
   | 1 | 
[groovy6-get-as-generic-getter](https://github.com/jamesfredley/groovy6-get-as-generic-getter)
 | Groovy 6 `MetaClassImpl` picks up `Object get(Serializable)` as the 
genericGetMethod for instance property access, hijacking 
`propertyMissing(String)`. Drives the `GormEntityTransformation` per-entity AST 
`Object get(String)` shim. |
   | 2 | 
[groovy-trait-static-method-override-bug](https://github.com/jamesfredley/groovy-trait-static-method-override-bug)
 | Groovy 5+ `TraitReceiverTransformer` rewrites `this.someStatic()` from 
inside a trait body to call the trait helper directly, silently losing 
implementing-class overrides. Drives 
`Validateable.resolveDefaultNullable(Class)` reflection workaround. |
   | 3 | 
[groovy5-compiledynamic-trait-bug](https://github.com/jamesfredley/groovy5-compiledynamic-trait-bug)
 | Groovy 5+ `@CompileStatic` `render(Map<String,Object>)` overload silently 
no-ops against multi-overload interface references. Drives the typed positional 
call shape in `GenerateControllerCommand` and `TemplateRendererImpl`. (Despite 
the repo name, also covers Groovy 6 with the same shape and outcome.) |
   | 4 | 
[groovy5-compiledynamic-trait-bug/quick-checks/InterfaceDefaultsCheck.groovy](https://github.com/jamesfredley/groovy5-compiledynamic-trait-bug/blob/main/quick-checks/src/main/groovy/InterfaceDefaultsCheck.groovy)
 | Interface with default methods compiled with `$getCallSiteArray()` -> 
`IncompatibleClassChangeError` under indy=false. Drives the 
`IContainerGebConfiguration` interface->trait conversion. |
   
   Each repo has a self-contained build, README pinned to Java 21 + Gradle 
9.4.1, and toggles for Groovy 4/5/6 + indy=true/false. Reverting any of the 
corresponding Grails workarounds and re-running the related test on this branch 
reproduces the cited failure.
   
   ### Inherited-from-#15557 workarounds re-verified on Groovy 6
   
   - `PersistentEntityCodec` smart-cast workaround 
([SmartCastCheck.groovy](https://github.com/jamesfredley/groovy5-compiledynamic-trait-bug/blob/main/quick-checks/src/main/groovy/SmartCastCheck.groovy))
 - still needed
   - `NavigableMap.resolveConfigMapValue` `containsKey + get` fix - still needed
   - `VariableScopeVisitor` try/catch guards (4 sites) - still needed
   - `ResourceTransform` non-null `VariableScope` guard - still needed
   - `@Slf4j` `LoggingTransformer` was just a comment update - reverted
   
   ### Removed since Groovy 5 (Groovy 6 fixed them)
   
   - `AbstractConstraint.java` `getDefaultMessageFromBundle` fallback
   - `GroovyConfigPropertySourceLoader.toRegularMap`
   - `HibernateEntityTransformation` `instanceof InnerClassNode` swap
   - `ControllerActionTransformer` count overload (GROOVY-11911 merged 
2026-04-26)
   - `BsonPersistentEntityCodec.resolvePropertyType` hierarchy walker
   - `TraitPropertyAccessStrategy` is-prefix fallback (GROOVY-11512 in 
6.0.0-alpha)
   
   ### Net effect
   
   Workaround surface area on this canary is now:
   
   - 5 sites tracked by 3 OPEN upstream PRs (will revert as those merge)
   - 4 sites with standalone reproducers, no upstream PR yet (need to be filed)
   - Inherited #15557 set on the same trajectory
   
   cc @paulk-asert - the four "no upstream PR yet" reproducers (`#1`-`#4` 
above) are all small, deterministic, and don't pull in Grails or GORM. Each one 
would benefit from upstream eyes; happy to file the JIRAs and link the 
reproducers from there if that helps.
   
   The PR description has the full per-site inventory.
   


-- 
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