groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Schalk Cronjé <ysb...@gmail.com>
Subject Re: Different behaviour for @Sortable 2.3.6+
Date Thu, 12 Nov 2015 12:48:54 GMT
Paul,

That must have been a change introduced between Groovy 2.3.3 (which 
ships with Gradle 2.0) and Groovy 2.3.6

The below code compiled against the Gradle 2.0 version, but failed it 
compiled against later Gradle versions (due to newer versions of Groovy)

    interface Foo extends Comparable {
       String getVersion()
       File getLocation()
    }

    @EqualsAndHashCode(excludes=['location'])
    @TupleConstructor
    @Sortable(excludes=['location'])
    @ToString
    class Bar implements Foo {
       String version
       File location
    }

I guess I can drop the Comparable from the Foo interface or change it to 
an abstract class that is annotated with @Sortable.

Thanks for the clarification.

On 12/11/2015 12:35, Paul King wrote:
> @Sortable on a class Foo will add "Comparable<Foo>" to the list of
> implemented interfaces and a "compareTo(Foo other)" method.
>
> If you also implement the raw Comparable interface manually you will
> need to also add a "compareTo(Object other)" method but the raw
> version is not required or typically recommended.
>
> Cheers, Paul.
>
> On Thu, Nov 12, 2015 at 3:18 PM, Balachandran Sivakumar
> <benignbala@gmail.com> wrote:
>> Hi,
>>
>>              Just looked up the Groovy doc - The doc for @Sortable[1] says
>> that the generated Groovy class will implement the Comparable interface.
>> Thanks
>>
>> [1]
>> http://docs.groovy-lang.org/next/html/gapi/groovy/transform/Sortable.html
>>
>> On Thu, Nov 12, 2015 at 10:21 AM, Balachandran Sivakumar
>> <benignbala@gmail.com> wrote:
>>> Hi Schalk,
>>>
>>> This works on 2.4.5
>>>
>>> @EqualsAndHashCode(excludes = ['config'])
>>> @Sortable(excludes = ['config'])
>>> @TupleConstructor
>>> @ToString
>>> class Foo {
>>>      String version
>>>      File config
>>> }
>>>
>>> I just have @Sortable annotation. From Groovy 2.3, Sortable implements
>>> Comparable is what I understand from the Groovy Goodness page on this
>>> topic[1]. So, just the class which is annotated with @Sortable is enough. I
>>> think We don't have to implement an "interface" at all. Thanks
>>>
>>> [1]
>>> http://mrhaki.blogspot.in/2014/05/groovy-goodness-use-sortable-annotation.html
>>>
>>>
>>> On Wed, Nov 11, 2015 at 11:03 PM, Schalk Cronjé <ysb33r@gmail.com> wrote:
>>>> Bala,
>>>>
>>>> That does not make sense, as the following will also fail:
>>>>
>>>> interface Foo extends Comparable {
>>>>    String getVersion()
>>>>    File getLocation()
>>>> }
>>>>
>>>> @EqualsAndHashCode(excludes=['location'])
>>>> @TupleConstructor
>>>> @Sortable(excludes=['location'])
>>>> @ToString
>>>> class Bar implements Foo {
>>>>    String version
>>>>    File location
>>>> }
>>>>
>>>>
>>>> On 11/11/2015 16:55, Balachandran Sivakumar wrote:
>>>>
>>>> Hi Schalk,
>>>>
>>>>
>>>>
>>>> On Wed, Nov 11, 2015 at 9:09 PM, Schalk Cronjé <ysb33r@gmail.com>
wrote:
>>>>> This following code works under 2.3.3, but fails under 2.3.6 - 2.4.5
>>>>>
>>>>> @EqualsAndHashCode(excludes=['location'])
>>>>> @TupleConstructor
>>>>> @Sortable(excludes=['location'])
>>>>> @ToString
>>>>> class Bar implements Comparable {
>>>>
>>>>             I think @Sortable automatically makes it Comparable. So, we
>>>> don't have to "implement" Comparable if we use the @Sortable annotation.
>>>> Without the implements Comparable part, this works fine for me on groovy
>>>> 2.4.5. Thanks
>>>>
>>>>
>>>> --
>>>> Thank you
>>>> Balachandran Sivakumar
>>>>
>>>>
>>>>
>>>> --
>>>> Schalk W. Cronjé
>>>> Twitter / Ello / Toeter : @ysb33r
>>>
>>>
>>>
>>> --
>>> Thank you
>>> Balachandran Sivakumar
>>>
>>
>>
>> --
>> Thank you
>> Balachandran Sivakumar
>>


-- 
Schalk W. Cronjé
Twitter / Ello / Toeter : @ysb33r


Mime
View raw message