diff options
author | Sebastien Pouliot <sebastien@ximian.com> | 2010-06-05 05:49:40 +0400 |
---|---|---|
committer | Sebastien Pouliot <sebastien@ximian.com> | 2010-06-05 05:49:40 +0400 |
commit | c06505b7e244f91ef30077f1a4026c24259610f4 (patch) | |
tree | 78a62c6b293b6ca7d0fd14501a4edd76d01215bf | |
parent | c81687527114b2f36aaf0db6e301f9c8f80f8d74 (diff) |
2010-06-04 Sebastien Pouliot <sebastien@ximian.com>
* PreferEmptyInstanceOverNullRule.cs: Keep state around since it
can be needed if we report a defect. Rename GetReturnTypeSuggestion
to SuggestReturnType (apply ConsiderConvertingMethodToPropertyRule)
svn path=/trunk/mono-tools/; revision=158504
-rw-r--r-- | gendarme/rules/Gendarme.Rules.BadPractice/ChangeLog | 6 | ||||
-rw-r--r-- | gendarme/rules/Gendarme.Rules.BadPractice/PreferEmptyInstanceOverNullRule.cs | 22 |
2 files changed, 19 insertions, 9 deletions
diff --git a/gendarme/rules/Gendarme.Rules.BadPractice/ChangeLog b/gendarme/rules/Gendarme.Rules.BadPractice/ChangeLog index 44b46cb3..16d82913 100644 --- a/gendarme/rules/Gendarme.Rules.BadPractice/ChangeLog +++ b/gendarme/rules/Gendarme.Rules.BadPractice/ChangeLog @@ -1,3 +1,9 @@ +2010-06-04 Sebastien Pouliot <sebastien@ximian.com> + + * PreferEmptyInstanceOverNullRule.cs: Keep state around since it + can be needed if we report a defect. Rename GetReturnTypeSuggestion + to SuggestReturnType (apply ConsiderConvertingMethodToPropertyRule) + 2010-01-28 Sebastien Pouliot <sebastien@ximian.com> * PreferTryParseRule.cs: Simplify and reduce code duplication by diff --git a/gendarme/rules/Gendarme.Rules.BadPractice/PreferEmptyInstanceOverNullRule.cs b/gendarme/rules/Gendarme.Rules.BadPractice/PreferEmptyInstanceOverNullRule.cs index eb02a5e7..7d2f2a4c 100644 --- a/gendarme/rules/Gendarme.Rules.BadPractice/PreferEmptyInstanceOverNullRule.cs +++ b/gendarme/rules/Gendarme.Rules.BadPractice/PreferEmptyInstanceOverNullRule.cs @@ -130,6 +130,9 @@ namespace Gendarme.Rules.BadPractice { public class PreferEmptyInstanceOverNullRule : ReturnNullRule, IMethodRule { TypeReference returnType; + bool return_string; + bool return_array; + bool return_ienumerable; public override RuleResult CheckMethod (MethodDefinition method) { @@ -143,28 +146,29 @@ namespace Gendarme.Rules.BadPractice { //only apply to methods returning string, array, or IEnumerable-impl returnType = method.ReturnType.ReturnType; - if (returnType.FullName != "System.String" - && !returnType.IsArray () - && !returnType.Implements ("System.Collections.IEnumerable")) { + return_string = (returnType.FullName == "System.String"); + return_array = returnType.IsArray (); + return_ienumerable = returnType.Implements ("System.Collections.IEnumerable"); + + if (!return_string && !return_array && !return_ienumerable) return RuleResult.DoesNotApply; - } return base.CheckMethod (method); } protected override void Report (MethodDefinition method, Instruction ins) { - string msg = string.Format ("Replace null with {0}.", GetReturnTypeSuggestion ()); + string msg = string.Format ("Replace null with {0}.", SuggestReturnType ()); Runner.Report (method, ins, method.IsVisible () ? Severity.Medium : Severity.Low, Confidence.Normal, msg); } - string GetReturnTypeSuggestion () + string SuggestReturnType () { - if (returnType.FullName == "System.String") + if (return_string) return "string.Empty"; - else if (returnType.IsArray ()) + else if (return_array) return string.Format ("an empty {0} array", returnType.Name); - else if (returnType.FullName.StartsWith ("System.Collections.Generic.IEnumerable")) + else if (return_ienumerable) return "yield break (or equivalent)"; return "an empty collection"; } |