protected static void InitFromModelImpl(string moduleID, IModelObject root, Stack <IModelObject> parents, MemberRefIdx?parent, List <ObjectInfo> res, Dictionary <ObjectRef, IModelObject> mapObjests)
        {
            ObjInfo info = root.GetObjectInfo(moduleID, parents);

            res.Add(new ObjectInfo(info.ID, info.DisplayName, info.ClassName, parent, info.Variables));
            ObjectRef key = info.ID;

            if (mapObjests.ContainsKey(key))
            {
                throw new Exception("Object id is not unique: " + key);
            }
            mapObjests[key] = root;
            if (info.ChildObjects == null)
            {
                return;
            }
            parents.Push(root);
            foreach (ChildObjectsInMember member in info.ChildObjects)
            {
                int i = 0;
                foreach (IModelObject obj in member.ChildObjects)
                {
                    MemberRefIdx par = MemberRefIdx.Make(info.ID, member.MemberName, i);
                    InitFromModelImpl(moduleID, obj, parents, par, res, mapObjests);
                    i += 1;
                }
            }
            parents.Pop();
        }