Example #1
0
 /// <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;
 }
Example #2
0
        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);
        }
Example #3
0
 // 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;
 }
Example #4
0
        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;
        }
Example #5
0
        /// <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);
        }
Example #6
0
 // 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;
 }