[
https://issues.apache.org/jira/browse/GROOVY-10915?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Eric Milles updated GROOVY-10915:
---------------------------------
Description:
Consider the following:
{code:groovy}
class C {
boolean isCase(value) {
// ...
}
}
{code}
"x in c" and "!(x in c)" will use C's {{isCase}} method. However "x !in c"
will use {{DGM.isNotCase(c,x)}} which static dispatches to {{DGM.isCase}}. The
isNotCase extension methods added in Groovy 4 should probably use invokeMethod
to dynamic dispatch to make use of the isCase implemented by C.
IMO it would be much simpler to ditch "isNotCase" and have "a \!in b" work
identically to "!(a in b)" so one cannot implement incongruent "in" and "!in"
handling.
was:
Consider the following:
{code:groovy}
class C {
boolean isCase(value) {
// ...
}
}
{code}
"x in c" and "!(x in c)" will use C's {{isCase}} method. However "x !in c"
will use {{DGM.isNotCase(c,x)}} which static dispatches to {{DGM.isCase}}. The
isNotCase extension methods added in Groovy 4 should probably use invokeMethod
to dynamic dispatch to make use of the isCase implemented by C.
IMO it would be much simpler to ditch "isNotCase" and have "a !in b" work
identically to "!(a in b)" so one cannot implement incongruent "in" and "!in"
handling.
> DGM: class that provides isCase but not isNotCase
> -------------------------------------------------
>
> Key: GROOVY-10915
> URL: https://issues.apache.org/jira/browse/GROOVY-10915
> Project: Groovy
> Issue Type: Bug
> Components: groovy-jdk
> Affects Versions: 4.0.0
> Reporter: Eric Milles
> Priority: Major
>
> Consider the following:
> {code:groovy}
> class C {
> boolean isCase(value) {
> // ...
> }
> }
> {code}
> "x in c" and "!(x in c)" will use C's {{isCase}} method. However "x !in c"
> will use {{DGM.isNotCase(c,x)}} which static dispatches to {{DGM.isCase}}.
> The isNotCase extension methods added in Groovy 4 should probably use
> invokeMethod to dynamic dispatch to make use of the isCase implemented by C.
> IMO it would be much simpler to ditch "isNotCase" and have "a \!in b" work
> identically to "!(a in b)" so one cannot implement incongruent "in" and "!in"
> handling.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)