You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2022/02/15 20:30:00 UTC

[jira] [Updated] (GROOVY-9158) @NamedParam arguments don't get their default value when only named parameters are used in the method call

     [ https://issues.apache.org/jira/browse/GROOVY-9158?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Eric Milles updated GROOVY-9158:
--------------------------------
    Labels: named-parameters  (was: )

> @NamedParam arguments don't get their default value when only named parameters are used in the method call
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-9158
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9158
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.5.7
>            Reporter: Mathieu Grelier
>            Priority: Major
>              Labels: named-parameters
>
> See the code below.
> @NamedParam only method signatures with default values for not required ones should be possible, with corresponding named parameters only method calls.
> {code:groovy}
> import groovy.transform.NamedParam
> import groovy.transform.NamedVariant
> import static groovy.test.GroovyAssert.shouldFail
>     
> class NamedParamTestClass {
>     Map getArgs(def arg1, def arg2) {
>         Map passedArgs = [:]
>         passedArgs << ["arg1":arg1, "arg2":arg2]
>         passedArgs
>     }
>      
>     @NamedVariant
>     Map onlyNamedArgs(@NamedParam(required = true) String arg1, @NamedParam(required = false) String arg2 = "expected default value") {
>         getArgs(arg1, arg2)
>     }
>     
>     @NamedVariant
>     Map primitiveTypeNotRequired(@NamedParam(required = false) String arg1, @NamedParam(required = false) int arg2 = 1) {
>         getArgs(arg1, arg2)
>     }
> }
> def test = new NamedParamTestClass()
> Map result
> result = test.onlyNamedArgs("a positional value for @NamedParam arg1")
> assert result.getAt("arg2") == "expected default value"
> result = test.onlyNamedArgs(arg1:"a named parameter value for @NamedParam arg1")
> shouldFail(AssertionError) {
>     assert result.getAt("arg2") == "expected default value" :  "arg2 was not given its default value"
> }
> assert result.getAt("arg2") == null
> shouldFail(MissingMethodException) {
>     result = test.primitiveTypeNotRequired(arg1:'1') // called with named arg
> }
> {code}
> Last test shows also that MissingMethodException occurs when a primitive type is used with @NamedParam.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)