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

   ## Audit pass against 5.0.6-SNAPSHOT build #26 (2026-05-08)
   
   Re-audited every remaining workaround against the latest snapshot now that 
**Apache Groovy 5.0.6 is officially released** (2026-05-04, [Maven 
Central](https://repo1.maven.org/maven2/org/apache/groovy/groovy/5.0.6/)). The 
snapshot version has not been bumped to `5.0.7-SNAPSHOT` yet; current 
`5.0.6-SNAPSHOT` resolves to build #26 which is 4 commits ahead of the 
`GROOVY_5_0_6` release tag (post-release dependency bumps + GROOVY-11996 
`groovy.truth.file.exists.enabled` system property). All 5.0.6 release contents 
are present in the snapshot we resolve.
   
   ### Pushed in this audit pass
   
   - **65d194f42b** - Restore `IContainerGebConfiguration` as interface with 
default methods. 
[GROOVY-11982](https://issues.apache.org/jira/browse/GROOVY-11982) was 
backported to `GROOVY_5_0_X` as `a15a4389` on 2026-05-02 and shipped in 5.0.6. 
Compile verified locally under both `-PgrailsIndy=true` and 
`-PgrailsIndy=false` for `:grails-geb:compileTestFixturesGroovy` and 
`:grails-test-examples-geb:compileIntegrationTestGroovy`. The previous 
trait-fallback workaround comment also pointed at GROOVY-11968 (already fixed 
and reverted in 74da8078b5).
   
   - **faef56cfe2** - Realign `render(Map)` workaround diagnoses with 
[@paulk-asert's upstream 
confirmation](https://github.com/jamesfredley/groovy5-compiledynamic-trait-bug/issues/1)
 that the silent no-op is **`File.asBoolean` semantics changing in Groovy 5**, 
not a `@CompileStatic` overload-resolution bug:
     - Drop `@CompileDynamic` from `grails-shell-cli`'s 
`TemplateRenderer.render(Map)` and `TemplateRendererImpl.render(Map)`.
     - Replace `if (namedArguments?.template && namedArguments?.destination)` 
with `containsKey()` + null checks (per Paul's recommendation), mirroring the 
fix that was already in `grails-core`'s `TemplateRendererImpl` from 325e2fee08.
     - Rewrite the inline comments in `grails-core/TemplateRendererImpl` and 
`grails-scaffolding/GenerateControllerCommand` to point at the actual root 
cause (`File.asBoolean = exists() && (isDirectory() OR length>0)`) instead of 
the misdiagnosed "render(Map) silent no-op at the call site". The 
typed-positional `templateRenderer.render(Resource, File, Map, boolean)` shape 
stays as **defence-in-depth**, not as a workaround for a compiler bug.
   
   ### Remaining-workaround inventory (5 items, was 7)
   
   The PR description body has been refreshed in full. Quick diff:
   
   - **Removed**: `IContainerGebConfiguration` interface->trait (GROOVY-11982 
fixed)
   - **Reframed as not a Groovy-version-conditional workaround**: 
`TemplateRendererImpl.render(Map)` truthy-check (now an explicit null-check 
fix; root cause is documented Groovy 5 semantics change with 
[GROOVY-11996](https://issues.apache.org/jira/browse/GROOVY-11996) opt-out)
   - **Reclassified as defensive code, not workaround**: 
`TraitPropertyAccessStrategy` boolean-getter fallback. The inline `// See 
GROOVY-11512` comment was misleading; that ticket was closed and fixed in 
`5.0.0-alpha-11` / `4.0.24` (2024-11-05) - long before this PR. Listed under 
"Defensive code" in the description.
   - **Still active and listed**: VariableScopeVisitor canonicalisation guard 
(4 sites), boot4-disabled integrationTest on 5 test apps, 
`ConfigurationBuilder` Map exclusion + `Object.class` fallback, `g.taglib` 
`@IgnoreIf` (regression of GROOVY-6362 / GROOVY-11817).
   
   ### Recently fixed in 5.0.6 release (already removed from PR earlier)
   
   | Ticket | Status | Drop commit |
   |---|---|---|
   | [GROOVY-11907](https://issues.apache.org/jira/browse/GROOVY-11907) | Fixed 
in 5.0.6 | (earlier in PR) |
   | [GROOVY-11968](https://issues.apache.org/jira/browse/GROOVY-11968) | Fixed 
in 5.0.6 | 74da8078b5 |
   | [GROOVY-11983](https://issues.apache.org/jira/browse/GROOVY-11983) | Fixed 
in 5.0.6 | 73bd63c547 |
   | [GROOVY-11982](https://issues.apache.org/jira/browse/GROOVY-11982) | Fixed 
in 5.0.6 | **65d194f42b (this pass)** |
   
   ### Local verification
   
   ```
   JAVA_HOME=/.../corretto-21 ./gradlew :grails-geb:compileTestFixturesGroovy 
-PgrailsIndy=false --rerun-tasks   # PASS
   JAVA_HOME=/.../corretto-21 ./gradlew 
:grails-test-examples-geb:compileIntegrationTestGroovy -PgrailsIndy=false 
--rerun-tasks   # PASS
   JAVA_HOME=/.../corretto-21 ./gradlew :grails-geb:test :grails-shell-cli:test 
:grails-scaffolding:test :grails-core:compileGroovy   # PASS
   ```
   
   CI is now running against the pushed commits; @jdaugherty / @paulk-asert 
flagging this pass for visibility on the remaining items, particularly 
`g.taglib` (GROOVY-6362 / GROOVY-11817 regression - want to file a fresh ticket 
against `GROOVY_5_0_X`) and the `VariableScopeVisitor` NPE path which still 
needs a Groovy-only reduction.
   


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