You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Björn Kautler (Jira)" <ji...@apache.org> on 2025/10/07 23:57:00 UTC

[jira] [Created] (GROOVY-11776) Overload resolution of trait methods does not work properly

Björn Kautler created GROOVY-11776:
--------------------------------------

             Summary: Overload resolution of trait methods does not work properly
                 Key: GROOVY-11776
                 URL: https://issues.apache.org/jira/browse/GROOVY-11776
             Project: Groovy
          Issue Type: Bug
    Affects Versions: 5.0.1, 3.0.25, 4.0.26, 2.5.23
            Reporter: Björn Kautler


Given this snippet:
{code:groovy}
trait Foo {
  def foo(Object o) {
    println("foo(o)")
  }
  def foo(Map<String, Object> m) {
    println("foo(m)")
  }
}
class Bar implements Foo {
  def bar(Object o) {
    println("bar(o)")
  }
  def bar(Map<String, Object> m) {
    println("bar(m)")
  }
}
new Bar().with {
  foo((Object) null)
  foo(null as Object)
  bar((Object) null)
  bar(null as Object)
}
(new Object() as Foo).with {
  foo((Object) null)
  foo(null as Object)
}
{code}
In Groovy 2.5, 3.0 and 4.0 {{bar}} uses the {{Object}} variant as expected, but {{foo}} uses the {{Map}} variant for some reason.
In Groovy 5.0.alpha that is still on groovyconsole.dev this was fixed and both used the {{Object}} variant as expected.
In 5.0.1 this is also broken again, behaving like before.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)