private void createSortable(AnnotationNode anno, ClassNode classNode) {
List<String> includes = getMemberStringList(anno, "includes");
List<String> excludes = getMemberStringList(anno, "excludes");
boolean reversed = memberHasValue(anno, "reversed", true);
boolean includeSuperProperties = memberHasValue(anno, "includeSuperProperties", true);
boolean allNames = memberHasValue(anno, "allNames", true);
boolean allProperties = !memberHasValue(anno, "allProperties", false);
if (!checkIncludeExcludeUndefinedAware(anno, excludes, includes, MY_TYPE_NAME)) return;
if (!checkPropertyList(classNode, includes, "includes", anno, MY_TYPE_NAME, false, includeSuperProperties, allProperties)) return;
if (!checkPropertyList(classNode, excludes, "excludes", anno, MY_TYPE_NAME, false, includeSuperProperties, allProperties)) return;
if (classNode.isInterface()) {
addError(MY_TYPE_NAME + " cannot be applied to interface " + classNode.getName(), anno);
}
List<PropertyNode> properties = findProperties(anno, classNode, includes, excludes, allProperties, includeSuperProperties, allNames);
implementComparable(classNode);
addGeneratedMethod(classNode,
"compareTo",
ACC_PUBLIC,
ClassHelper.int_TYPE,
params(param(newClass(classNode), OTHER)),
ClassNode.EMPTY_ARRAY,
createCompareToMethodBody(properties, reversed)
);
for (PropertyNode property : properties) {
createComparatorFor(classNode, property, reversed);
}
new VariableScopeVisitor(sourceUnit, true).visitClass(classNode);
}