Inheritance: DataDictionary.Types.Type
 public virtual void visit(Structure obj)
 {
     visit(obj, true);
 }
 public virtual void visit(Structure obj, bool visitSubNodes)
 {
     visit ((Type) obj, false);
     if (visitSubNodes){
     IXmlBBase[] Subs  = acceptor.subElements((IXmlBBase)obj);
     if (Subs != null){
     for (int i=0; i<Subs.Length; i++) {
       dispatch(Subs[i], true);
     } // If
     } // If
     }
 }
 public void copyTo(Structure other)
 {
     base.copyTo(other);
     other.aElements = aElements;
     other.aProcedures = aProcedures;
     other.aStateMachines = aStateMachines;
     other.aRules = aRules;
     other.aInterfaces = aInterfaces;
     other.aIsAbstract = aIsAbstract;
 }
 public void insertStructures(int idx, Structure el,Lock aLock)
 {
     __setDirty(true);
       allStructures().Insert (idx, el);
     NotifyControllers(aLock);
 }
 public void appendStructures(Lock aLock,Structure el)
 {
     __setDirty(true);
       el.__setDirty(true);
       allStructures().Add(el);
       acceptor.connectSon (this, el);
     NotifyControllers(aLock);
 }
 public void copyTo(Structure other)
 {
     base.copyTo(other);
     other.aElements = aElements;
     other.aProcedures = aProcedures;
     other.aStateMachines = aStateMachines;
     other.aRules = aRules;
 }
        public override void visit(Structure obj, bool visitSubNodes)
        {
            Types.Structure structure = obj as Types.Structure;

            if (structure != null)
            {
                foreach (Types.StructureElement element in structure.Elements)
                {
                    Types.Structure elementType = element.Type as Types.Structure;
                    if (elementType != null)
                    {
                        foreach (Types.StructureElement subElement in elementType.Elements)
                        {
                            if (!ValidMode(element.Mode, subElement.Mode))
                            {
                                element.AddWarning("Invalid mode for " + subElement.Name);
                            }
                        }
                    }
                    if (element.Type != null && element.Type.IsAbstract)
                    {
                        element.AddError("Instantiation of abstract types is forbidden");
                    }
                    if (!Utils.Util.isEmpty(element.getDefault()))
                    {
                        checkExpression(element, element.getDefault());
                    }
                }
                foreach (Types.Structure implementedStructure in structure.Interfaces)
                {
                    foreach (Types.StructureElement implementedElement in implementedStructure.Elements)
                    {
                        bool elementFound = false;
                        foreach (Types.StructureElement element in structure.Elements)
                        {
                            if (element.Name.Equals(implementedElement.Name))
                            {
                                elementFound = true;
                                if (element.Type != implementedElement.Type)
                                {
                                    structure.AddError("The type of element " + element.Name + " (" + element.TypeName +
                                                       ") does not correspond to the type of the implemented element (" +
                                                       implementedElement.TypeName + ")");
                                }
                                break;
                            }
                        }
                        if (elementFound == false)
                        {
                            structure.AddError("Inherited member " + implementedElement.Name + " from interface " +
                                               implementedStructure.Name + " is not implemented");
                        }
                    }
                }
            }

            checkSubElementNames(structure);

            base.visit(obj, visitSubNodes);
        }