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

   ## Final wrap-up: workaround burndown audit complete
   
   After end-to-end testing against `apache/groovy` master HEAD (build 508+; 
verified == master HEAD modulo Javadoc commits), here's the bottom line.
   
   ### Burndown count
   
   - **6 Groovy 5 workarounds REMOVED** in this audit (verified by full module 
tests)
   - **4 outstanding workarounds gated on 2 OPEN upstream PRs** 
([apache/groovy#2492](https://github.com/apache/groovy/pull/2492) and 
[#2493](https://github.com/apache/groovy/pull/2493) by Paul King) - locally 
verified that those PRs unblock the corresponding Grails workarounds
   - **13 outstanding workarounds need to be filed upstream** - each has a 
reproducer test that fails on master HEAD when reverted
   - 1 inherited from base PR removed (`TraitPropertyAccessStrategy` is now 
restored to pre-Groovy-5 form since GROOVY-11512 is fixed in 6.0.0-alpha)
   
   ### Verified upstream PRs unblock our remaining workarounds
   
   | Upstream | Verification |
   |---|---|
   | **[GROOVY-11966](https://issues.apache.org/jira/browse/GROOVY-11966) / 
OPEN PR [apache/groovy#2492](https://github.com/apache/groovy/pull/2492)** 
synchronises `NodeMetaDataHandler.getNodeMetaData` map access | Cloned 
`apache/groovy`, fetched PR branch, ran `./gradlew publishToMavenLocal -x test 
-x check -x javadoc -x groovydoc -x asciidoctor`, replaced cached 
`6.0.0-SNAPSHOT` JARs (verified `monitorenter` count in NodeMetaDataHandler 
went from 0 to 7), reverted both parallelism guards, ran 8-project parallel 
`:grails-test-examples-*:compileGroovyPages` - clean. Original race only 
reliably reproduces in CI (timing-dependent). |
   | **[GROOVY-11967](https://issues.apache.org/jira/browse/GROOVY-11967) / 
OPEN PR [apache/groovy#2493](https://github.com/apache/groovy/pull/2493)** adds 
`CHECKCAST` to indy-mode `ListExpressionTransformer` | Built PR #2493 locally, 
replaced cached snapshot (verified `InvokeDynamicWriter` reference present in 
`ListExpressionTransformer$NewListExpression`), reverted 
DefaultConstraintFactory + MappingContextAwareConstraintFactory back to 
single-constructor form, ran `:grails-validation:test 
:grails-datamapping-validation:test` under both indy=true and indy=false - 
clean. |
   
   ### Verified upstream JIRAs already in master and removed our workaround
   
   - [GROOVY-11512](https://issues.apache.org/jira/browse/GROOVY-11512) (trait 
`boolean` property generates isser and getter) - resolved in 6.0.0-alpha. 
**Removed `TraitPropertyAccessStrategy` is-prefix fallback**, verified 
`:grails-data-hibernate5-core:test --rerun-tasks` 79/79 green.
   - [GROOVY-11829](https://issues.apache.org/jira/browse/GROOVY-11829) 
(set(key, value) method selection) - resolved in 6.0.0-alpha. NOT our 
`get(String)` hijack issue (those are different code paths) so our 
`GormEntityTransformation` AST shim is still required.
   - [GROOVY-11907](https://issues.apache.org/jira/browse/GROOVY-11907) (trait 
static field bytecode) - resolved in 5.0.6. Most workarounds removed in earlier 
commits. **`ContainerSupport` indy=false static-setter helper path is NOT 
covered by this fix** - verified today with reproducible `VerifyError: get 
long/double overflows locals` at 
`ContainerSupport$Trait$Helper.createFileInputSource @0: dload_3` under 
`:grails-test-examples-geb:integrationTest -PgrailsIndy=false`. Needs a 
follow-up filed.
   - [GROOVY-11911](https://issues.apache.org/jira/browse/GROOVY-11911) 
(count(Iterable, Closure) MOP doCall) - resolved in master, in build 508+. 
**Removed `ControllerActionTransformer` Closure dispatch workaround**, restored 
to original `DefaultGroovyMethods.count(...)` form, verified 133/133 tasks 
green.
   - [GROOVY-11522](https://issues.apache.org/jira/browse/GROOVY-11522) 
(VariableScopeVisitor NPE in findClassMember) - resolved in 4.0.28 / 
5.0.0-beta-2. NOT our `visitConstructorOrMethod` NPE class (different code 
path, same file).
   
   ### Issues to file upstream (no matching JIRA / PR found in `apache/groovy` 
master commit log or JIRA)
   
   The 7 upstream issues that still need to be filed:
   
   1. `MetaClassImpl` static-trait `get(String)` hijacking instance dispatch 
(caused `GormEntityTransformation` AST shim - distinct from GROOVY-11829's 
`set(key, value)` fix)
   2. `VariableScopeVisitor.visitConstructorOrMethod` NPE class (4 catch sites 
+ 2 null-`VariableScope` ClosureWriter sites - one umbrella bug family)
   3. `@Delegate` field on trait silently returns null on Groovy 5/6 lowering 
(caused `GrailsApplicationCommand` trait → abstract class)
   4. `@Delegate` named-arg bridge silently corrupts template name in 
`render(Map)` (verified today: `Template [Controller.groovy]] not found` - 
caused `TemplateRendererImpl` + `GenerateControllerCommand` workarounds)
   5. `TraitReceiverTransformer` static override loss when calling 
`this.method()` from a trait static method (caused 
`Validateable.resolveDefaultNullable` reflection)
   6. `ConfigObject` infinite recursion under `Map` iteration (caused 
`NavigableMap.convertConfigObjectToMap` shallow conversion - latest 
ConfigObject commits in master are 2012-2014)
   7. Interface `$getCallSiteArray()` `IncompatibleClassChangeError` under 
indy=false (caused `IContainerGebConfiguration` interface → trait)
   
   Plus: GROOVY-11907 follow-up for the indy=false static-setter trait helper 
bytecode (caused `ContainerSupport` `@CompileDynamic` - reproduced today).
   
   ### Net change
   
   15 files modified, **-135/+51 lines**, 6 Groovy 5 workarounds removed. All 
530 modules compile clean. Forge `ScaffoldingSpec.test generate-controller 
command` passes with the workarounds in place.
   
   Assisted-by: claude-code:claude-opus-4-7
   


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