private void writeValue( CDODataOutput out, EClass owner, EStructuralFeature[] features, int i, int referenceChunk) throws IOException { EStructuralFeature feature = features[i]; Object value = getValue(i); if (value == null) { // Feature is NOT set out.writeByte(UNSET_OPCODE); return; } // Feature IS set if (value == CDORevisionData.NIL) { // Feature IS null out.writeByte(SET_NULL_OPCODE); return; } // Feature is NOT null out.writeByte(SET_NOT_NULL_OPCODE); if (feature.isMany()) { CDOList list = (CDOList) value; out.writeCDOList(owner, feature, list, referenceChunk); } else { checkNoFeatureMap(feature); if (feature instanceof EReference) { value = out.getIDProvider().provideCDOID(value); } if (TRACER.isEnabled()) { TRACER.format("Writing feature {0}: {1}", feature.getName(), value); } out.writeCDOFeatureValue(feature, value); } }