// incoming array is already registered protected void writeArray(FSTClazzInfo.FSTFieldInfo referencee, Object array) throws IOException { if (array == null) { codec.writeClass(Object.class); codec.writeFInt(-1); return; } final int len = Array.getLength(array); Class<?> componentType = array.getClass().getComponentType(); codec.writeClass(array.getClass()); codec.writeFInt(len); if (!componentType.isArray()) { if (codec.isPrimitiveArray(array, componentType)) { codec.writePrimitiveArray(array, 0, len); } else { // objects Object arr[] = (Object[]) array; for (int i = 0; i < len; i++) { Object toWrite = arr[i]; writeObjectWithContext(referencee, toWrite); } } } else { // multidim array. FIXME shared refs to subarrays are not tested !!! Object[] arr = (Object[]) array; FSTClazzInfo.FSTFieldInfo ref1 = new FSTClazzInfo.FSTFieldInfo( referencee.getPossibleClasses(), null, conf.getCLInfoRegistry().isIgnoreAnnotations()); for (int i = 0; i < len; i++) { Object subArr = arr[i]; boolean needsWrite = true; if (codec.isTagMultiDimSubArrays()) { if (subArr == null) { needsWrite = !codec.writeTag(NULL, null, 0, null); } else { needsWrite = !codec.writeTag(ARRAY, subArr, 0, subArr); } } if (needsWrite) writeArray(ref1, subArr); } } }
public FSTClazzInfoRegistry getClassInfoRegistry() { return conf.getCLInfoRegistry(); }