public void visit(ASTNode[] nodes, SourceUnit source) { init(nodes, source); AnnotatedNode parent = (AnnotatedNode) nodes[1]; AnnotationNode anno = (AnnotationNode) nodes[0]; if (!MY_TYPE.equals(anno.getClassNode())) return; if (parent instanceof ClassNode) { ClassNode cNode = (ClassNode) parent; if (!checkNotInterface(cNode, MY_TYPE_NAME)) return; boolean callSuper = memberHasValue(anno, "callSuper", true); boolean cacheHashCode = memberHasValue(anno, "cache", true); boolean useCanEqual = !memberHasValue(anno, "useCanEqual", false); if (callSuper && cNode.getSuperClass().getName().equals("java.lang.Object")) { addError("Error during " + MY_TYPE_NAME + " processing: callSuper=true but '" + cNode.getName() + "' has no super class.", anno); } boolean includeFields = memberHasValue(anno, "includeFields", true); List<String> excludes = getMemberStringList(anno, "excludes"); List<String> includes = getMemberStringList(anno, "includes"); final boolean allNames = memberHasValue(anno, "allNames", true); final boolean allProperties = memberHasValue(anno, "allProperties", true); if (!checkIncludeExcludeUndefinedAware(anno, excludes, includes, MY_TYPE_NAME)) return; if (!checkPropertyList(cNode, includes, "includes", anno, MY_TYPE_NAME, includeFields)) return; if (!checkPropertyList(cNode, excludes, "excludes", anno, MY_TYPE_NAME, includeFields)) return; createHashCode(cNode, cacheHashCode, includeFields, callSuper, excludes, includes, allNames, allProperties); createEquals(cNode, includeFields, callSuper, useCanEqual, excludes, includes, allNames, allProperties); } }