Author: jbevain
Date: 2007-03-01 05:04:35 -0500 (Thu, 01 Mar 2007)
New Revision: 73583

Modified:
   trunk/cecil/gendarme/framework/ChangeLog
   trunk/cecil/gendarme/framework/Runner.cs
Log:
2007-03-01  Jb Evain  <[EMAIL PROTECTED]>

        * Runner.cs: Do some refactoring.


Modified: trunk/cecil/gendarme/framework/ChangeLog
===================================================================
--- trunk/cecil/gendarme/framework/ChangeLog    2007-03-01 09:59:00 UTC (rev 
73582)
+++ trunk/cecil/gendarme/framework/ChangeLog    2007-03-01 10:04:35 UTC (rev 
73583)
@@ -1,3 +1,7 @@
+2007-03-01  Jb Evain  <[EMAIL PROTECTED]>
+
+       * Runner.cs: Do some refactoring.
+
 2006-11-23  Sebastien Pouliot  <[EMAIL PROTECTED]>
 
        * Runner.cs: I forgot that constructors were kept apart from methods.

Modified: trunk/cecil/gendarme/framework/Runner.cs
===================================================================
--- trunk/cecil/gendarme/framework/Runner.cs    2007-03-01 09:59:00 UTC (rev 
73582)
+++ trunk/cecil/gendarme/framework/Runner.cs    2007-03-01 10:04:35 UTC (rev 
73583)
@@ -91,76 +91,79 @@
                        int total = 0;
                        Assembly a = Assembly.LoadFile (Path.GetFullPath 
(assembly));
                        foreach (Type t in a.GetTypes ()) {
-                               if (t.IsAbstract)
+                               if (t.IsAbstract || t.IsInterface)
                                        continue;
 
-                               bool added = false;
-                               if (t.GetInterface 
("Gendarme.Framework.IAssemblyRule") != null) {
-                                       Rules.Assembly.Add (CreateRuleFromType 
(t));
-                                       added = true;
-                               }
-                               if (t.GetInterface 
("Gendarme.Framework.IModuleRule") != null) {
-                                       Rules.Module.Add (CreateRuleFromType 
(t));
-                                       added = true;
-                               }
-                               if (t.GetInterface 
("Gendarme.Framework.ITypeRule") != null) {
-                                       Rules.Type.Add (CreateRuleFromType (t));
-                                       added = true;
-                               }
-                               if (t.GetInterface 
("Gendarme.Framework.IMethodRule") != null) {
-                                       Rules.Method.Add (CreateRuleFromType 
(t));
-                                       added = true;
-                               }
-                               if (added)
-                                       total++;
+                               LoadRules (typeof (IAssemblyRule), t, 
Rules.Assembly, ref total);
+                               LoadRules (typeof (IModuleRule), t, 
Rules.Module, ref total);
+                               LoadRules (typeof (ITypeRule), t, Rules.Type, 
ref total);
+                               LoadRules (typeof (IMethodRule), t, 
Rules.Method, ref total);
                        }
                        return total;
                }
 
+               void LoadRules (Type rule, Type type, RuleCollection rules, ref 
int count)
+               {
+                       if (!rule.IsAssignableFrom (type))
+                               return;
+
+                       rules.Add (CreateRuleFromType (type));
+                       count++;
+               }
+
                public void Process (AssemblyDefinition assembly)
                {
-                       MessageCollection messages;
-                       foreach (IAssemblyRule rule in Rules.Assembly) {
-                               messages = rule.CheckAssembly(assembly, this);
-                               if (messages != RuleSuccess)
-                                       Violations.Add (rule, assembly, 
messages);
-                       }
+                       CheckAssembly (assembly);
 
                        foreach (ModuleDefinition module in assembly.Modules) {
+                               CheckModule (module);
 
-                               foreach (IModuleRule rule in Rules.Module) {
-                                       messages = rule.CheckModule(assembly, 
module, this);
-                                       if (messages != RuleSuccess)
-                                               Violations.Add (rule, module, 
messages);
-                               }
+                               foreach (TypeDefinition type in module.Types)
+                                       CheckType (type);
+                       }
+               }
 
-                               foreach (TypeDefinition type in module.Types) {
+               void CheckAssembly (AssemblyDefinition assembly)
+               {
+                       foreach (IAssemblyRule rule in Rules.Assembly)
+                               ProcessMessages (rule.CheckAssembly (assembly, 
this), rule, assembly);
+               }
 
-                                       foreach (ITypeRule rule in Rules.Type) {
-                                               messages = 
rule.CheckType(assembly, module, type, this);
-                                               if (messages != RuleSuccess)
-                                                       Violations.Add (rule, 
type, messages);
-                                       }
+               void CheckModule (ModuleDefinition module)
+               {
+                       foreach (IModuleRule rule in Rules.Module)
+                               ProcessMessages (rule.CheckModule 
(module.Assembly, module, this), rule, module);
+               }
 
-                                       foreach (MethodDefinition method in 
type.Constructors) {
+               void CheckType (TypeDefinition type)
+               {
+                       foreach (ITypeRule rule in Rules.Type)
+                               ProcessMessages (
+                                       rule.CheckType (type.Module.Assembly, 
type.Module, type, this), rule, type);
 
-                                               foreach (IMethodRule rule in 
Rules.Method) {
-                                                       messages = 
rule.CheckMethod (assembly, module, type, method, this);
-                                                       if (messages != 
RuleSuccess)
-                                                               Violations.Add 
(rule, method, messages);
-                                               }
-                                       }
+                       CheckMethods (type);
+               }
 
-                                       foreach (MethodDefinition method in 
type.Methods) {
+               void CheckMethods (TypeDefinition type)
+               {
+                       CheckMethods (type, type.Constructors);
+                       CheckMethods (type, type.Methods);
+               }
 
-                                               foreach (IMethodRule rule in 
Rules.Method) {
-                                                       messages = 
rule.CheckMethod(assembly, module, type, method, this);
-                                                       if (messages != 
RuleSuccess)
-                                                               Violations.Add 
(rule, method, messages);
-                                               }
-                                       }
-                               }
-                       }
+               void CheckMethods (TypeDefinition type, ICollection methods)
+               {
+                       foreach (MethodDefinition method in methods)
+                               foreach (IMethodRule rule in Rules.Method)
+                                       ProcessMessages (rule.CheckMethod (
+                                               type.Module.Assembly, 
type.Module, type, method, this), rule, method);
                }
+
+               void ProcessMessages (MessageCollection messages, IRule rule, 
object target)
+               {
+                       if (messages == RuleSuccess)
+                               return;
+
+                       Violations.Add (rule, target, messages);
+               }
        }
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to