can't override toString in coerced Map... some of the time

View: New views
5 Messages — Rating Filter:   Alert me  

can't override toString in coerced Map... some of the time

by Maurice Nicholson-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hey all,

I *love* the fact the Maps can be coerced into arbitrary types. It's what I use all the time in Groovy unit tests.

But what's up with this? I can't seem to override or invoke the toString in a Map coerced to org.compass.core.CompassQuery, but a URL proxy Map works fine:

--- console ---

import org.compass.core.CompassQuery

def query = [toString: {-> 'this is the query'}] as CompassQuery

println query.toString()
println query.'toString'()

def socket = [toString: {-> 'this is the socket'}] as Socket

println socket.toString()

--- output ----

groovy> import org.compass.core.CompassQuery
groovy> def query = [toString: {-> 'this is the query'}] as CompassQuery
groovy> println query.toString()
groovy> println query.'toString'()
groovy> def socket = [toString: {-> 'this is the socket'}] as Socket
groovy> println socket.toString()

["toString":Script3$_run_closure1@bccf21]
["toString":Script3$_run_closure1@bccf21]
this is the socket

--- snip ---

Any ideas?

Thanks,
Maurice


Re: can't override toString in coerced Map... some of the time

by Andres Almiray :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Seems like this issue is related to coercing any interface as the following code shows

interface Foo {
   String foo()
}
class Bar {
   String bar() { "Bar!" }
   String toString() { "From Bar" }
}

def concreteFoo = [
   foo: { "Foo!" },
   toString: { "from Proxy" }
] as Foo
def concreteBar = [
   bar: { "Baz!" },
   toString: { "from Proxy" }
] as Bar

println concreteFoo
println concreteBar

------ OUTPUT -------

["foo":Script33$_run_closure1@19d9740, "toString":Script33$_run_closure2@135128f]
from Proxy

The same would happen to the usual suspects (equals, hashCode). I'm not sure if this is a design constraint.


Maurice Nicholson-2 wrote:
Hey all,

I *love* the fact the Maps can be coerced into arbitrary types. It's what I
use all the time in Groovy unit tests.

But what's up with this? I can't seem to override or invoke the toString in
a Map coerced to org.compass.core.CompassQuery, but a URL proxy Map works
fine:

--- console ---

import org.compass.core.CompassQuery

def query = [toString: {-> 'this is the query'}] as CompassQuery

println query.toString()
println query.'toString'()

def socket = [toString: {-> 'this is the socket'}] as Socket

println socket.toString()

--- output ----

groovy> import org.compass.core.CompassQuery
groovy> def query = [toString: {-> 'this is the query'}] as CompassQuery
groovy> println query.toString()
groovy> println query.'toString'()
groovy> def socket = [toString: {-> 'this is the socket'}] as Socket
groovy> println socket.toString()

["toString":Script3$_run_closure1@bccf21]
["toString":Script3$_run_closure1@bccf21]
this is the socket

--- snip ---

Any ideas?

Thanks,
Maurice

Re: can't override toString in coerced Map... some of the time

by Maurice Nicholson-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

So it's a bug?

Shall I JIRA it?

2008/5/1 Andres Almiray <aalmiray@...>:

Seems like this issue is related to coercing any interface as the following
code shows

interface Foo {
  String foo()
}
class Bar {
  String bar() { "Bar!" }
  String toString() { "From Bar" }
}

def concreteFoo = [
  foo: { "Foo!" },
  toString: { "from Proxy" }
] as Foo
def concreteBar = [
  bar: { "Baz!" },
  toString: { "from Proxy" }
] as Bar

println concreteFoo
println concreteBar

------ OUTPUT -------

["foo":Script33$_run_closure1@19d9740,
"toString":Script33$_run_closure2@135128f]
from Proxy

The same would happen to the usual suspects (equals, hashCode). I'm not sure
if this is a design constraint.



Maurice Nicholson-2 wrote:
>
> Hey all,
>
> I *love* the fact the Maps can be coerced into arbitrary types. It's what
> I
> use all the time in Groovy unit tests.
>
> But what's up with this? I can't seem to override or invoke the toString
> in
> a Map coerced to org.compass.core.CompassQuery, but a URL proxy Map works
> fine:
>
> --- console ---
>
> import org.compass.core.CompassQuery
>
> def query = [toString: {-> 'this is the query'}] as CompassQuery
>
> println query.toString()
> println query.'toString'()
>
> def socket = [toString: {-> 'this is the socket'}] as Socket
>
> println socket.toString()
>
> --- output ----
>
> groovy> import org.compass.core.CompassQuery
> groovy> def query = [toString: {-> 'this is the query'}] as CompassQuery
> groovy> println query.toString()
> groovy> println query.'toString'()
> groovy> def socket = [toString: {-> 'this is the socket'}] as Socket
> groovy> println socket.toString()
>
> ["toString":Script3$_run_closure1@bccf21]
> ["toString":Script3$_run_closure1@bccf21]
> this is the socket
>
> --- snip ---
>
> Any ideas?
>
> Thanks,
> Maurice
>
>

--
View this message in context: http://www.nabble.com/can%27t-override-toString-in-coerced-Map...-some-of-the-time-tp16990877p16992781.html
Sent from the groovy - user mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

   http://xircles.codehaus.org/manage_email




Re: can't override toString in coerced Map... some of the time

by Andres Almiray :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Yes, please raise an issue so that we can keep track of it, thanks.

Maurice Nicholson-2 wrote:
So it's a bug?

Shall I JIRA it?

2008/5/1 Andres Almiray <aalmiray@yahoo.com>:

