groovy.transform

## Annotation Type Sortable

-     @Retention(value=RUNTIME)
      @Target(value=TYPE)
      public @interface Sortable

  A class annotation used to make a class Comparable by multiple Comparators. As an example, given this class:

       @Sortable class Person {
           String first
           String last
           Integer born
       }

  The generated Groovy class will:
  - implement the `Comparable` interface
  - have a `compareTo` method based on the `first`, `last` and `born` properties (priority ordering will be according to the ordering of property definition, highest first, unless 'includes' is used; in which case, priority will be according to the order given in the includes list)
  - have three `Comparator` methods named `comparatorByFirst`, `comparatorByLast` and `comparatorByBorn`
  The properties within the class must themselves be `Comparable` or `@Sortable`.
  Author:
    Andres Almiray, Paul King

- - ### Optional Element Summary

    Optional Elements
    Modifier and Type | Optional Element and Description
    --- | ---
    `String[]` | `excludes` Property names to exclude in the comparison algorithm.
    `String[]` | `includes` Property names to include in the comparison algorithm.

- - ### Element Detail

    - #### includes

          public abstract String[] includes

      Property names to include in the comparison algorithm. Must not be used if 'excludes' is used.
      Default:
        {}

    - #### excludes

          public abstract String[] excludes

      Property names to exclude in the comparison algorithm. Must not be used if 'includes' is used.
      Default:
        {}