[ https://issues.apache.org/jira/browse/GROOVY-10546?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17512426#comment-17512426 ]
Eric Milles commented on GROOVY-10546: -------------------------------------- {quote}if you `with` a map, every single identifier outside the closure becomes unavailable{quote} Correct, unavailable to implicit-this references. {{with}} says that it calls the supplied closure with {{DELEGATE_FIRST}} resolve strategy. This is the result of that strategy. And yes, the behavior is changed from Groovy 3. > 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)