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 14:03:43 GMT
Now I also understand why it failed to compile.

As a side note, this crazy code (don't try this at home) works

    interface Foo extends Comparable<Bar> {}
    @Sortable class Bar implements Foo {}


On 12/11/2015 13:49, Paul King wrote:
> Yes, it was in 2.3.4 to make @Sortable work with @CompileStatic/@TypeChecked.
> See here:
> https://issues.apache.org/jira/browse/GROOVY-6870
> and
> SortableTransformTest#testSortableWithCompileStatic
>
> Cheers, Paul.
>
>
> On Thu, Nov 12, 2015 at 10:48 PM, Schalk Cronjé <ysb33r@gmail.com> wrote:
>> 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


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


Mime
View raw message