@Override protected void putFieldObject(Object field, Node receiver, Object value) { ((NodeFieldAccessor) field).putObject(receiver, value); }
@Override protected void putFieldObject(Object field, Node receiver, Object value) { ((NodeFieldAccessor) field).putObject(receiver, value); }
private static void updateRootImpl(SpecializationNode start, Node node) { NodeFieldAccessor[] fields = NodeClass.get(start).getFields(); for (int i = fields.length - 1; i >= 0; i--) { NodeFieldAccessor f = fields[i]; if (f.getName().equals("root")) { f.putObject(start, node); break; } } if (start.next != null) { updateRootImpl(start.next, node); } }
NodeClass nodeClass = clone.getNodeClass(); nodeClass.getParentField().putObject(clone, null); if (child != null) { Node clonedChild = child.deepCopy(); nodeClass.getParentField().putObject(clonedChild, clone); childField.putObject(clone, clonedChild); Node clonedChild = ((Node) children[i]).deepCopy(); clonedChildren[i] = clonedChild; nodeClass.getParentField().putObject(clonedChild, clone); childrenField.putObject(clone, clonedChildren); Object cloneable = cloneableField.getObject(clone); if (cloneable != null && cloneable == cloneableField.getObject(orig)) { cloneableField.putObject(clone, ((NodeCloneable) cloneable).clone());
public static boolean replaceChild(Node parent, Node oldChild, Node newChild) { NodeClass nodeClass = parent.getNodeClass(); for (NodeFieldAccessor nodeField : nodeClass.getChildFields()) { if (nodeField.getObject(parent) == oldChild) { assert assertAssignable(nodeField, newChild); nodeField.putObject(parent, newChild); return true; } } for (NodeFieldAccessor nodeField : nodeClass.getChildrenFields()) { Object arrayObject = nodeField.getObject(parent); if (arrayObject != null) { Object[] array = (Object[]) arrayObject; for (int i = 0; i < array.length; i++) { if (array[i] == oldChild) { assert assertAssignable(nodeField, newChild); array[i] = newChild; return true; } } } } return false; }