// --------------------------------------------------------------------------- // Copyright (C) 2005 Microsoft Corporation All Rights Reserved // --------------------------------------------------------------------------- #define CODE_ANALYSIS using System.CodeDom; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Reflection; namespace System.Workflow.Activities.Rules { public class RulePathQualifier { private string name; private RulePathQualifier next; public RulePathQualifier(string name, RulePathQualifier next) { this.name = name; this.next = next; } public string Name { get { return name; } } public RulePathQualifier Next { get { return next; } } } public class RuleAnalysis { private RuleValidation validation; private bool forWrites; private Dictionary symbols = new Dictionary(); public RuleAnalysis(RuleValidation validation, bool forWrites) { this.validation = validation; this.forWrites = forWrites; } internal RuleValidation Validation { get { return validation; } } public bool ForWrites { get { return forWrites; } } public void AddSymbol(string symbol) { symbols[symbol] = null; } [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] public ICollection GetSymbols() { List symbolList = new List(symbols.Keys.Count); foreach (KeyValuePair pair in symbols) symbolList.Add(pair.Key); return symbolList; } #region RuleAttribute Analysis internal void AnalyzeRuleAttributes(MemberInfo member, CodeExpression targetExpr, RulePathQualifier targetQualifier, CodeExpressionCollection argExprs, ParameterInfo[] parameters, List attributedExprs) { object[] attrs = member.GetCustomAttributes(typeof(RuleAttribute), true); if (attrs != null && attrs.Length > 0) { RuleAttribute[] ruleAttrs = (RuleAttribute[])attrs; for (int i = 0; i < ruleAttrs.Length; ++i) ruleAttrs[i].Analyze(this, member, targetExpr, targetQualifier, argExprs, parameters, attributedExprs); } } #endregion } }