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:
authorSebastien Pouliot <sebastien@ximian.com>2011-01-08 20:59:22 +0300
committerSebastien Pouliot <sebastien@ximian.com>2011-01-08 20:59:22 +0300
commita9c1e087f17d89c18b325bcec592b26a40264c5c (patch)
treefb61c38de36d92a5d68c874490aac0141b1c3427
parent76bdede936d74179df95cbd07cf8f579783d928a (diff)
Fix AvoidUninstantiatedInternalClassesRule when no ctor are present
* AvoidUninstantiatedInternalClassesRule.cs: Return false (no NRE) when no .ctor are found (e.g. struct) * Test/AvoidUninstantiatedInternalClassesTest.cs: Test case for above Found/patch by Antoine Vandecreme <avandecreme@sopragroup.com>
-rw-r--r--gendarme/rules/Gendarme.Rules.Performance/AvoidUninstantiatedInternalClassesRule.cs4
-rw-r--r--gendarme/rules/Gendarme.Rules.Performance/Test/AvoidUninstantiatedInternalClassesTest.cs36
2 files changed, 40 insertions, 0 deletions
diff --git a/gendarme/rules/Gendarme.Rules.Performance/AvoidUninstantiatedInternalClassesRule.cs b/gendarme/rules/Gendarme.Rules.Performance/AvoidUninstantiatedInternalClassesRule.cs
index 94e63e41..518a4519 100644
--- a/gendarme/rules/Gendarme.Rules.Performance/AvoidUninstantiatedInternalClassesRule.cs
+++ b/gendarme/rules/Gendarme.Rules.Performance/AvoidUninstantiatedInternalClassesRule.cs
@@ -200,6 +200,10 @@ namespace Gendarme.Rules.Performance {
return false; // more than one ctor
constructor = method;
}
+
+ if (constructor == null)
+ return false;
+
return (constructor.IsPrivate && !constructor.HasParameters);
}
diff --git a/gendarme/rules/Gendarme.Rules.Performance/Test/AvoidUninstantiatedInternalClassesTest.cs b/gendarme/rules/Gendarme.Rules.Performance/Test/AvoidUninstantiatedInternalClassesTest.cs
index 27105cbb..dae35a2a 100644
--- a/gendarme/rules/Gendarme.Rules.Performance/Test/AvoidUninstantiatedInternalClassesTest.cs
+++ b/gendarme/rules/Gendarme.Rules.Performance/Test/AvoidUninstantiatedInternalClassesTest.cs
@@ -90,6 +90,30 @@ namespace Test.Rules.Performance {
}
}
+ internal struct InternalUninstantiatedStruct {
+
+ public void display ()
+ {
+ }
+
+ public static void Main (string [] args)
+ {
+ }
+ }
+
+ internal struct InternalInstantiatedStruct {
+
+ public void display ()
+ {
+ }
+
+ public static void Main (string [] args)
+ {
+ InternalInstantiatedStruct i = new InternalInstantiatedStruct ();
+ i.display ();
+ }
+ }
+
// people may use the following two patterns to have
// static classes in C# 1.
internal sealed class InternalSealedClassWithPrivateCtor {
@@ -300,6 +324,18 @@ namespace Test.Rules.Performance {
}
[Test]
+ public void InternalInstantiatedStructTest ()
+ {
+ AssertRuleSuccess<InternalInstantiatedStruct> ();
+ }
+
+ [Test]
+ public void InternalUninstantiatedStructTest ()
+ {
+ AssertRuleFailure<InternalUninstantiatedStruct> ();
+ }
+
+ [Test]
public void InternalSealedClassWithPrivateCtor ()
{
AssertRuleDoesNotApply<InternalSealedClassWithPrivateCtor> ();