/// <summary>
        /// Applied to all nodes of the tree
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="visitSubNodes"></param>
        public override void visit(Generated.Namable obj, bool visitSubNodes)
        {
            Namable namable = (Namable)obj;

            if (obj is Types.ITypedElement)
            {
                Types.ITypedElement typedElement = obj as Types.ITypedElement;

                Types.Type type = typedElement.Type;
                if (type == null)
                {
                    namable.AddError("Cannot find type " + typedElement.TypeName);
                }
                else if (!(typedElement is Parameter) && !(type is Types.StateMachine))
                {
                    Types.ITypedElement enclosingTypedElement = Utils.EnclosingFinder <Types.ITypedElement> .find(typedElement);

                    while (enclosingTypedElement != null)
                    {
                        if (enclosingTypedElement.Type == type)
                        {
                            namable.AddError("Recursive types are not allowed for " + type.Name);
                            enclosingTypedElement = null;
                        }
                        else
                        {
                            enclosingTypedElement = Utils.EnclosingFinder <Types.ITypedElement> .find(enclosingTypedElement);
                        }
                    }
                }
            }

            base.visit(obj, visitSubNodes);
        }
Example #2
0
        /// <summary>
        ///     The name of the element
        /// </summary>
        /// <param name="element"></param>
        public void Name(ModelElement element)
        {
            Namable namable = element as Namable;

            if (namable != null)
            {
                Comment(namable.Name);
            }
        }
            /// <summary>
            ///     Updates the names of model elements to ensure that they match the defined naming convention
            /// </summary>
            /// <param name="obj"></param>
            /// <param name="visitSubNodes"></param>
            public override void visit(DataDictionary.Generated.Namable obj, bool visitSubNodes)
            {
                DataDictionary.Namable namable = (DataDictionary.Namable)obj;
                string newName = "";

                if (namable is Parameter)
                {
                    newName = EnsurePrefix(namable.Name, ParameterPrefix);
                }
                else if (namable is DataDictionary.Types.Structure)
                {
                    DataDictionary.Types.Structure structure = (DataDictionary.Types.Structure)namable;
                    if (structure.IsAbstract)
                    {
                        newName = EnsurePrefix(namable.Name, InterfacePrefix);
                    }
                    else
                    {
                        newName = EnsureSuffix(namable.Name, StructureSuffix);
                    }
                }
                else if (namable is DataDictionary.Types.Enum)
                {
                    newName = EnsureSuffix(namable.Name, EnumSuffix);
                }
                else if (namable is DataDictionary.Types.Collection)
                {
                    newName = EnsureSuffix(namable.Name, CollectionSuffix);
                }
                else if (namable is DataDictionary.Types.StateMachine)
                {
                    if (namable.Enclosing is DataDictionary.Types.NameSpace)
                    {
                        newName = EnsureSuffix(namable.Name, StateMachineSuffix);
                    }
                }
                else if (namable is DataDictionary.Tests.Step)
                {
                    newName = RemoveStepNumber(namable.Name);
                }

                if (!string.IsNullOrEmpty(newName))
                {
                    EfsSystem.Instance.Compiler.Refactor(obj, newName);
                }

                base.visit(obj, visitSubNodes);
            }