[ https://issues.apache.org/jira/browse/GROOVY-10561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17820142#comment-17820142 ]
Leonard Brünings commented on GROOVY-10561: ------------------------------------------- [~paulk], I just ran into this again with {{4.0.17,}} and your [example fails|https://gwc-experiment.appspot.com/?g=groovy_4_0&codez=eNqtkFFrwyAUhd_9FYcSyLqGkqs-BQKDve9lsHe3JkNoYjEizLH_PtMUmo7EvVQEOZyPe_nU3clYh09rjP_aO6v6oTW22z8ydmhatMY86N7BE2pIXuAceAyednSJYox8R1t8Y5NFNItE5sUGP0wNQxPnj3O2qGvkkkMKSJnPKyqnkkoQgfifsgC_AjxeWgAKiBtIlDljT8-mO-lj8-qU0x9npXdl76I0zllRGqtVpalMKF2BZaUX1TWHN2W16t3FKNzJKKwbhZRR-M8oJIxmkKcKyTUTUESTKr3uFoyvqJY-k2F2fgElMcNF] {noformat} groovy.lang.MissingPropertyException: No such property: v1 for class: Script1 at Script1.baz(Script1.groovy:17) at Script1.run(Script1.groovy:22) {noformat} The fix by [~emilles] apparently does not cover default values that perform any actions, e.g. {{{}int v2 = v1 + 1{}}}. > @NamedVariant self referential default values are not correctly resolved > ------------------------------------------------------------------------ > > Key: GROOVY-10561 > URL: https://issues.apache.org/jira/browse/GROOVY-10561 > Project: Groovy > Issue Type: Bug > Affects Versions: 2.5.16, 3.0.10, 4.0.1 > Reporter: Leonard Brünings > Assignee: Paul King > Priority: Major > Labels: named-parameters > Fix For: 4.0.2 > > Time Spent: 1h > Remaining Estimate: 0h > > If a default parameter refers to another parameter ( {{String language = > 'java', String extension = language}} ) it will fail, when the named variant > is used. > {code:groovy} > import groovy.transform.NamedVariant > import spock.lang.Specification > class Demo { > @NamedVariant > String fileInSourceSet(String language = 'java', String extension = > language) { > return "$language -> .$extension" > } > > def test() { > assert fileInSourceSet() == 'java -> .java' > assert fileInSourceSet('groovy') == 'groovy -> .groovy' > assert fileInSourceSet(language: 'kotlin', extension: 'kt') == > 'kotlin -> .kt' > // fails > assert fileInSourceSet(language: 'groovy') == 'groovy -> > .groovy' > } > > static main(args) { > new Demo().test() > } > } > {code} > See on > [WebConsole|https://gwc-experiment.appspot.com/?g=groovy_3_0&codez=eJyNUU1rwzAMPTe_QpRCEujS-6Bjh1126SWwu0iV4C2Wh610G6P_ff5KWAtl00HgJ72nJ1npd2MFBmvM6asRi-x6Y3VzQE3HF7QKWYqiG9E5eCJt4LsAH48X9YC0YhUP0KuRnrk1k-2oJakyPCIPEw4Eeyhf8YTldibQpxA7ZdiX5q46TwlhSSbLsN4sEncP0GwW2jp2nmOO6Ug9CDmpgspq5Y2TX_DaVw37bCXqRU-3u8t0nzKx0iPyMn6bObu-h_LNyKjYb754D6Bk0VSNoh5b1t_toEc1un9N-Mvl1aWcoKgONCqu0A7u99lDMH3EP6_qJh80KUSBc1FcNP8AgUKxrg] > (as long as deployed version is 3.0.10) > {noformat} > groovy.lang.MissingPropertyException: No such property: language for class: > Demo > at Demo.fileInSourceSet(Script1.groovy) > at Demo$fileInSourceSet$2.callCurrent(Unknown Source) > at Demo.test(Script1.groovy:14) > at Demo$test.call(Unknown Source) > at Demo.main(Script1.groovy:18) > {noformat} > It generates > {code:java} > @groovy.transform.Generated > public java.lang.String > fileInSourceSet(@groovy.transform.NamedParams(value = > [@groovy.transform.NamedParam(value = 'language', type = java.lang.String, > required = false), @groovy.transform.NamedParam(value = 'extension', type = > java.lang.String, required = false)]) java.util.Map namedArgs) { > if ( namedArgs == null) { > throw new java.lang.IllegalArgumentException('Named parameter map > cannot be null') > } > for (java.lang.String namedArgKey : namedArgs.keySet()) { > assert ['language', 'extension'].contains( namedArgKey ) : > 'Unrecognized namedArgKey: ' + namedArgKey } > return this.fileInSourceSet(namedArgs.containsKey('language') ? > namedArgs.language : 'java', namedArgs.containsKey('extension') ? > namedArgs.extension : language ) > }{code} > The problematic line is {{namedArgs.containsKey('extension') ? > namedArgs.extension : language which either would have to duplicate the logic > for {{language}}}} or use a local variable for it. > Relates to GROOVY-10261 -- This message was sent by Atlassian Jira (v8.20.10#820010)