diff options
author | Jb Evain <jbevain@gmail.com> | 2014-11-02 14:08:25 +0300 |
---|---|---|
committer | Jb Evain <jbevain@gmail.com> | 2014-11-02 14:08:25 +0300 |
commit | 41f3bc703931e782ac87576062ec3938aa8a01c2 (patch) | |
tree | 1ac20e5cf27c0f3c6618b9ff21689f285fe913e1 /rocks | |
parent | 38c11b39a021013e971d6b2ab1da536bd0f99121 (diff) |
Properly handle newslot in GetBaseMethod
Diffstat (limited to 'rocks')
-rw-r--r-- | rocks/Mono.Cecil.Rocks/MethodDefinitionRocks.cs | 2 | ||||
-rw-r--r-- | rocks/Test/Mono.Cecil.Tests/MethodDefinitionRocksTests.cs | 13 |
2 files changed, 15 insertions, 0 deletions
diff --git a/rocks/Mono.Cecil.Rocks/MethodDefinitionRocks.cs b/rocks/Mono.Cecil.Rocks/MethodDefinitionRocks.cs index c2f758d..39a2d90 100644 --- a/rocks/Mono.Cecil.Rocks/MethodDefinitionRocks.cs +++ b/rocks/Mono.Cecil.Rocks/MethodDefinitionRocks.cs @@ -41,6 +41,8 @@ namespace Mono.Cecil.Rocks { throw new ArgumentNullException ("self"); if (!self.IsVirtual) return self; + if (self.IsNewSlot) + return self; var base_type = ResolveBaseType (self.DeclaringType); while (base_type != null) { diff --git a/rocks/Test/Mono.Cecil.Tests/MethodDefinitionRocksTests.cs b/rocks/Test/Mono.Cecil.Tests/MethodDefinitionRocksTests.cs index 2cfe014..4c6e3fb 100644 --- a/rocks/Test/Mono.Cecil.Tests/MethodDefinitionRocksTests.cs +++ b/rocks/Test/Mono.Cecil.Tests/MethodDefinitionRocksTests.cs @@ -11,18 +11,27 @@ namespace Mono.Cecil.Tests { abstract class Foo { public abstract void DoFoo (); + public abstract void DoBar (); } class Bar : Foo { public override void DoFoo () { } + + public override void DoBar () + { + } } class Baz : Bar { public override void DoFoo () { } + + public virtual new void DoBar () + { + } } [Test] @@ -38,6 +47,10 @@ namespace Mono.Cecil.Tests { Assert.AreEqual ("Foo", @base.DeclaringType.Name); Assert.AreEqual (@base, @base.GetBaseMethod ()); + + var new_dobar = baz.GetMethod ("DoBar"); + @base = new_dobar.GetBaseMethod(); + Assert.AreEqual("Baz", @base.DeclaringType.Name); } [Test] |