String name = fieldNode.getName();
if (excludes.contains(name)) continue;
PropertyExpression direct = new PropertyExpression(other, name);
Expression cloned = new MethodCallExpression(direct, "clone", MethodCallExpression.NO_ARGUMENTS);
Expression to = new PropertyExpression(VariableExpression.THIS_EXPRESSION, name);
Statement assignCloned = assignStatement(to, cloned);
Statement assignDirect = assignStatement(to, direct);
initBody.addStatement(new IfStatement(isInstanceOf(direct, CLONEABLE_TYPE), assignCloned, assignDirect));
}
ClassNode[] exceptions = {ClassHelper.make(CloneNotSupportedException.class)};
cNode.addConstructor(ACC_PROTECTED, new Parameter[]{initParam}, ClassNode.EMPTY_ARRAY, initBody);
final BlockStatement cloneBody = new BlockStatement();