diff options
author | Sebastien Pouliot <sebastien@ximian.com> | 2011-01-08 20:59:22 +0300 |
---|---|---|
committer | Sebastien Pouliot <sebastien@ximian.com> | 2011-01-08 20:59:22 +0300 |
commit | a9c1e087f17d89c18b325bcec592b26a40264c5c (patch) | |
tree | fb61c38de36d92a5d68c874490aac0141b1c3427 | |
parent | 76bdede936d74179df95cbd07cf8f579783d928a (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.cs | 4 | ||||
-rw-r--r-- | gendarme/rules/Gendarme.Rules.Performance/Test/AvoidUninstantiatedInternalClassesTest.cs | 36 |
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> (); |