/// <summary> /// Factory method for Dependency objects. Each /// of the two patterns can be either a "wildcard pattern", /// a regular expression prefix (starting with ^), or /// a regular expression (starting with ^and ending with /// $). /// </summary> /// <param name="usingItemPattern">Pattern for the "user" side /// of a dependency.</param> /// <param name="usedItemPattern">Pattern for the "used" side /// of a dependency.</param> /// <param name="rep">Visible representation of this rule.</param> /// <param name="isAssemblyRule"></param> public static List<DependencyRule> CreateDependencyRules(string usingItemPattern, string usedItemPattern, DependencyRuleRepresentation rep, bool isAssemblyRule) { var result = new List<DependencyRule>(); if (AssemblyRule.Accepts(usingItemPattern, usedItemPattern)) { string expandedUsingItemRegex = ExpandAsterisksForAssemblyRule(usingItemPattern); string expandedUsedItemRegex = ExpandAsterisksForAssemblyRule(usedItemPattern); result.Add(new DependencyRule(new AssemblyRule(expandedUsingItemRegex, usingItemPattern, expandedUsedItemRegex, usedItemPattern), rep)); } else if (SameNamespaceRule.Accepts(usingItemPattern, usedItemPattern)) { result.Add(new DependencyRule(new SameNamespaceRule(), rep)); } else if (PrefixAnyRule.Accepts(usingItemPattern, usedItemPattern)) { result.Add(new DependencyRule(new PrefixAnyRule(usingItemPattern), rep)); } else if (PrefixPrefixRule.Accepts(usingItemPattern, usedItemPattern)) { result.Add(new DependencyRule(new PrefixPrefixRule(usingItemPattern, usedItemPattern), rep)); } else if (PrefixClassRule.Accepts(usingItemPattern, usedItemPattern)) { result.Add(new DependencyRule(new PrefixClassRule(usingItemPattern, usedItemPattern), rep)); } else if (ClassClassRule.Accepts(usingItemPattern, usedItemPattern)) { result.Add(new DependencyRule(new ClassClassRule(usingItemPattern, usedItemPattern), rep)); } else if (GeneralAnyRule.Accepts(usedItemPattern)) { List<string> expandedUsingItemRegexs = Expand(usingItemPattern); result.AddRange( expandedUsingItemRegexs.Select(er => new DependencyRule(new GeneralAnyRule(er, usingItemPattern), rep))); } else if (AnyGeneralRule.Accepts(usingItemPattern)) { List<string> expandedUsedItemRegexs = Expand(usedItemPattern); result.AddRange( expandedUsedItemRegexs.Select(er => new DependencyRule(new AnyGeneralRule(er, usedItemPattern), rep))); } else if (GeneralClassWithoutBackrefRule.Accepts(usingItemPattern, usedItemPattern)) { result.Add(new DependencyRule(new GeneralClassWithoutBackrefRule(usingItemPattern, usedItemPattern), rep)); } else if (GeneralPrefixRule.Accepts(usingItemPattern, usedItemPattern)) { List<string> expandedUsingItemRegexs = Expand(usingItemPattern); result.AddRange( expandedUsingItemRegexs.Select( er => new DependencyRule(new GeneralPrefixRule(er, usingItemPattern, usedItemPattern), rep))); } else if (GeneralClassRule.Accepts(usedItemPattern)) { List<string> expandedUsingItemRegexs = Expand(usingItemPattern); result.AddRange( expandedUsingItemRegexs.Select( er => new DependencyRule(new GeneralClassRule(er, usingItemPattern, usedItemPattern), rep))); } else { List<string> expandedUsingItemRegexs = Expand(usingItemPattern); List<string> expandedUsedItemRegexs = Expand(usedItemPattern); result.AddRange(from er in expandedUsingItemRegexs from ed in expandedUsedItemRegexs select new DependencyRule(new GeneralRule(er, usingItemPattern, ed, usedItemPattern), rep)); } return result; }
private static IEnumerable <DependencyRule> CreateDependencyRules(DependencyRuleSet parent, string ruleFileName, uint lineNo, string line, string sep, bool questionableRule) { DependencyRuleRepresentation rep = new DependencyRuleRepresentation(ruleFileName, lineNo, line, questionableRule); int i = line.IndexOf(sep); string usingPattern = parent.ExpandDefines(line.Substring(0, i).Trim()); string usedPattern = parent.ExpandDefines(line.Substring(i + sep.Length).Trim()); List <DependencyRule> deps = DependencyRule.CreateDependencyRules(usingPattern, usedPattern, rep); if (Log.IsVerboseEnabled) { Log.WriteInfo(String.Format("Rules used for checking {0} ({1}:{2})", line, ruleFileName, lineNo)); foreach (DependencyRule d in deps) { Log.WriteInfo(" " + d); } } return(deps); }
// Dependency rules are created from lines with // a specific extension algorithm (see CreateDependencyRules() // below. Hence, the constructor is private. private DependencyRule(IRuleMatch ruleMatch, DependencyRuleRepresentation rep) { _ruleMatch = ruleMatch; _rep = rep; }
private static IEnumerable<DependencyRule> CreateDependencyRules(DependencyRuleSet parent, string ruleFileName, uint lineNo, string line, string sep, bool questionableRule) { DependencyRuleRepresentation rep = new DependencyRuleRepresentation(ruleFileName, lineNo, line, questionableRule); int i = line.IndexOf(sep); string usingPattern = parent.ExpandDefines(line.Substring(0, i).Trim()); string usedPattern = parent.ExpandDefines(line.Substring(i + sep.Length).Trim()); List<DependencyRule> deps = DependencyRule.CreateDependencyRules(usingPattern, usedPattern, rep); if (Log.IsVerboseEnabled) { Log.WriteInfo(String.Format("Rules used for checking {0} ({1}:{2})", line, ruleFileName, lineNo)); foreach (DependencyRule d in deps) { Log.WriteInfo(" " + d); } } return deps; }
/// <summary> /// Factory method for Dependency objects. Each /// of the two patterns can be either a "wildcard pattern", /// a regular expression prefix (starting with ^), or /// a regular expression (starting with ^and ending with /// $). /// </summary> /// <param name="usingItemPattern">Pattern for the "user" side /// of a dependency.</param> /// <param name="usedItemPattern">Pattern for the "used" side /// of a dependency.</param> /// <param name="rep">Visible representation of this rule.</param> public static List <DependencyRule> CreateDependencyRules(string usingItemPattern, string usedItemPattern, DependencyRuleRepresentation rep) { var result = new List <DependencyRule>(); if (SameNamespaceRule.Accepts(usingItemPattern, usedItemPattern)) { result.Add(new DependencyRule(new SameNamespaceRule(), rep)); } else if (PrefixAnyRule.Accepts(usingItemPattern, usedItemPattern)) { result.Add(new DependencyRule(new PrefixAnyRule(usingItemPattern), rep)); } else if (PrefixPrefixRule.Accepts(usingItemPattern, usedItemPattern)) { result.Add(new DependencyRule(new PrefixPrefixRule(usingItemPattern, usedItemPattern), rep)); } else if (PrefixClassRule.Accepts(usingItemPattern, usedItemPattern)) { result.Add(new DependencyRule(new PrefixClassRule(usingItemPattern, usedItemPattern), rep)); } else if (ClassClassRule.Accepts(usingItemPattern, usedItemPattern)) { result.Add(new DependencyRule(new ClassClassRule(usingItemPattern, usedItemPattern), rep)); } else if (GeneralAnyRule.Accepts(usedItemPattern)) { List <string> expandedUsingItemRegexs = Expand(usingItemPattern); result.AddRange( expandedUsingItemRegexs.Select(er => new DependencyRule(new GeneralAnyRule(er, usingItemPattern), rep))); } else if (AnyGeneralRule.Accepts(usingItemPattern)) { List <string> expandedUsedItemRegexs = Expand(usedItemPattern); result.AddRange( expandedUsedItemRegexs.Select(er => new DependencyRule(new AnyGeneralRule(er, usedItemPattern), rep))); } else if (GeneralClassWithoutBackrefRule.Accepts(usingItemPattern, usedItemPattern)) { result.Add(new DependencyRule(new GeneralClassWithoutBackrefRule(usingItemPattern, usedItemPattern), rep)); } else if (GeneralPrefixRule.Accepts(usingItemPattern, usedItemPattern)) { List <string> expandedUsingItemRegexs = Expand(usingItemPattern); result.AddRange( expandedUsingItemRegexs.Select( er => new DependencyRule(new GeneralPrefixRule(er, usingItemPattern, usedItemPattern), rep))); } else if (GeneralClassRule.Accepts(usedItemPattern)) { List <string> expandedUsingItemRegexs = Expand(usingItemPattern); result.AddRange( expandedUsingItemRegexs.Select( er => new DependencyRule(new GeneralClassRule(er, usingItemPattern, usedItemPattern), rep))); } else { List <string> expandedUsingItemRegexs = Expand(usingItemPattern); List <string> expandedUsedItemRegexs = Expand(usedItemPattern); result.AddRange(from er in expandedUsingItemRegexs from ed in expandedUsedItemRegexs select new DependencyRule(new GeneralRule(er, usingItemPattern, ed, usedItemPattern), rep)); } return(result); }