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]
