Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono-tools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric Vivier <cedricv@neonux.com>2009-06-10 18:39:57 +0400
committerCedric Vivier <cedricv@neonux.com>2009-06-10 18:39:57 +0400
commitdeb679ea86e2b2665a75be9dc1666ee39b9318e0 (patch)
treef9d83b4225d37b9913852b64fef57828d54ec9e4
parent1b513aa3f540ecd227cdffb80575d9ac204b9600 (diff)
2009-06-10 Cedric Vivier <cedricv@neonux.com>
* BadRecursiveInvocationRule.cs: Catch recursion on static properties/methods when the call is the first instruction (excluding arguments if any). svn path=/trunk/mono-tools/; revision=135856
-rw-r--r--gendarme/rules/Gendarme.Rules.Correctness/BadRecursiveInvocationRule.cs5
-rw-r--r--gendarme/rules/Gendarme.Rules.Correctness/ChangeLog5
-rw-r--r--gendarme/rules/Gendarme.Rules.Correctness/Test/BadRecursiveInvocationTest.cs30
3 files changed, 35 insertions, 5 deletions
diff --git a/gendarme/rules/Gendarme.Rules.Correctness/BadRecursiveInvocationRule.cs b/gendarme/rules/Gendarme.Rules.Correctness/BadRecursiveInvocationRule.cs
index d1d52c6c..411eb77a 100644
--- a/gendarme/rules/Gendarme.Rules.Correctness/BadRecursiveInvocationRule.cs
+++ b/gendarme/rules/Gendarme.Rules.Correctness/BadRecursiveInvocationRule.cs
@@ -132,11 +132,10 @@ namespace Gendarme.Rules.Correctness {
private static bool CheckForEndlessRecursion (MethodDefinition method, int index)
{
int pcount = method.Parameters.Count;
- if (index <= pcount)
- return false;
-
if (!method.HasThis)
pcount--;
+ if (index <= pcount)
+ return false;
for (int i = pcount; i >= 0; i--) {
if (!CheckParams (method, ref index, i))
diff --git a/gendarme/rules/Gendarme.Rules.Correctness/ChangeLog b/gendarme/rules/Gendarme.Rules.Correctness/ChangeLog
index c747a006..49d95171 100644
--- a/gendarme/rules/Gendarme.Rules.Correctness/ChangeLog
+++ b/gendarme/rules/Gendarme.Rules.Correctness/ChangeLog
@@ -1,3 +1,8 @@
+2009-06-10 Cedric Vivier <cedricv@neonux.com>
+
+ * BadRecursiveInvocationRule.cs: Catch recursion on static properties/methods
+ when the call is the first instruction (excluding arguments if any).
+
2008-04-30 Jesse Jones <jesjones@mindspring.com>
* AvoidMethodsWithSideEffectsInConditionalCodeRule.cs:
diff --git a/gendarme/rules/Gendarme.Rules.Correctness/Test/BadRecursiveInvocationTest.cs b/gendarme/rules/Gendarme.Rules.Correctness/Test/BadRecursiveInvocationTest.cs
index 082d6961..74cd0c43 100644
--- a/gendarme/rules/Gendarme.Rules.Correctness/Test/BadRecursiveInvocationTest.cs
+++ b/gendarme/rules/Gendarme.Rules.Correctness/Test/BadRecursiveInvocationTest.cs
@@ -72,6 +72,10 @@ namespace Test.Rules.Correctness {
get { return FooPlusOne + 1; }
}
+ public static int StaticFooPlusOne {
+ get { return StaticFooPlusOne + 1; }
+ }
+
/* correct */
public int Bar {
get { return -1; }
@@ -98,6 +102,21 @@ namespace Test.Rules.Correctness {
return Equals (obzekt);
}
+ public static int StaticGoodOverload (object obzekt)
+ {
+ return StaticGoodOverload ((string) obzekt);
+ }
+
+ public static int StaticGoodOverload (string s)
+ {
+ return 0;
+ }
+
+ public static int StaticBad (object obzekt)
+ {
+ return StaticBad (obzekt);
+ }
+
public static int StaticBadFibo (int n)
{
return StaticBadFibo (n - 1) + StaticBadFibo (n - 2);
@@ -160,6 +179,7 @@ namespace Test.Rules.Correctness {
AssertRuleFailure<BadRec> ("get_Foo", 1);
AssertRuleFailure<BadRec> ("get_OnePlusFoo", 1);
AssertRuleFailure<BadRec> ("get_FooPlusOne", 1);
+ AssertRuleFailure<BadRec> ("get_StaticFooPlusOne", 1);
}
[Test]
@@ -181,9 +201,10 @@ namespace Test.Rules.Correctness {
}
[Test]
- public void BadRecursiveMethod ()
+ public void BadRecursiveMethods ()
{
AssertRuleFailure<BadRec> ("Equals", 1);
+ AssertRuleFailure<BadRec> ("StaticBad", 1);
}
[Test]
@@ -335,7 +356,6 @@ namespace Test.Rules.Correctness {
}
[Test]
- [Ignore ("needs review, this work on MS compiled code!")]
public void MoreCoverage_Static ()
{
AssertRuleFailure<Coverage> ("StaticFewParameters", 1);
@@ -348,5 +368,11 @@ namespace Test.Rules.Correctness {
AssertRuleFailure<Coverage> ("FewParameters", 1);
AssertRuleFailure<Coverage> ("ManyParameters", 1);
}
+
+ [Test]
+ public void StaticGoodOverload ()
+ {
+ AssertRuleSuccess<BadRec> ("StaticGoodOverload", new Type [] { typeof (object) });
+ }
}
}