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

Jochen Theodorou updated GROOVY-7396:
-------------------------------------
    Labels:   (was: usertask)

> Static compiler prefers overloaded method taking primitive argument over 
> object
> -------------------------------------------------------------------------------
>
>                 Key: GROOVY-7396
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7396
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static compilation
>    Affects Versions: 2.3.8, 2.4.3
>         Environment: OSX Yosemite, JDK 1.8.0_40
>            Reporter: Shil Sinha
>            Assignee: Jochen Theodorou
>
> If a method is overloaded to accept either a primitive or object argument, 
> and is called with a wrapper type argument (i.e. Integer, Long, etc.), the 
> static compiler chooses the primitive version when generating bytecode (or 
> possibly earlier in compilation). Example:
> {code}
> import groovy.transform.CompileStatic
> @CompileStatic
> class Foo {
>   void monkeyAdd(int a) {
>     println 'monkeyAdd int'
>   }
>   void monkeyAdd(Object a) {
>     println 'monkeyAdd Object'
>   }
>   public static void main(String[] args) {
>     Integer a = Integer.valueOf(4)
>     Integer b = null
>     def foo = new Foo()
>     foo.monkeyAdd(a) //prints 'monkeyAdd int'
>     foo.monkeyAdd(b) //throws NPE
>   }
> }
> {code}
> This is not expected behavior; `monkeyAdd(Object)` should be called in both 
> cases, as it would be in Java. 
> The bytecode generated for the `foo.monkeyAdd(a)` call is: 
> {code}
> ALOAD 3
> ALOAD 1
> INVOKEVIRTUAL java/lang/Integer.intValue ()I
> INVOKEVIRTUAL me/anyti/Foo.monkeyAdd (I)V
> ACONST_NULL
> POP
> {code}
> Similarly, the bytecode generated for the `foo.monkeyAdd(b)` call is:
> {code}
> ALOAD 3
> ALOAD 2
> INVOKEVIRTUAL java/lang/Integer.intValue ()I
> INVOKEVIRTUAL me/anyti/Foo.monkeyAdd (I)V
> ACONST_NULL
> POP
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to