[ https://issues.apache.org/jira/browse/GROOVY-10561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17820189#comment-17820189 ]
Eric Milles commented on GROOVY-10561: -------------------------------------- [~leonard84] Can you open a new bug that links to this one with the new test case? > @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)