code: public static Object previous(Enum self) {
          final Method[] methods = self.getClass().getMethods();
          for (Method method : methods) {
              if (method.getName().equals("previous") && method.getParameterTypes().length == 0) {
                  return InvokerHelper.invokeMethod(self, "previous", NO_ARGS);
              }
          }
          Object[] values = (Object[]) InvokerHelper.invokeStaticMethod(self.getClass(), "values", NO_ARGS);
          int index = Arrays.asList(values).indexOf(self);
          return values[index > 0 ? index - 1 : values.length - 1];
      }
docs: This method is called by the -- operator for enums. It will invoke
  Groovy's default previous behaviour for enums that do not have
  their own previous method.
  
  @param self an Enum
  @return the previous defined enum from the enum class