private void serializeChildFields(VariableLengthIntBuffer buffer, Node nodeInstance, NodeFieldAccessor[] nodeFields) throws UnsupportedConstantPoolTypeException { for (int i = 0; i < nodeFields.length; i++) { NodeFieldAccessor field = nodeFields[i]; if (field.getKind() == NodeFieldKind.CHILD) { Object childObject = unsafe.getObject(nodeInstance, field.getOffset()); if (childObject != null && !(childObject instanceof Node)) { throw new AssertionError("Node children must be instanceof Node"); } serialize(buffer, (Node) childObject); } } }
private void deserializeChildFields(Node parent, NodeFieldAccessor[] nodeFields) { for (int i = nodeFields.length - 1; i >= 0; i--) { NodeFieldAccessor field = nodeFields[i]; if (field.getKind() == NodeFieldKind.CHILD) { unsafe.putObject(parent, field.getOffset(), popNode(parent, field.getType())); } } }
private void deserializeChildrenFields(Node parent, NodeFieldAccessor[] nodeFields) { for (int i = nodeFields.length - 1; i >= 0; i--) { NodeFieldAccessor field = nodeFields[i]; if (field.getKind() == NodeFieldKind.CHILDREN) { unsafe.putObject(parent, field.getOffset(), popArray(parent, field.getType())); } } }
private void deserializeDataFields(VariableLengthIntBuffer buffer, Node nodeInstance, NodeFieldAccessor[] nodeFields) throws UnsupportedConstantPoolTypeException { for (int i = 0; i < nodeFields.length; i++) { NodeFieldAccessor field = nodeFields[i]; if (field.getKind() == NodeFieldKind.DATA) { Class<?> fieldClass = field.getType(); long offset = field.getOffset(); // source sections are not serialized // TODO add support for source sections if (field.getType().isAssignableFrom(SourceSection.class)) { continue; } int cpi = buffer.get(); if (cpi == VariableLengthIntBuffer.NULL) { deserializeDataFieldsLengthNull(nodeInstance, fieldClass, offset); } else { deserializeDataFieldsDefault(nodeInstance, fieldClass, offset, cpi); } } } }
private void serializeChildrenFields(VariableLengthIntBuffer buffer, Node nodeInstance, NodeFieldAccessor[] nodeFields) throws UnsupportedConstantPoolTypeException { for (int i = 0; i < nodeFields.length; i++) { NodeFieldAccessor field = nodeFields[i]; if (field.getKind() == NodeFieldKind.CHILDREN) { Object childArrayObject = unsafe.getObject(nodeInstance, field.getOffset()); if (childArrayObject != null && !(childArrayObject instanceof Node[])) { throw new AssertionError("Node children must be instanceof Node[]"); } buffer.put(cp.putClass(field.getType())); Node[] childArray = (Node[]) childArrayObject; if (childArray == null) { buffer.put(VariableLengthIntBuffer.NULL); } else { buffer.put(cp.putInt(childArray.length)); for (int j = 0; j < childArray.length; j++) { serialize(buffer, childArray[j]); } } } } }
if (field.getKind() == NodeFieldKind.DATA) { Class<?> fieldClass = field.getType(); long offset = field.getOffset(); int cpi;