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

github.com/xamarin/NRefactory.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Grunwald <daniel@danielgrunwald.de>2015-05-30 21:14:49 +0300
committerDaniel Grunwald <daniel@danielgrunwald.de>2015-05-30 21:14:49 +0300
commit82127d394d94b9e3883a1277a0fd6095c9fb694d (patch)
treea0c9398553f06c00a1dc528bbf48227c08f658d5
parent3af570c381d98b9560f38058c728e0a97d918b07 (diff)
InheritanceHelper: skip private base members
-rw-r--r--ICSharpCode.NRefactory.Tests/TypeSystem/InheritanceHelperTests.cs24
-rw-r--r--ICSharpCode.NRefactory/TypeSystem/InheritanceHelper.cs4
2 files changed, 28 insertions, 0 deletions
diff --git a/ICSharpCode.NRefactory.Tests/TypeSystem/InheritanceHelperTests.cs b/ICSharpCode.NRefactory.Tests/TypeSystem/InheritanceHelperTests.cs
index 36a2cefc..1b7ae191 100644
--- a/ICSharpCode.NRefactory.Tests/TypeSystem/InheritanceHelperTests.cs
+++ b/ICSharpCode.NRefactory.Tests/TypeSystem/InheritanceHelperTests.cs
@@ -74,5 +74,29 @@ public class Derived : Base {
Assert.That(InheritanceHelper.GetDerivedMember(btype.Methods.Single(m => m.Name == name), dtype), Is.EqualTo(dtype.Methods.Single(m => m.Name == name)), name + " does not match");
}
}
+
+ [Test]
+ public void PrivateMemberDoesNotDisruptSearchForBaseMember()
+ {
+ string program = @"using System.Collections.Generic;
+public class Base {
+ public virtual int M();
+}
+public class Middle : Base {
+ private int M();
+}
+public class Derived : Middle {
+ public override void M() {}
+}";
+
+ var unresolvedFile = new CSharpParser().Parse(program, "program.cs").ToTypeSystem();
+ var compilation = new CSharpProjectContent().AddAssemblyReferences(CecilLoaderTests.Mscorlib).AddOrUpdateFiles(unresolvedFile).CreateCompilation();
+
+ var dtype = (ITypeDefinition)ReflectionHelper.ParseReflectionName("Derived").Resolve(compilation);
+ var btype = (ITypeDefinition)ReflectionHelper.ParseReflectionName("Base").Resolve(compilation);
+
+ Assert.AreEqual(btype.Methods.Single(m => m.Name == "M"),
+ InheritanceHelper.GetBaseMember(dtype.Methods.Single(m => m.Name == "M")));
+ }
}
} \ No newline at end of file
diff --git a/ICSharpCode.NRefactory/TypeSystem/InheritanceHelper.cs b/ICSharpCode.NRefactory/TypeSystem/InheritanceHelper.cs
index 0fab9d5a..b4f272a6 100644
--- a/ICSharpCode.NRefactory/TypeSystem/InheritanceHelper.cs
+++ b/ICSharpCode.NRefactory/TypeSystem/InheritanceHelper.cs
@@ -83,6 +83,10 @@ namespace ICSharpCode.NRefactory.TypeSystem
baseMembers = baseType.GetMembers(m => m.Name == member.Name && !m.IsExplicitInterfaceImplementation, GetMemberOptions.IgnoreInheritedMembers);
}
foreach (IMember baseMember in baseMembers) {
+ if (baseMember.IsPrivate) {
+ // skip private base members;
+ continue;
+ }
if (SignatureComparer.Ordinal.Equals(member, baseMember)) {
yield return baseMember.Specialize(substitution);
}