You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Dimitar Dimitrov (JIRA)" <ji...@apache.org> on 2015/10/29 02:55:27 UTC

[jira] [Commented] (GROOVY-7011) Trait methods with default arguments do not work correctly

    [ https://issues.apache.org/jira/browse/GROOVY-7011?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14979645#comment-14979645 ] 

Dimitar Dimitrov commented on GROOVY-7011:
------------------------------------------

This was closed and currently the compiler issues an error.
Is there a reason why it is not possible to just generate the overloads?

i.e. being able to write this:
{code}
MessageValue await(String description='', MessageValue pattern=lastSent.get()) { 
   ... 
}
{code}

instead of:
{code}
    MessageValue await() { await '', null }
    MessageValue await(String description) { await description, null }
    MessageValue await(MessageValue<ICommand> pattern) { await '', pattern }
    MessageValue await(String description, MessageValue pattern) {
        ...(description, pattern ?: lastSent.get())
    }
{code}

> Trait methods with default arguments do not work correctly
> ----------------------------------------------------------
>
>                 Key: GROOVY-7011
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7011
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.3.6
>         Environment: OSX 10.9, Java 1.7_67
>            Reporter: Aaron Long
>            Assignee: Cédric Champeau
>             Fix For: 2.3.10, 2.4.0-rc-1
>
>
> The following code:
> {code}
> trait HiSupport {
>    def sayHi(String msg = "hi") {
>        println msg
>    }
> }
> class A implements HiSupport { }
> new A().sayHi()
> {code}
> Produces incorrect results. The trait method is called without any dispatching complaints, however it just ignores the default argument.
> If default arguments are not supported, it seems like it should be a compile failure or at least a failure during dispatch.
> If the trait method has multiple arguments, the method dispatch does result in a failure:
> {code}
> trait HiSupport {
>    def sayHi(String name, String msg = "hi") {
>        println msg + name
>    }
> }
> class A implements HiSupport { }
> new A().sayHi("Bob")
> {code}
> {code}
> groovy.lang.MissingMethodException: No signature of method: A.sayHi() is applicable for argument types: (java.lang.String) values: [Bob]
> Possible solutions: sayHi(java.lang.String, java.lang.String), wait(), any(), each(groovy.lang.Closure), asType(java.lang.Class), wait(long)
> 	at ConsoleScript50.run(ConsoleScript50:9)
> {code}



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