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.pouliot@gmail.com>2013-04-28 19:25:30 +0400
committerSebastien Pouliot <sebastien.pouliot@gmail.com>2013-04-28 19:25:30 +0400
commit49f678725442440aac5620e0c7b2e79cbcb5c9e4 (patch)
treebf22eef568d898823e8c040ccb7a6ee6b6c7afdb
parent6c300e35f1c7c7ed9c9c8b7b5a0c8778fefd2cc0 (diff)
parent7eafc469ddcc5e1a41cbc6c30608858866a71e54 (diff)
Merge pull request #23 from krijesta/typerocks
Typerocks IsNamed() errors
-rw-r--r--gendarme/framework/Gendarme.Framework.Rocks/TypeRocks.cs32
-rw-r--r--gendarme/framework/Test/Gendarme.Framework.Rocks/RocksTest.cs3
-rw-r--r--gendarme/framework/Test/Gendarme.Framework.Rocks/TypeRocksTest.cs44
3 files changed, 60 insertions, 19 deletions
diff --git a/gendarme/framework/Gendarme.Framework.Rocks/TypeRocks.cs b/gendarme/framework/Gendarme.Framework.Rocks/TypeRocks.cs
index e2e7eb4a..efdcc0f0 100644
--- a/gendarme/framework/Gendarme.Framework.Rocks/TypeRocks.cs
+++ b/gendarme/framework/Gendarme.Framework.Rocks/TypeRocks.cs
@@ -257,7 +257,7 @@ namespace Gendarme.Framework.Rocks {
return false; // not enough information available
// special case, check if we implement ourselves
- if (type.IsInterface && Match (type, nameSpace, name))
+ if (type.IsInterface && type.IsNamed (nameSpace, name))
return true;
return Implements (type, nameSpace, name);
@@ -269,7 +269,7 @@ namespace Gendarme.Framework.Rocks {
// does the type implements it itself
if (type.HasInterfaces) {
foreach (TypeReference iface in type.Interfaces) {
- if (Match (iface, nameSpace, iname))
+ if (iface.IsNamed (nameSpace, iname))
return true;
//if not, then maybe one of its parent interfaces does
if (Implements (iface.Resolve (), nameSpace, iname))
@@ -282,23 +282,6 @@ namespace Gendarme.Framework.Rocks {
return false;
}
- private static bool Match (TypeReference type, string nameSpace, string name)
- {
- int np = name.IndexOf ('/');
- if (np == -1) {
- if (type.IsNamed (nameSpace, name))
- return true;
- } else if (type.IsNested) {
- string tname = type.Name;
- TypeReference dt = type.DeclaringType;
- if ((nameSpace == dt.Namespace) &&
- (String.CompareOrdinal (name, 0, dt.Name, 0, np) == 0) &&
- (String.CompareOrdinal (name, np + 1, tname, 0, tname.Length) == 0))
- return true;
- }
- return false;
- }
-
/// <summary>
/// Check if the type inherits from the specified type. Note that it is possible that
/// we might not be able to know the complete inheritance chain since the assembly
@@ -348,6 +331,15 @@ namespace Gendarme.Framework.Rocks {
throw new ArgumentNullException ("name");
if (self == null)
return false;
+
+ if (self.IsNested) {
+ int spos = name.LastIndexOf ('/');
+ if (spos == -1)
+ return false;
+ // GetFullName could be optimized away but it's a fairly uncommon case
+ return (nameSpace + "." + name == self.GetFullName ());
+ }
+
return ((self.Namespace == nameSpace) && (self.Name == name));
}
@@ -382,6 +374,8 @@ namespace Gendarme.Framework.Rocks {
return false;
string name = self.Name;
+ if (fullName.Length - dpos - 1 != name.Length)
+ return false;
return (String.CompareOrdinal (name, 0, fullName, dpos + 1, fullName.Length - dpos - 1) == 0);
}
diff --git a/gendarme/framework/Test/Gendarme.Framework.Rocks/RocksTest.cs b/gendarme/framework/Test/Gendarme.Framework.Rocks/RocksTest.cs
index ed62b9c5..4c746fa2 100644
--- a/gendarme/framework/Test/Gendarme.Framework.Rocks/RocksTest.cs
+++ b/gendarme/framework/Test/Gendarme.Framework.Rocks/RocksTest.cs
@@ -49,6 +49,9 @@ namespace Test.Framework.Rocks {
public abstract void PublicMethod ();
protected abstract void ProtectedMethod ();
private void PrivateMethod () { }
+
+ public abstract class NestedNestedPublicType {
+ }
}
protected abstract class NestedProtectedType {
diff --git a/gendarme/framework/Test/Gendarme.Framework.Rocks/TypeRocksTest.cs b/gendarme/framework/Test/Gendarme.Framework.Rocks/TypeRocksTest.cs
index 93d946d1..99366bee 100644
--- a/gendarme/framework/Test/Gendarme.Framework.Rocks/TypeRocksTest.cs
+++ b/gendarme/framework/Test/Gendarme.Framework.Rocks/TypeRocksTest.cs
@@ -343,6 +343,50 @@ namespace Test.Framework.Rocks {
}
[Test]
+ public void IsNamed ()
+ {
+ string name = "Test.Framework.Rocks.PublicType";
+ TypeDefinition type = assembly.MainModule.GetType (name);
+
+ Assert.IsTrue (type.IsNamed ( "Test.Framework.Rocks.PublicType"));
+ Assert.IsFalse (type.IsNamed ("Test.Framework.Rocks.P"));//Missing Text
+ Assert.IsFalse (type.IsNamed ("Test.Framework.Rocks.PublicTypeExtraText"));
+
+ Assert.IsTrue (type.IsNamed ("Test.Framework.Rocks", "PublicType"));
+ Assert.IsFalse (type.IsNamed ("Test.Framework.Rocks", "P"));//Missing Text
+ Assert.IsFalse (type.IsNamed ("Test.Framework.Rocks", "PublicTypeExtraText"));
+ }
+
+ [Test]
+ public void IsNamedNestedType ()
+ {
+ string name = "Test.Framework.Rocks.PublicType/NestedPublicType";
+ TypeDefinition type = assembly.MainModule.GetType (name);
+
+ Assert.IsTrue (type.IsNamed ("Test.Framework.Rocks.PublicType/NestedPublicType"));
+ Assert.IsFalse (type.IsNamed ("Test.Framework.Rocks.PublicType/N"));//Missing Text
+ Assert.IsFalse (type.IsNamed ("Test.Framework.Rocks.PublicType/NestedPublicTypeExtaStuff"));
+
+ Assert.IsTrue (type.IsNamed ("Test.Framework.Rocks", "PublicType/NestedPublicType"));
+ Assert.IsFalse (type.IsNamed ("Test.Framework.Rocks", "PublicType/N"));//Missing Text
+ Assert.IsFalse (type.IsNamed ("Test.Framework.Rocks", "PublicType/NestedPublicTypeExtraText"));
+
+ Assert.IsFalse (type.IsNamed ("Test.Framework.Rocks", "NestedPublicType"));
+ Assert.IsFalse (type.IsNamed ("", "NestedPublicType"));
+ }
+
+ [Test]
+ public void IsNamedDoubleNestedType ()
+ {
+ string name = "Test.Framework.Rocks.PublicType/NestedPublicType/NestedNestedPublicType";
+ TypeDefinition type = assembly.MainModule.GetType (name);
+
+ Assert.IsTrue (type.IsNamed ("Test.Framework.Rocks.PublicType/NestedPublicType/NestedNestedPublicType"));
+
+ Assert.IsTrue (type.IsNamed ("Test.Framework.Rocks", "PublicType/NestedPublicType/NestedNestedPublicType"));
+ }
+
+ [Test]
public void IsVisible ()
{
string name = "Test.Framework.Rocks.PublicType";