/// <summary> /// Adds a concrete template to the state collection /// </summary> public TemplateInfo AddConcrete(ITemplateInfo item) { var templateInfo = new TemplateInfo(item, _parameters.ItemNamespace); templateInfo.FullName = _templateNovelizer.GetNovelFullTypeName(item.Name, item.FullPath); _templateLookup.Add(item.TemplateId, templateInfo); _templates.Add(templateInfo); return templateInfo; }
private List<TemplateInfo> GetRecursiveBaseTemplates(TemplateInfo parent) { var parentBases = parent.BaseTemplates.Where(x => x.Template.Name.ToUpperInvariant() != "STANDARD TEMPLATE").ToList(); // we just want NON-standard base templates var bases = new List<TemplateInfo>(parentBases); // we instance this collection off as it gets modified during the enumeration of parentBases (thus we couldn't enumerate it) foreach (var baseTemplate in parentBases) { bases.AddRange(GetRecursiveBaseTemplates(baseTemplate)); } return bases; }
/// <summary> /// Adds a friend interface template to the state collection. Friend interfaces may be used as base interfaces for the same template locally. /// </summary> public void AddFriendInterface(TemplateInfo item) { _friendInterfaceLookup.Add(item.Template.TemplateId, item); }
/// <summary> /// Adds a interface template to the state collection /// </summary> public TemplateInfo AddInterface(ITemplateInfo item, string interfaceSuffix) { if (_friendInterfaceLookup.ContainsKey(item.TemplateId)) throw new InvalidOperationException("The template " + item.FullPath + " is already added as a friend interface and cannot be added again."); var templateInfo = new TemplateInfo(item, _parameters.InterfaceNamespace); string interfaceName = "I" + item.Name.AsIdentifier() + interfaceSuffix; string interfaceFullPath = item.FullPath.Substring(0, item.FullPath.LastIndexOf('/') + 1) + interfaceName; templateInfo.FullName = _interfaceNovelizer.GetNovelFullTypeName(interfaceName, interfaceFullPath); _interfaceLookup.Add(item.TemplateId, templateInfo); _interfaces.Add(templateInfo); return templateInfo; }