Browse Source

Fixed code completion on protected members from a base class when the inheritance was specified in a different part of a partial class.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@4252 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
f33b5c152c
  1. 22
      src/Main/Base/Test/NRefactoryResolverTests.cs
  2. 4
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultClass.cs
  3. 6
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/IClass.cs

22
src/Main/Base/Test/NRefactoryResolverTests.cs

@ -2784,5 +2784,27 @@ class Form { @@ -2784,5 +2784,27 @@ class Form {
var mgrr = Resolve<MethodGroupResolveResult>(program, "this.KeyDown", 4);
Assert.AreEqual("Test.KeyDown", mgrr.GetMethodIfSingleOverload().FullyQualifiedName);
}
[Test]
public void ProtectedMemberVisibleWhenBaseTypeReferenceIsInOtherPart()
{
string program = @"using System;
partial class A {
void M1() {
}
}
partial class A : B { }
class B
{
protected int x;
}";
var mrr = Resolve<MemberResolveResult>(program, "x", 4);
Assert.AreEqual("B.x", mrr.ResolvedMember.FullyQualifiedName);
var rr = Resolve<ResolveResult>(program, "this", 4);
var completionData = rr.GetCompletionData(mrr.ResolvedMember.DeclaringType.ProjectContent);
Assert.IsTrue(completionData.OfType<IField>().Any(f => f.FullyQualifiedName == "B.x"));
}
}
}

4
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Implementations/DefaultClass.cs

@ -379,6 +379,10 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -379,6 +379,10 @@ namespace ICSharpCode.SharpDevelop.Dom
public IEnumerable<IClass> ClassInheritanceTree {
get {
IClass compoundClass = GetCompoundClass();
if (compoundClass != this)
return compoundClass.ClassInheritanceTree;
// Notes:
// the ClassInheritanceTree must work even if the following things happen:
// - cyclic inheritance

6
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/IClass.cs

@ -80,7 +80,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -80,7 +80,11 @@ namespace ICSharpCode.SharpDevelop.Dom
IList<ITypeParameter> TypeParameters {
get;
}
/// <summary>
/// Returns the list of all classes that this class inherits from (directly or indirectly).
/// If this property is used on part of a partial class, it will also return classes inherited in other parts.
/// </summary>
IEnumerable<IClass> ClassInheritanceTree {
get;
}

Loading…
Cancel
Save