public static PersistentReturnType Resolve(IReturnType source, ITypeResolver typeResolver)
        {
            if (source == null) return null;

            PersistentReturnType rt = new PersistentReturnType ();
            rt.FullyQualifiedName = typeResolver.Resolve (source.FullyQualifiedName);
            rt.pointerNestingLevel = source.PointerNestingLevel;
            rt.arrayDimensions = source.ArrayDimensions;
            return rt;
        }
        public static PersistentReturnType Read(BinaryReader reader, INameDecoder nameTable)
        {
            if (PersistentHelper.ReadNull (reader)) return null;

            PersistentReturnType rt = new PersistentReturnType ();
            rt.FullyQualifiedName = PersistentHelper.ReadString (reader, nameTable);

            rt.pointerNestingLevel = reader.ReadInt32();

            uint count = reader.ReadUInt32();
            rt.arrayDimensions = new int[count];
            for (uint i = 0; i < rt.arrayDimensions.Length; ++i) {
                rt.arrayDimensions[i] = reader.ReadInt32();
            }
            return rt;
        }