>
> Seems like this issue is related to coercing any interface as the
> following
> code shows
>
> interface Foo {
>   String foo()
> }
> class Bar {
>   String bar() { "Bar!" }
>   String toString() { "From Bar" }
> }
>
> def concreteFoo = [
>   foo: { "Foo!" },
>   toString: { "from Proxy" }
> ] as Foo
> def concreteBar = [
>   bar: { "Baz!" },
>   toString: { "from Proxy" }
> ] as Bar
>
> println concreteFoo
> println concreteBar
>
> ------ OUTPUT -------
>
> ["foo":Script33$_run_closure1@19d9740,
> "toString":Script33$_run_closure2@135128f]
> from Proxy
>
> The same would happen to the usual suspects (equals, hashCode). I'm not
> sure
> if this is a design constraint.
>
>
>
> Maurice Nicholson-2 wrote:
> >
> > Hey all,
> >
> > I *love* the fact the Maps can be coerced into arbitrary types. It's
> what
> > I
> > use all the time in Groovy unit tests.
> >
> > But what's up with this? I can't seem to override or invoke the toString
> > in
> > a Map coerced to org.compass.core.CompassQuery, but a URL proxy Map
> works
> > fine:
> >
> > --- console ---
> >
> > import org.compass.core.CompassQuery
> >
> > def query = [toString: {-> 'this is the query'}] as CompassQuery
> >
> > println query.toString()
> > println query.'toString'()
> >
> > def socket = [toString: {-> 'this is the socket'}] as Socket
> >
> > println socket.toString()
> >
> > --- output ----
> >
> > groovy> import org.compass.core.CompassQuery
> > groovy> def query = [toString: {-> 'this is the query'}] as CompassQuery
> > groovy> println query.toString()
> > groovy> println query.'toString'()
> > groovy> def socket = [toString: {-> 'this is the socket'}] as Socket
> > groovy> println socket.toString()
> >
> > ["toString":Script3$_run_closure1@bccf21]
> > ["toString":Script3$_run_closure1@bccf21]
> > this is the socket
> >
> > --- snip ---
> >
> > Any ideas?
> >
> > Thanks,
> > Maurice
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/can%27t-override-toString-in-coerced-Map...-some-of-the-time-tp16990877p16992781.html
> Sent from the groovy - user mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
>    http://xircles.codehaus.org/manage_email
>
>
>

Re: can't override toString in coerced Map... some of the time

by Maurice Nicholson-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

http://jira.codehaus.org/browse/GROOVY-2801

Thanks :-)

2008/5/2 Andres Almiray <aalmiray@...>:

Yes, please raise an issue so that we can keep track of it, thanks.


Maurice Nicholson-2 wrote:
>
> So it's a bug?
>
> Shall I JIRA it?
>
> 2008/5/1 Andres Almiray <aalmiray@...>:
>
>>
>> Seems like this issue is related to coercing any interface as the
>> following
>> code shows
>>
>> interface Foo {
>>   String foo()
>> }
>> class Bar {
>>   String bar() { "Bar!" }
>>   String toString() { "From Bar" }
>> }
>>
>> def concreteFoo = [
>>   foo: { "Foo!" },
>>   toString: { "from Proxy" }
>> ] as Foo
>> def concreteBar = [
>>   bar: { "Baz!" },
>>   toString: { "from Proxy" }
>> ] as Bar
>>
>> println concreteFoo
>> println concreteBar
>>
>> ------ OUTPUT -------
>>
>> ["foo":Script33$_run_closure1@19d9740,
>> "toString":Script33$_run_closure2@135128f]
>> from Proxy
>>
>> The same would happen to the usual suspects (equals, hashCode). I'm not
>> sure
>> if this is a design constraint.
>>
>>
>>
>> Maurice Nicholson-2 wrote:
>> >
>> > Hey all,
>> >
>> > I *love* the fact the Maps can be coerced into arbitrary types. It's
>> what
>> > I
>> > use all the time in Groovy unit tests.
>> >
>> > But what's up with this? I can't seem to override or invoke the
>> toString
>> > in
>> > a Map coerced to org.compass.core.CompassQuery, but a URL proxy Map
>> works
>> > fine:
>> >
>> > --- console ---
>> >
>> > import org.compass.core.CompassQuery
>> >
>> > def query = [toString: {-> 'this is the query'}] as CompassQuery
>> >
>> > println query.toString()
>> > println query.'toString'()
>> >
>> > def socket = [toString: {-> 'this is the socket'}] as Socket
>> >
>> > println socket.toString()
>> >
>> > --- output ----
>> >
>> > groovy> import org.compass.core.CompassQuery
>> > groovy> def query = [toString: {-> 'this is the query'}] as
>> CompassQuery
>> > groovy> println query.toString()
>> > groovy> println query.'toString'()
>> > groovy> def socket = [toString: {-> 'this is the socket'}] as Socket
>> > groovy> println socket.toString()
>> >
>> > ["toString":Script3$_run_closure1@bccf21]
>> > ["toString":Script3$_run_closure1@bccf21]
>> > this is the socket
>> >
>> > --- snip ---
>> >
>> > Any ideas?
>> >
>> > Thanks,
>> > Maurice
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/can%27t-override-toString-in-coerced-Map...-some-of-the-time-tp16990877p16992781.html
>> Sent from the groovy - user mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe from this list, please visit:
>>
>>    http://xircles.codehaus.org/manage_email
>>
>>
>>
>
>

--
View this message in context: http://www.nabble.com/can%27t-override-toString-in-coerced-Map...-some-of-the-time-tp16990877p17021049.html
Sent from the groovy - user mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

   http://xircles.codehaus.org/manage_email