[ https://issues.apache.org/jira/browse/GROOVY-10546?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17512436#comment-17512436 ]
Eric Milles commented on GROOVY-10546: -------------------------------------- Yes, {{with}} has declared the resolve strategy since at least Groovy 2.3. However, there were bugs where "LABEL_INV" was expected to come from the delegate but the runtime was getting it from owner instead. > Regression: Indy compiler in 4.0 uses wrong key for map lookup > -------------------------------------------------------------- > > Key: GROOVY-10546 > URL: https://issues.apache.org/jira/browse/GROOVY-10546 > Project: Groovy > Issue Type: Bug > Components: Compiler > Reporter: Christopher Smith > Priority: Critical > Attachments: closure.javap.txt > > > I have a Gremlin pipeline that returns a complex object as a nested map. > {code} > private static final String LABEL_INV = 'invitation-1234' > g./... > .select(LABEL_INV, LABEL_OTHER) > .next() > .with {] invitation: process(it[LABEL_INV]) ]} > {code} > This was working correctly in Groovy 3. In Groovy 4, however, the map lookup > is passed {{null}} instead of the value in the constant. The query builder > correctly passes the constant value, and the map contained in {{it}} has the > constant as a key as expected. However, {{DefaultGroovyMethods#getAt(Map, > Object)}} is passed the {{it}} map as self but {{null}} for the key. > I am a complete noob at InvokeDynamic, but _perhaps_ this seems to be a > sequencing issue where indy binds the value for {{key}} in bootstrap before > actually initializing it? -- This message was sent by Atlassian Jira (v8.20.1#820001)