/// <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); }
/// <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); }