using System.Linq; using System.Collections.Generic; using CTA.Rules.Config; using TextSpan = Codelyzer.Analysis.Model.TextSpan; namespace CTA.Rules.Models.Tokens { public class NodeToken { public NodeToken() { ExpressionActions = new List(); MemberAccessActions = new List(); PackageActions = new List(); ProjectLevelActions = new List(); ProjectFileActions = new List(); ProjectTypeActions = new List(); TargetCPU = new List(); TextChanges = new List(); } public string Key { get; set; } public string TrimmedKey => !string.IsNullOrEmpty(Key) ? Utils.EscapeAllWhitespace(Key) : string.Empty; public string Namespace { get; set; } public string Type { get; set; } public string FullKey { get; set; } public TextSpan TextSpan { get; set; } public string Description { get; set; } public IList TextChanges { get; set; } public List TargetCPU { get; set; } public List MemberAccessActions { get; set; } public List ExpressionActions { get; set; } public List PackageActions { get; set; } public List ProjectLevelActions { get; set; } public List ProjectFileActions { get; set; } public List ProjectTypeActions { get; set; } public virtual NodeToken Clone() { NodeToken cloned = (NodeToken)this.MemberwiseClone(); cloned.TextChanges = cloned.TextChanges?.Select(textChange => textChange.Clone()).ToList(); cloned.TargetCPU = cloned.TargetCPU?.ToList(); cloned.MemberAccessActions = cloned.MemberAccessActions.Select(action => action.Clone()).ToList(); cloned.ExpressionActions = cloned.ExpressionActions.Select(action => action.Clone()).ToList(); cloned.PackageActions = cloned.PackageActions.Select(action => action.Clone()).ToList(); cloned.ProjectLevelActions = cloned.ProjectLevelActions.Select(action => action.Clone()).ToList(); cloned.ProjectFileActions = cloned.ProjectFileActions.Select(action => action.Clone()).ToList(); cloned.ProjectTypeActions = cloned.ProjectTypeActions.Select(action => action.Clone()).ToList(); return cloned; } public virtual List AllActions { get { var allActions = new List(); allActions.AddRange(MemberAccessActions); allActions.AddRange(ExpressionActions); allActions.AddRange(MemberAccessActions); return allActions; } } } }