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

Eric Milles updated GROOVY-7037:
--------------------------------
    Labels: varargs  (was: )

> getAt as Operator Throws if given Fixed and Variable Arguments
> --------------------------------------------------------------
>
>                 Key: GROOVY-7037
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7037
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.3.6, 2.4.0-beta-2
>         Environment: RHEL 6.5 x64
>            Reporter: Steve Amerige
>            Priority: Minor
>              Labels: varargs
>         Attachments: Test.groovy
>
>
> The getAt method for indexing fails when variable arguments are used with [] 
> if any fixed arguments are present.  For example:
> {code}
> class Test
> {
>    def getAt(String s) { return s }
>    def getAt(String s, Integer x) { return "$s $x" }   
>    // def getAt(Object... o) { return o }   // This would succeed
>    def getAt(String s, Object... a) { return "$s $a" }
>    static void main(String[] args)
>    {
>       Test t = new Test()
>       assert t['a'] == 'a'
>       assert t['b', 2] == 'b 2'
>       assert t.getAt('c', 3, true) == 'c [3, true]'
>       assert t['c', 3, true] == 'c [3, true]'   // This throws an exception
>    }
> }
> {code}
> The above produces:
> {noformat}
> Exception thrown
> java.lang.IllegalArgumentException: wrong number of arguments
>       at Test.main(ConsoleScript42:14)
> {noformat}
> Workaround: do not use fixed and variable arguments at the same time and use 
> only variable arguments as in the case shown commented out above: 
> getAt(Object... o).  This is less-than desirable, however, because it 
> restricts the user from using method overloading to separate out 
> distinctly-different logic and forces the user to do runtime checks and 
> implement control structure when using the single varargs method.  In this 
> case, however, the bug severity is mitigated by the fact that the user can 
> explicitly use the "getAt" invocation instead of using the [ ] operator 
> notation.



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

Reply via email to